概述
操作系统需要对磁盘的管理
- 1. 对非空闲磁盘的管理
- 1. 连续分配
- 2. 链接分配
- 3. 索引分配
- 4. 总结
- 2. 对空闲磁盘的管理
- 1. 存储空间的划分与初始化
- 2. 几种管理方法
1. 对非空闲磁盘的管理
“文件的物理结构/文件分配方式” 的探讨
- 知识补充:
- 文件块、磁盘块
- 类似于内存分页,磁盘中的存储单元也会被分为一个个“块/磁盘块/物理块”,很多操作系统中磁盘块的大小与内存块、页面的大小相同
- 内存于磁盘之间的数据交换(即读/写操作,磁盘I/O)都是以“块”为单位的,即每次读入一块
- 内存管理中,进程的逻辑地址空间被分为一个个页面。同样的,在外存管理中,文件的逻辑地址空间同样被分为了一个个文件的块
- 于是文件的逻辑结构地址也可以表示为(逻辑块号,块内地址)的形式
- 文件块、磁盘块
操作系统怎么完成 逻辑地址到物理地址的映射?
(逻辑块号,块内地址)→(物理地址,块内地址),只需要转换块号就行,块内地址保持不变
1. 连续分配
- 要求每个文件在磁盘上占有一组连续的块
- 文件目录中记录着文件的起始块号和长度(总共占几块)
- 映射过程:
- 用户给出要访问的逻辑块号,操作系统找到该文件对应的目录项(FCB)
- 物理块号=起始块号+逻辑块号(绝对=起始+相对)
- 话需要检查用户提供的逻辑块号<= 文件长度
- 性能:
- 优点:
- 可以直接算出逻辑块号对应的物理块号,因此连续分配支持顺序访问和直接访问
顺序访问:一块一块顺序访问
直接访问:要访问2号块,可以跳过1号块直接访问(能直接算出2号块) - 连续分配的文件在顺序读写时速度最快
读取某个磁盘块时,需要移动磁头。访问的两个磁盘块相距越远,移动磁头所需的时间就越长
- 可以直接算出逻辑块号对应的物理块号,因此连续分配支持顺序访问和直接访问
- 缺点:
- 不方便文件的拓展
- 存储空间利用率低,会产生磁盘碎片
- 优点:
2. 链接分配
- 采取离散分配方式,可以为文件分配离散的磁盘块
- 分类:
- 隐式链接:(考试中默认的链接方式)
- 文件记录了文件存放的起始块号和结束块号
- 除了文件最后一个磁盘外,每个磁盘中都会保存指向下一个盘块的指针,这些指针对用户是透明的
- 从目录项中找到起始块号(即0号块),将0号逻辑块读入内存,由此知道1号逻辑块存放的物理块号,于是读入1号逻辑块,再找到2号块的逻辑地址——因此,读入 i 号逻辑块,总共需要 i + 1 次磁盘I/O
- 性能:
- 优点:
- 由于是离散的,故方便文件的拓展,且不会有碎片问题
- 缺点:
- 采用隐式的链接分配,只支持顺序访问,不支持随机访问,查找效率低
- 块内存储下一个逻辑块的指针也会占用少量的存储空间
- 优点:
- 显式链接:
- 把用于链接文件的各个物理块的指针显式地、统一地存放在一张表中,即 文件分配表FAT
- 假设有一个文件aaa依次存放在磁盘块2,5,0,1,目录中只会存放文件的起始块号
- 注意:
- 一个磁盘仅设置一张FAT,开机时,将FAT读入内存,并⭐常驻内存
- FAT各个表项在物理上连续存储,且每一个表项大小相同,所以物理块号可以隐含
- 从目录项中找到起始块号(即0号块),如要查找的 i 号块,i > 0 ,则查询 内存中 的FAT,依次找到 i 号块的物理地址,因此,逻辑块号转换成物理块号的过程不需要读磁盘操作
- 性能:
- 优点:
- 由于是离散的,故方便文件的拓展,且不会有碎片问题
- 采用显式的链接分配,不仅支持顺序访问,也支持随机访问(有FAT的存在,不需要像之前一样依次访问之前的磁盘块,在FAT中找就行),查找效率高
- 缺点:
- 文件分配表FAT也会占用少量的存储空间
- 优点:
- 隐式链接:(考试中默认的链接方式)
3. 索引分配
- 索引分配允许文件离散地存放在各个磁盘中,系统会为每个文件建立一张索引表,索引表中建立了文件的各个逻辑块相对的物理块号(逻辑页面到物理块之间的映射关系)
- 索引表存放的物理块称为索引块,文件数据存放的物理块称为数据块
- 目录中需要记录的是文件的索引块所在的物理块
- 假设有一个文件aaa依次存放在磁盘块2,5,0,1,目录中只会存放文件的索引块所在的7号物理块,去7号物理块调出文件aaa的索引表内容后,里面存放着文件aaa每个逻辑块对应的物理块号
- 可以用固定长度表示索引表中的物理块号。如:若磁盘总容量为1TB=240 B,而一个物理快大小为1KB=210B,则一共有物理块数=240 B/210B= 230 个,则要表示这么多块,需要30位二进制,所以需要用于存储物理块号的大小应为:4B。同时,索引表在索引块中是顺序存储的,且每个索引表项位4B,故逻辑块号是可以隐含的,即索引表项大小为4B
- 性能:
- 优点:
- 索引分配方式可以支持随机访问
- 方便实现文件的拓展(只需要给文件分配一个空闲块,同时增加一个索引表项即可)
- 缺点:
- 索引表需要占用一定空间
- 优点:
- 思考:
上面例子中,一个物理快大小为1KB=210B,索引表项大小为4B,故一个索引块中能放210 / 4 =256个索引表项,但是如果一个文件的索引表项大于256个,该怎办呢?
- 链接方案
- 如果索引表太大,则可以将大索引表拆分成很多小的索引表,再将这些索引表链接起来
- 存在的问题:
如果一个文件大小为64MB=226 B,而一个磁盘块大小为1KB,则该文件需要226 /210 =216 个物理块,又由于一个磁盘块中只能放256=28 个索引项,所以光存放索引表的索引块就需要216 / 28 =28 个,这些索引块是一个个串起来的,如果要读文件的结尾,就需要访问 256个磁盘块才能实现,可见这样的磁盘I/O是很大的
- 多层索引
- 建立多层索引(原理类似于多级页表),使第一层索引块指向第二层索引块,还可以根据文件大小的要求再建立第三层、第四层索引块
- 假设磁盘块大小为1KB,一个索引表项占4B,所以一个磁盘块中能存放28 个索引表项,因此,两级索引中能存放的文件的最大大小为28 *28 * 1KB= 226 B=64MB
- 如何根据逻辑块号找到它的物理块号:
- 要访问1026号逻辑块,则1026 % 28 =4,1026 / 28 =2,也就是1026号逻辑块需要去 4号二级索引表的第2个表项去找
- 先由7号找到一级索引表,再由一级索引表的第4个索引表项,再找到4号二级索引表,再由该二级索引表的第2个表项访问目标物理块——可见需要3次磁盘I/O
- 若采用三级索引,则文件最大为28 * 28 * 281KB= 232 B=16GB,访问目标数据块需要4次磁盘I/O,( i 级索引,需要 i +1 次I/O)
- 多级索引存在的问题:
虽然大读入文件的磁盘I/O次数大幅减少了,但这又会使得小文件徒增I/O,如果一个1KB的文件采用二级索引,同样也要3次磁盘I/O
如何解决呢?
- 建立多层索引(原理类似于多级页表),使第一层索引块指向第二层索引块,还可以根据文件大小的要求再建立第三层、第四层索引块
- 混合索引
- 多种索引分配方式的结合,既包含直接索引(直接指向数据块),又包含二级索引、三级索引
- 上边这种索引结构支持的最大文件为:(8+256+65536) * 1KB=65800KB
- 若顶级索引表还没读入内存:
- 访问0~7号逻辑块:两次读磁盘(对于小文件,只需要较少的读磁盘数也可以访问目标数据块)
- 访问8~263号逻辑块:三次读磁盘
- 访问264~65799号逻辑块:四次读磁盘
- ⭐⭐⭐重要考点:
- 根据多级索引、混合索引结构算出支持最大的文件大小(key:各级索引表的大小不能超过一个物理块)
- 分析访问某个数据块需要的读磁盘次数(key:FCB中会有指向定级索引表的指针;因此可以根据FCB读入顶级索引表,每次读入下一级索引块都需要一次磁盘I/O,注意:看清题目顶级索引块是否已经调入内存)
- 链接方案
4. 总结
2. 对空闲磁盘的管理
“文件的存储空间管理” 的探讨
1. 存储空间的划分与初始化
- 磁盘分区——存储空间的划分:将物理磁盘划分为一个个文件卷(逻辑卷、逻辑盘)
- 文件卷又会划分成目录区与文件区:
1. 目录区:主要存放 ① 文件的目录信息(FCB)、② 用于磁盘存储空间管理的信息如:空闲表、位示图、超级块等)
2. 文件区:用于存放文件数据 - 存储空间的初始化:将各个文件卷划分为目录区和文件区
2. 几种管理方法
- 空闲表法
- 怎么记录空闲区?
记录空闲区的第一个空闲块号和空闲物理块数 - 如何分配磁盘?
与内存管理中的动态分配很类似,为一个文件分配连续的存储空间。同样可采用首次适应、最佳适应、最坏适应等算法来决定为文件分配哪个空间 - 如何回收磁盘块?
与内存管理中的动态分配很类似,回收时要注意与相邻空闲磁盘块的合并问题 - 适用于连续分配的物理结构
- 怎么记录空闲区?
- 空闲链表法
- 空闲盘块链:以盘块为单位组成一条空闲链
- 操作系统保存着链头、链尾指针
- 如何分配:若某文件申请K个磁盘块,则从链头开始依次摘下 K个盘块分配,并修改空闲链的链头指针
- 如何回收:回收的盘块依次挂到链尾,并修改空闲链的尾指针
- 适用于离散分配的物理结构
- 空闲盘区链:以盘区为单位组成一条空闲链
- 操作系统保存着链头、链尾指针
- 如何分配:若某文件申请K个磁盘块,则从链头开始使用相应的算法,找到符合的盘区,若没有合适的盘区,也可以将不同盘区的物理块分配个同一个文件,分配完要修改相应的指针和盘区大小
- 如何回收:注意与相邻盘区的合并问题
- 连续、离散分配的物理结构 都适用
- 空闲盘块链:以盘块为单位组成一条空闲链
- 位示图法
- 位示图:每个二进制位对应一个盘块,0代表空闲,1代表已分配,位示图中一般用连续的字来表示,下面例子中,一个字的字长是16位,因此,可以用 (字号,位号) 对应一个盘块号,或(行号,列号)
- 转换时:注意,字号、位号、盘块号是从0开始,还是从1开始的
- 如何分配:①顺序找到 K 个0,② 根据这些 0 盘块的(字号,位号)计算出相应的盘块号,将这些盘块分配给文件,③ 并改0 为1
- 如何回收:根据要回收的盘块号计算出这些盘块的(字号,位号),并改 1 为 0
- 连续、离散分配都适用
- 成组链接法
空闲表法、空闲链表法不适合用于大型的文件系统,因为空闲表和空闲链表可能过大
UNIX系统中采用了成组链接法对磁盘空闲块进行管理
- 文件卷的目录区中专门用一个磁盘块作为超级块,当系统启动时需要将超级块读入内存。并且要保证内存与外存中的“超级块”数据一致
- 如何分配?
- 例一:需要分配一个空闲块
- 检查第一个分组是否够,1<100
- 分配第一个分组的1个空闲块,并修改超级块中的“下一分组的空闲盘块数”为99
- 例二:需要分配100个空闲块
- 检查第一个分组是否够,100=100
- 分配第一个分组的100个空闲块
- 由于需要将第一分组的第一块也分配,所以,需要将第一个分组的第一块中的第二分组的信息复制到超级块中
- 例一:需要分配一个空闲块
- 如何回收?
与分配反操作
最后
以上就是阳光小熊猫为你收集整理的【操作系统】4.3文件管理(操作系统需要对磁盘的管理)的全部内容,希望文章能够帮你解决【操作系统】4.3文件管理(操作系统需要对磁盘的管理)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复