操作系统:文件系统、磁盘空间分配、分区
文件系统的实现
1)boot control block(引导控制块) :
-通常是卷的第一块
-从该卷中引导操作系统的所需信息
-如果磁盘不包含操作系统,则block为空
2)column control block(卷控制块) :
-包含块的基本信息
-在UFS中中被称为superblock(超级块)
3)目录结构 :
-用于组织文件
分区
- 一个磁盘有多个分区。
- 生 / 熟 :如果是生的,说明没有经过处理;如果是熟的,说明其被格式化过,已经经过处理。
- 不需要每次都读磁盘(因此提高效率),因此将文字描述符拷贝到内存中去,方便读取
目录结构的实现: 目录的结构包含一个文件名的列表,然后把数据信息放在列表中。
- 缺点:搜索文件的时候要遍历链表
- solution:加入哈希表提高效率(根据文件名查目录结构,查出对应位置和具体信息)。
每个文件的block分配方法
1)连续分配:
分配占用的block是一组连续的block。连续分配的存取性能非常好,快,简单(只用记录开始位置和长度)
【问题】当出现新文件的时候,找到新空间分配给他会有麻烦——外部碎片。当被分配的文件非常大,想要连续分配,有可能本来容量够大,但是因为外部碎片的影响就存放不下。
2)链式分配:
一个文件的数据块被组织成链表的形式。链表每一块的末尾都包含下一块的指针。
【问题】1. 对于文件的直接访问效率非常低。2. 可靠性也低,如果指针丢失或损坏有些block可能就会找不到了。
3)索引分配:
将所有的指针放在一起,每个文件都有自己的索引块,是一个磁盘地址的数组。索引块的第i个条目指向文件的第i个块
【问题】管理机制更复杂。
空闲空间管理
1)bit vector(位向量):
每个块用一个bit来表示——如果块为空闲,则为1;如果块空闲,则为0。
【优点】容易找到、简答高效。
【问题】除非所有的位向量都保存在内存中,不然通过磁盘的访问也会造成低效。
2)link list(链表):
将所有空闲的block磁盘块用链表连接起来,将指向第一空闲快的指针保存在磁盘的特殊位置上,同时也将其缓存在内存中。
【问题】有时候访问的效率不高,因为需要遍历链表,从而需要大量的I/O时间。