33-文件的物理结构
文件的分配方式
操作系统对磁盘进行的管理
- 对非空闲磁盘块的管理
- 对空闲磁盘块的管理
文件的物理结构
在外存管理中,为了方便对文件的管理。文件的逻辑地址空间也被分为了一个一个的文件’块’.
因此文件的逻辑地址也可以表示为(逻辑块号,块内地址)的形式。
操作系统为文件分配存储空间都是以块为单位的。
用户通过逻辑地址来操作自己的文件,操作系统要负责从逻辑地址到物理地址的映射
连续分配
思想:连续分配方式要求每个文件在磁盘上占有一组连续的块。
文件目录中记录存放的起始块号和长度。
物理块号=起始块号+逻辑块号
当然,还需要验证逻辑块号的合法性,支持直接访问。
读取某个磁盘块时,需要移动磁头。访问的两个磁盘块相隔越远,移动磁头所需的时间越多。连续分配的文件在顺序读/写速度最快。
问题:
- 物理上的连续分配不方便文件的扩展
- 物理上的连续分配存储空间利用率低,会产生难以利用的磁盘碎片。可以用紧凑来处理碎片,但是需要耗费很大的时间代价。
连续分配方式要求每个文件在磁盘上占有一组连续的块
优点 - 支持顺序访问和随机访问
- 连续分配的文件在顺序访问时速度最快
缺点 - 不方便文件扩展
- 存储空间利用率低,会产生磁盘碎片。
链接分配
链接分配采用离散分配的方法。
隐式链接
目录中记录了文件的起始块号和结束块号。除了文件的最后一个磁盘块外,每个磁盘块中都保存指向下一个盘块的指针,这些指针对用户是透明的。
结论
采用链式分配(隐式链接)方式的文件,只支持顺序访问,不支持随机访问,查找效率低。另外,指向下一个盘块的指针也需要耗费少量的存储空间。
优点
- 很方便文件扩展,不会有碎片问题,外存利用率高
缺点 - 只支持顺序访问,不支持随机访问,查找效率低,指向下一个盘块的指针也需要耗费少量的存储空间。
显式链接
把用于链接文件各物理块的指针显式地存放在一张表中。即文件分配表(FAT,file Allocation Table)
一个磁盘仅需要设置一张FAT,开机时,将FAT读入内存,并常驻内存。FAT的各个表项在物理上连续存储,且每一个表项长度相同,因此"物理块号"字段可以是一那还能的。
结论
采用显式分配的文件,支持顺序访问,也支持随机访问,由于块号转换的过程不需要访问磁盘,因此相比于隐式链接来说,访问速度更快。
缺点:文件分配表需要占用一定的存储空间。
索引分配
索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块(索引表的功能类似于内存管理中的页表)–建立逻辑页面到物理页之间的映射关系。索引表存放的磁盘块称为索引块。文件数据存放的磁盘称为数据块
注意:在显示链接的链式分配方式中,文件分配表FAT是一个磁盘对应一张。而索引分配方式中,索引表是一个文件对应一张。
如何查找
用户给出要访问的逻辑块号,操作系统找到该文件对应的目录项(FCB),从目录项中可知索引表存放位置,将索引表从外存读入内存,并查找索引表即可知道i号逻辑块在外村中的存放位置。
索引分配方式可以支持随机访问。文件扩展也很容易实现(只需要给文件分配一个空闲块,并增加一个索引表项即可)。索引表需要占用一定的磁盘空间
索引表太大
如果一个索引表在一个磁盘块装不下,有三种解决方案:
链接方案
如果一个索引表太大,一个索引块装不下,那么可以将多个索引块链接起来存放。
问题:低效
多层索引
建立多层索引(原理类似于多级页表)。使第一层索引块指向第二层的索引块。还可以根据文件大小的要求再建立第三层、第四层索引块。
假设磁盘块大小是1kb,一个索引表项占4B,则一个磁盘块只能存放256个索引项。
若某文件采用两层索引,则该文件的最大长度可以到256x256x1KB=65536KB=64MB
可根据逻辑块号算出查找索引表的哪个表象
比如要访问1026号逻辑块,则:
1026/256=4,1026/256=2
因此可以先将一级索引表调入内存,查询4号表项,将其对应的二级索引表调入内存,再查询二级索引表的表项即可知道1026号逻辑块存放的磁盘块号了。访问目标数据块,需要3次磁盘I/O.
若采用3层索引结构,那么需要256x256x256x1kb=16GB,需要4次磁盘I/O
若采用K层索引结构,且顶级索引表未调入内存,则访问一个数据块只需要K+1次读磁盘操作。
混合索引
多种索引方式的结合:例如一个文件的顶级索引表中,即包含直接地址索引,又包含一级间接索引,还包含二级间接索引