04文件目录
4.1文件如何存放
文件分配表即可用于文件存放又可用于空闲块管理
4.1.1文件如何放
1.连续分配:
要求每个文件在磁盘上占有一组连续的块。
优点:
文件目录中记录存放的物理起始块号和长度,可完成由逻辑地址到物理地址的转换。
缺点:
文件扩展很不方便。
会产生难以利用的磁盘碎片。可以采用紧凑来处理碎片,但是需要耗费很到的时间代价。
链接分配:
2.隐式链接:
文件目录中记录存放的物理起始块号和结束块号,除文件的最后一个磁盘块外,每个磁盘块中都会保存指向下一个磁盘块的指针,这些指针对用户是透明的。
缺点:
读入i号逻辑块,需要进行i+1次I/O操作
只支持顺序访问,不支持随机访问
优点:
很方便文件扩展,不会有碎片问题,外存利用率高。
3.显示链接:
把用于链接文件各个物理块的指针显式地存放在一张表中,即文件分配表(FAT)。文件目录中只需记录文件的起始块号。一个磁盘设置一张FAT。开机时,将FAT读入内存,并常驻内存。
优点:
支持顺序访问,也支持随机访问
逻辑块号转换成物理块号的过程不需要读磁盘操作。
不会产生磁盘碎片
缺点:
文件分配表需要占用一定的存储空间
4.索引分配:
索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块。
支持随机访问
文件扩展也很容易实现
缺点:索引表会占用一定的存储空间
如果一个文件的索引表太大,一个磁盘块即索引块装不下,有以下集中解决方案:
链接方案:将多个索引块链接起来存放。文件目录中只需要记录第一个索引块号。因此,如果想要访问最后一个逻辑块,就必须找到最后一个索引块,必须先访问前面所有的索引块,查找效率低下。
多层索引
混合索引:多种索引分配方式的结合。例如,一个文件的顶级索引表中,既包含直接地址索引,即直接指向数据块,又包含一级间接索引(指向单层索引表),还包含两级简洁索引(指向两层索引表)。
4.1.2存储空间的划分与初始化
物理格式化:
对磁盘进行分区,确定磁盘扇区校验码所占的位数
逻辑格式化:
建立文件系统的根目录
对保存空闲磁盘块信息的数据结构进行初始化
4.2空闲块如何管理
4.2.1存储空间管理方法:
1.空闲表法
空闲表:第一个空闲盘块号+空闲盘块数
分配磁盘块和回收磁盘块和内存管理方法类似。
2.空闲链表法:
空闲盘块链:以盘块为单位组成一条空闲链
操作系统保存着链头和链尾指针。
如何分配:从链头开始分配,并修改链头指针;
如何回收:回收的磁盘块一次挂到链尾,并修改链尾指针。
适用于离散分配。
空闲盘区链:以盘区为单位组成一条空闲链
操作系统保存着链头和链尾指针。
既适用于连续分配,也适用于离散分配。
3.位示图法:
每个二进制位对应一个盘块。例如:0表示盘块空闲,1表示盘块已分配。
连续分配、离散分配都适用。
4.成组链接法:
空闲表和空闲链表不适用于大型文件系统,因为空闲表或者空闲链表可能过大。UNIX系统中采用了成组链接法对磁盘空闲块进行管理。
文件卷的目录区中专门用一个磁盘块作为“超级块”,当系统启动时需要将超级块读入内存。并且要保持内存与外存中的“超级块”数据一致。
4.2.2 寻道算法
先来先服务算法(FCFS):
根据进程请求访问磁盘的先后顺序进行调度
最短寻找时间优先(SSTF)
优先处理的磁道是离当前磁头最近的磁道。可以保证每次的寻道时间最短,但是并不能保证总的寻道时间最短。贪心算法的思想。
性能较好,平均寻道时间短
可能产生“饥饿”现象
扫描算法(SCAN):
解决SSTF的问题,规定:只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外侧移动。也称为电梯算法。
性能较好,不会产生饥饿现象