文件的分类

  • 普通文件:包含了用户的信息,一般为ASCII或二进制文件
  • 目录文件:管理文件系统的系统文件
  • 特殊文件(设备文件)

文件的逻辑结构

逻辑结构是从用户观点出发看到的文件的组织形式。分为以下两类:

  • 流式文件:无结构,对文件内信息不再划分单位,它是依次的一串字符流构成的文件。
  • 记录式文件:有结构,文件由若干个记录组成,可以按记 录进行读、写、查找等操作。

存储介质与物理块

典型的存储介质

磁盘(包括固态盘SSD)、磁带、光盘、U盘等等,以下为典型的磁盘结构:

物理块

  • 信息存储、传输、分配的独立单位
  • 存储设备划分为大小相等的物理块,统一编号

磁盘访问

  • 寻道:磁头移动定位到指定磁道
  • 旋转延迟:等待指定扇区从磁头下旋转经过
  • 数据传输:数据在磁盘与内存之间的实际传输

文件控制块(FCB)

为管理文件而设置的数据结构,保存管理文件所需的所有有关信息(文件属性或元数据)。

文件控制块一般包含下列常用属性:

  • 文件名
  • 文件号
  • 文件大小
  • 文件地址
  • 创建时间
  • 最后修改时间
  • 最后访问时间
  • 各种标志(只读、隐藏、系统、归档等)

文件目录

  • 文件目录:文件目录由目录项构成,统一管理每个文件的元数据,以支持文件名到文件物理地址的转换。
  • 目录文件:将文件目录以文件的形式存放在磁盘上。
  • 目录项:可以看成是FCB。

文件目录

文件的物理结构

文件的物理结构指的是文件在存储介质上的存放方式。

连续结构

文件的信息存放在若干连续的物理块中。

连续结构

连续结构实现简单,且所需的磁盘寻道次数和寻道时间最少,支持顺序存取和随机存取,但文件不能动态增长,且会产生许多外部碎片。

链接结构

一个文件的信息存放在若干不连续的物理块中,各块之间通过指针连接,前一个物理块指向下一 个物理块。

lianjie

使用链接结构不存在外部碎片的问题,提高了磁盘空间利用率,有利于文件的动态扩充,但是比起连续结构需要更多的寻道次数和寻道时间,且存取速度慢,不适于随机存取。

索引结构

一个文件的信息存放在若干不连续物理块中,系统为每个文件建立一个专用数据结构索引表,并将这些物理块的块号存放在该索引表中。

索引结构

索引结构保持了链接结构的优点,也解决了其缺点:既能顺序存取又能随机存取,满足了文件动态增长的要求,能充分利用磁盘空间。但是索引结构依然有较多的寻道次数和寻道时间,而索引表本身也带来了额外系统开销。

多级索引结构(综合模式)

多级索引

UNIX文件系统采用的便是这种多级索引结构(综合模式):每个文件的索引表有15个索引项,每项2个字节,前12项直接存放文件的物理块号,如果文件大于12块,则利用第13项指向一个物理块作为一级索引表。假设扇区大小为512字节,物理块等于扇区块大小,那么一级索引表可以存放256个物理块号。对于更大的文件还可利用第14和第15项作为二级和三级索引表。

unix多级索引

文件目录检索

用户给出文件名,按文件名查找到目录项/FCB,根据目录项/FCB中文件物理地址等信息,计算出文件中任意记录或字符在存储介质上的地址。

文件目录检索

目录项分解法

通过目录项分解法可以加快文件目录的检索速度。

目录项分解法即把FCB分解成两部分:符号目录项(文件名,文件号)、基本目录项(除文件名外的所有字段)。目录文件改进后减少了访盘次数,提高了文件检索速度。

磁盘调度算法

当有多个访盘请求等待时,采用一定的策略,对这些请求的服务顺序调整安排,以降低平均磁盘服务时间,达到公平、高效。

先来先服务(FCFS)

按访问请求到达的先后次序服务。

优点是简单公平,但效率不高,相临两次请求可能会造成最内到最外的柱面寻道,使磁头反复移动,增加了服务时间,对机械也不利。

FCFS

最短寻道时间优先(Shortest Seek Time First)

优先选择距当前磁头最近的访问请求进行服务。

虽然改善了磁盘平均服务时间,但是造成某些访问请求长期等待得不到服务,也就是饥饿现象。

SSTF

扫描算法(SCAN)

扫描算法又称为电梯算法,当设备无访问请求时,磁头不动;当有访问请求时,磁头按一个方向移动,在移动过程中对遇到的访问请求进行服务,然后判断该方向上是否还有访问请求,如果有则继续扫描;否则改变移动方向,并为经过的访问请求服务,如此反复。

scan

单向扫描算法(CSCAN)

扫描调度算法(SCAN)存在这样的问题:当磁头刚从里向外移动过某一磁道时,恰有一进程请求访问此磁道,这时该进程必须等待,待磁头从里向外,然后再从外向里扫描完所有要访问的磁道后,才处理该进程的请求,致使该进程的请求被严重地推迟。

为了减少这种延迟,CSCAN算法规定磁头只做单向移动。例如,磁头只自里向外移动,当磁头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道,即将最小磁道号紧接着最大磁道号构成循环,进行扫描。

旋转调度算法

旋转调度算法根据延迟时间来决定执行次序的调度,请求访问分为以下三种情况:

  • 若干等待访问者请求访问同一磁头上的不同扇区
  • 若干等待访问者请求访问不同磁头上的不同编号的扇区
  • 若干等待访问者请求访问不同磁头上具有相同的扇区

对于前两种情况总是让首先到达读写磁头位置下的扇区先进行传送操作,而对于第三种情况,这些扇区同时到达读写磁头位置下,可任意选择一个读写磁头进行传送操作。

参考资料