第六章 文件管理
1. 文件的定义
文件可以被解释为一组带标识的、在逻辑上有完整意义的信息项的序列。
这个标识为文件名,信息项构成了文件内容的基本单位。
信息项是构成文件内容的基本单位,这些信息项是一组有序序列,它们之间具有一定的顺序关系;
文件提供了一种将数据保存在外部存储介质上以便于访问的功能。为了方便用户使用,每个文件都有特定的名称。
文件名称的长度因系统而异。
有的文件系统不区分文件名的大小写,而有的则加以区分。
有的操作系统对不同的后缀有特定的解释,而有的则没有统一的规定。
一般地,文件建立在存储器空间里,以便使文件能够长期保存。即:文件一旦建立,就一直存在,直到该文件被删除或该文件超过事先规定的保存期限。
2. 文件的分类
1) 按文件的用途分类
① 系统文件
② 库函数文件
③ 用户文件
2) 按文件的组织形式分类
① 普通文件
② 目录文件
③ 特殊文件
3) 一些常见的文件分类方式
按文件的保护方式可划分为:只读文件、读写文件、可执行文件、无保护文件等。
按信息的流向分类可划分为:输入文件、输出文件和输入输出文件等。
按文件的存放时限可划分为:临时文件、永久文件和档案文件等。临时文件,即记有临时性信息的文件;永久性文件,即其信息需要长期保存的文件;档案文件,即保存在作为“档案”用的磁带或光盘等永久性介质上以备查证和恢复时使用的文件。
按文件所使用的介质类型分类可划分为:磁盘文件、磁带文件、卡片文件和打印文件等。
还可以按文件的组织结构分类。比如,由用户组织的文件称逻辑文件,逻辑文件可采用流式文件和记录式文件两种组织方式。而文件在存储介质上的组织方式是文件的物理结构(物理文件),常用的组织方式有顺序文件、链接文件和索引文件等。
4) UNIX 类操作系统中文件的分类
在 UNIX 类操作系统中,文件系统包括 3 种类型的文件:
① 普通文件。这是内部无结构的一串平滑的字符所组成的文件。
② 目录文件。这是由文件目录项所构成的文件。
③ 特殊文件。在 UNIX 类操作系统中, 把 I/O 设备也看成是一种文件——特殊文件。
文件系统分类的目的是:对不同文件进行管理,提高系统效率;同时,提高文件系统的用户界面友好性。
3. 文件逻辑结构分类
可以把文件划分成 3 类逻辑结构:无结构的字符流式文件、定长记录文件和不定长记录文件构成的记录树,定长记录文件和不定长记录文件可以统称为记录式文件。
1) 流式文件
流式文件是有序字符的集合,其长度为该文件所包含的字符个数,所以又称为字符流文件。
在流式文件中,构成文件的基本单位是字符。
可以认为流式文件就是一串有开头和结尾的连续字符;
流式文件无结构。所以用户对流式文件可以方便地进行操作。
源程序、目标代码等文件属于流式文件。UNIX 类系统采用的是流式文件结构。
2) 记录式文件
记录式文件是一组有序记录的集合。在记录式文件中,构成文件的基本单位是记录。
记录是一个具有特定意义的信息单位,它由该记录在文件中的逻辑地址(相对位置)与记录名所对应的一组键、属性及其属性值所组成,可按键进行查找。
记录式文件可分为定长记录文件和不定长记录文件两种。
在定长记录文件中,各个记录长度相等。在检索时,可以根据记录号 i 及记录长度 L 就可以确定该记录的逻辑地址。
在不定长记录文件中,各个记录的长度不等,在查找时,必须从第一个记录起一个记录一个记录查找,直到找到所需的记录。
记录式的有结构文件可把文件中的记录按各种不同的方式排列,构成不同的逻辑结构,以便用户对文件中的记录进行修改、追加、查找和管理等操作。
4. 文件物理结构分类
常用的文件物理结构有顺序结构、链接结构、索引结构和 I 节点结构。
1) 顺序结构(连续分配)
顺序结构又称连续结构,它把逻辑上连续的文件信息依次存放在连续编号的物理块中。这是一种逻辑记录顺序核物理记录顺序完全一致的文件。
在顺序结构中,一个文件的目录项中只要指出该文件占据的总块数和起始块号即可。
优点:
① 由于从文件的逻辑块号到物理块号的变换,知道了文件在文件存储设备上的起始块号和文件长度,就能很快进行存取。
② 且顺序结构支持顺序存取和随机存取。
对于顺序存取,顺序结构的存取速度快。
缺点:
① 文件不能动态增长。对于顺序结构的文件,不利于文件插入和删除。
② 随着文件不停地被分配和被删除,空闲空间逐渐被分割为很小的部分,最终导致出现存储碎片, 虽然空间满足,但由于不连续且都是小碎片而无法分配。
2) 链接结构(不连续分配)
链接结构的实质就是为每个文件构造所使用磁盘块的链表。
使用这种链接结构的文件,将逻辑上连续的文件分散存放在若干不连续的物理块中。
Windows 的 FAT 文件系统采用的是链接结构,但将所有链指针集中存放。
优点:
① 解决存储碎片问题,有利于文件动态扩充;
② 有利于文件插入和删除,提高了磁盘空间利用率。
③ 方便链接结构的文件动态扩充。
缺点: 存取速度慢,不适于随机存取文件;
① 磁盘的磁头移动多,效率相对较低;
② 存在文件的可靠性问题,比如指针出错,文件也就出错了;
③ 链接指针需要占用一定的空间。
链接结构的文件所使用的物理块是不连续分配的,所以一个链接结构的文件的所有物理块在磁盘上是分散分布的。
与顺序结构的文件相比,在访问一个链接结构的文件时需要更多的寻道次数和寻道时间。
3) 索引结构
索引结构的文件把每个物理盘块的指针字集中存放在被称为索引表的数据结构中的内存索引表中。
优点:
① 索引文件结构保持了链接结构的优点,又解决了其缺点。
② 索引结构文件既适于顺序存取,也适于随机存取。
③ 可以将有关逻辑块号和物理块号的信息全部保存在了一个集中的索引表中。
④ 索引文件可以满足文件动态增长的要求,也满足了文件插入、删除的要求;
⑤ 索引文件还能充分利用外存空间。
缺点:
① 会引起较多的寻道次数和寻道时间;
② 索引表本身增加了存储空间的开销。
4) 索引结构的实例—— I 节点
I 节点是一种多级索引文件结构。
I 节点最早出现在 UNIX 操作系统中,是多级索引结构文件在 UNIX 中的具体实现。
掌握了 I 节点也就掌握了多级索引文件结构的工作原理。
I 节点的基本思想是,给每个文件赋予一张称为 I 节点的小表, 在这张小表中列出了文件属性和文件中各块在磁盘上的地址
I 节点的文件结构,既适合小文件使用,也可供大型文件使用,灵活性比较强。这种文件结构占用的系统空间比一般多级索引结构的文件要少。
5. 外存储设备
l 外存储设备通常由驱动部分和存储介质两部分组成。
l 外存储设备存取的过程方式因各种具体存储设备而异,不过也有一定共性。
l 外存储设备存取的过程大致如下:读状态-置数据-置地址-置控制-再读状态。
6. 磁盘计算
在随机存取设备中,磁盘是一种典型的随机存取设备。
磁盘设备允许文件系统直接存取磁盘上的任意物理块。
磁盘一般由若干磁盘片组成,每个磁盘片对应两个读/写磁头,分别对磁盘片的上下两面进行读写。
磁盘上每个物理块的位置可用柱面号( 磁道号)、磁头号和扇区号表示, 这些地址与物理块号一一对应。其计算公式如下:
① 已知物理块号,则磁盘地址:
柱面号=[物理块号/(磁头数 ×扇区数)]
磁头号=[(物理块号 mod(磁头数× 扇区数))/扇区数]扇区号=(物理块号 mod(磁头数× 扇区数))mod 扇区数
② 已知磁盘地址:
物理块号=柱面号 ×(磁头数 × 扇区数)+磁头号 × 扇区数+扇区号
l 磁头臂是沿半径方向移动的。
l 访问磁盘时,首先要移动磁头臂到相应柱面(磁道)上,然后旋转盘片将指定磁头定位在指定扇区上,最后控制磁头对扇区中的数据进行读写。
一次访盘时间由寻道时间、旋转定位时间和数据传输时间组成;
寻道时间由于是机械动作,因而所花费的时间最长, 传输时间花费时间最短。
7. 文件存取方式
在用户面前,文件呈现的是文件的逻辑结构,这与用户使用文件的方式相适应;
在存储介质面前,文件呈现的是文件的物理结构,这与文件所使用存储介质的特性有关;
文件的存取方式是文件的逻辑结构和物理结构之间的映射或变换机制;
文件常用的存取方法有:顺序存取和随机存取两种方式。
① 顺序存取: 按从前到后的次序依次访问文件的各个信息项。
② 随机存取: 又称直接存取, 即允许用户按任意的次序直接存取文件中的任意一个记录, 或者根据存取命令把读写指针移到文件中的指定记录处读写。
UNIX 类操作系统的文件系统采用了顺序存取和随机存取两种方法。
8. 文件目录
在一个计算机系统中保存有许多文件,用户在创建和使用文件时只给出文件的名字,由文件系统根据文件名找到指定文件。
为了便于对文件进行管理,设置了文件目录,用于检索系统中的所有文件。
文件系统的一个特点是“按名存取”,即用户只要给出文件的符号名就能方便地存取在外存空间的该文件的信息,而不必了解和处理文件的具体物理地址。
9. 文件目录块(FCB)
文件控制块 FCB 是系统为管理文件而设置的一个描述性数据结构。FCB 是文件存在的标志,它记录了系统管理文件所需要的全部信息。
FCB 通常应包括以下内容: 文件名、文件号、用户名、文件地址、文件长度、文件类型、文件属性、共享计数、文件的建立日期、保存期限、最后修改日期、最后访问日期、口令、文件逻辑结构、文件物理结构,等等,
其中文件名、文件大小、文件创建时间和磁盘起始地址是文件控制块中必须保存的信息。
在文件控制块中的信息可以分成文件存取控制信息、文件结构信息和文件管理信息。
10. 目录文件
多个文件的文件控制块集中在一起组成了文件的目录。
通常,文件目录以文件的形式保存起来,这个文件就被称为目录文件。目录文件是长度固定的记录式文件。
在目录文件中,每个文件的文件控制块又称为目录文件中的目录项。
有时,为了节省内存的空间,就把目录文件保存在外存储器上,在需要时才把目录文件调入内存。
11. 目录结构
1) 一级目录结构
在系统中设置一张线性目录表,表中包括了所有文件的文件控制块,每个文件控制块指向一个普通文件,这就是一级目录结构;
一级目录结构是一种最简单、最原始的文件目录结构。
有了一级目录,文件系统就可实现对文件空间的管理和按名存取。
一级目录表中各文件只能按连续结构或顺序结构存放,因此,文件名与文件必须一一对应,限制了用户对文件的命名,不能重名。
优点: 简单, 容易实现。
缺点: 搜索效率较低,文件平均检索时间长。
2) 二级目录结构
为克服一级目录结构中文件目录命名中的可能冲突,并提高对目录文件的检索速度,一级目录被改进扩充成二级目录。
在二级目录结构中,目录被分为两级:
① 第一级称为主文件目录( Main File Directory, MFD),给出了用户名和用户子目录所在的物理位置;
② 第二级称为用户文件目录( User File Directory, UFD), 又称用户子目录, 给出了该用户所有文件的 FCB。
优点: 解决了文件的重名问题, 可以实现用户间的文件共享, 查找时间也降低了。
缺点: 增加了系统的开销。
3) 树形目录
把二级目录的层次关系加以推广,就形成了多级目录,又称树形目录结构。
在树形目录结构中,最高层为根目录,最低层为文件。
根目录是唯一的,由它开始可以查找到所有其他目录文件和普通文件。根目录一般可放在内 存。从根结点出发到任一个非叶结点或叶结点(文件) 都有且仅有一条路径, 该路径上的全部分支组成了一个全路径名。
树形目录结构的优点是便于文件分类,且具有下列特点:
① 层次清楚。
② 解决了文件重名问题。
③ 查找搜索速度快。
12. 全路径名&相对路径
有两种根据路径名检索的方法,一种是全路径名,另一种是相对路径。
全路径名
① 使用全路径名检索的方法,需要从根目录开始,列出由根到用户指定文件的全部有关子目录, 全路径名又称为“ 绝对路径名”。
② 缺点: 不方便, 影响访问速度, 耗费时间。
相对路径
① 用于检索的路径名只是从当前目录开始到所要访问文件的一段路径,即以当前目录作为路径的相对参照点。
② 优点: 检索路径缩短,检索速度提高。
13. 目录项分解法
为加快目录检索可采用目录项分解法,即把目录项( FCB)分为符号目录项( 次部) 和基本目录项(主部) 两部分。
符号目录项包含文件名以及相应的文件号;
基本目录项包含了除文件名外文件控制块的其他全部信息;
例子:
假设一个文件控制块有 48 字节,符号目录项占 8 字节,其中文件名占 6 字节,文件号占 2 字节; 基
本目录项占 48-8=40 字节。设物理块的大小为 512 字节。
在进行目录项分解前,一个物理块可以存放 512/48≈ 10 个文件控制块。在进行目录项分解后, 一个物理块可以存放 512/8=64 个符号目录项,或者 512/40≈ 12 个基本目录项。
如果一个目录文件有 128 个目录项,那么分解前 128×48/512=12,即需要 12 个物理块存放该目录文件。
在进行目录项分解后,符号目录文件占 128×8/512=2,即需要 2 个物理块存放符号文件。基本目录项占
128×40/512=10,即需要 10 个物理块存放基本目录文件。下面,计算查找一个文件的平均访盘次数。
分解前:( 1+12)/2=6.5 次。分解后:( 1+2)/2+1=2.5 次。
目录项分解法的优点:减少了访问磁盘的次数,提高了文件目录检索速度。
14. 存储空间分配与回收
在设计空闲空间登记表的数据结构时,一般有四种不同的方案可以考虑,下面分别介绍。
1) 位示图
位示图法的基本思想是,利用一串二进制位( bit)的值来反映磁盘空间的分配使用情况。
在位示图中,每一个磁盘中物理块用一个二进制位对应,如果某个物理块为空闲,则相应的二进制位为 0;如果该物理块已分配了, 则相应的二进制位为 1;
在申请磁盘物理块时,可在位示图中从头查找为 0 的位, 如果发现了为 0 的位, 则将其改为 1, 同时返回该二进制位对应的物理块号。
在归还不再使用的物理块时,则在位示图中将该物理块所对应的二进制位改为 0, 表示这块物理块恢复为空闲状态。
优点:
① 对空间分配情况的描述能力强。一个二进制位就描述一个物理块的状态;
② 位示图占用空间较小,因此可以复制到内存,使查找既方便又快速;
③ 适用于各种文件物理结构的文件系统。
2) 空闲块表
空闲块表是专门为空闲块建立的一张表,该表记录外存储器中全部空闲的物理块,包括每个空闲块的第一个空闲物理块号和该空闲块中空闲物理块的个数;
空闲块表方式特别适合于文件物理结构为顺序结构的文件系统。
3) 空闲块链表
将外存储器中所有的空闲物理块连成一个链表,用一个空闲块首指针指向第一个空闲块,随后的每个空闲块中都含有指向下一个空闲块的指针,最后一块的指针为空,表示链尾,这样就构成了一个空闲块链表;
在空闲块链表模式中对空间的申请和释放是以块为单位的。申请空间时从链首取空闲块,空间释放时将物理块接入链尾。
空闲块链表法节省内存,但申请空间和回收空间的速度较慢,实现效率较低。
4) 成组链接
对链接表的一个改进方案是将 n 个空闲盘块的地址存放在第一个空闲块中, 其余 n-1 个空闲盘块是实际空闲的。
假设每 100 个空闲块为一组。第一组的 100 个空闲块块号放在第二组的头一块中, 而第二组的其余
99 块是完全空闲的。第二组的 100 个块号又放在第 3 组的头一块中。依此类推, 组与组之间形成链接关系。在最后一组的块号中第 2 个单元填“ 0”,表示该块中指出的块号是最后一组的块号,空闲块链到此结束。在这个空闲块链中,不足 100 块的那个组的块号通常放在内存的一个专用块中。这种方式称为成组链接。
15. 回收和分配算法
1) 分配一个空闲块
查 L 单元内容( 空闲块数):
当空闲块数>1, i:= L+ 空闲块数; 从 i 单元得到一空闲块号;
把该块分配给申请者; 空闲块数减 1。
当空闲块数=1,取出 L+1 单元内容(一组的第一块块号或 0);
取值=0, 无空闲块,申请者等待;
取值≠ 0 , 把该块内容复制到专用块; 该块分配给申请者;
把专用块内容读到主存 L 开始的区域。
2) 归还一块
查 L 单元的空闲块数;
当空闲块数<100, 空闲块数加 1; j:=L+空闲块数;
归还块号填入 j 单元。
当空闲块数=100,把主存中登记的信息写入归还块中; 把归还块号填入 L+1 单元;
将 L 单元置成 1。16.记录的成组
把若干个逻辑记录合成一组存放在一个物理块的工作称为“ 记录的成组”, 每块中的逻辑记录个数称为“ 块因子”。
由于信息交换以块为单位,所以要进行成组操作时必须使用内存的缓冲区,该缓冲区的长度等于要进行成组的最大逻辑记录长度乘以成组的块因子。
17. 建立文件
用户首先调用文件系统的“ 建立文件” 操作,在请求调用该操作时提供所要创建的文件的文件名及若干参数:用户名、文件名、存取方式、存储设备类型、记录格式、记录长度, 等等。
建立文件系统调用的一般格式为: create(文件名, 访问权限,( 最大长度))。
建立文件的具体步骤如下:
① 检查参数的合法性:
文件名是否符合命名规则,若是,则进行下一步②; 否则报错, 返回。
② 检查同一目录下有无重名文件:
若没有,则进行下一步③;否则报错, 返回。
③ 在目录中有无空闲位置:
若有,则进行下一步④;否则,不成功返回 Q
有的系统可能要为此文件申请数据块空间(申请一部分或一次性全部申请)。
④ 填写目录项内容:
包括:文件名、用户名、存取权限、长度置零、首地址等。
⑤ 返回。
18. 打开文件
打开文件,是使用文件的第一步,任何一个文件使用前都要先打开,即把文件控制块 FCB 送到内存。
打开文件系统调用的一般格式为:fd=open(文件路径名, 打开方式)。
打开文件时,系统主要完成以下工作:
① 根据文件路径名查目录,找到 FCB 主部。
② 根据打开方式、共享说明和用户身份检查访问合法性。
③ 根据文件号查系统打开文件表,看文件是否已被打开。
如果是,共享计数加 1;否则,将外存中的 FCB 主部等信息填入系统打开文件表空表项,共享计数置为 1。
④ 在用户打开文件表中取一空表项,填写打开方式等,并指向系统打开文件表对应表项。返回信息:文件描述符 fd,这是一个非负整数, 用于以后读写文件。
19. 读文件
打开文件后,就可以读取文件中的信息。
读文件系统调用的一般格式为: read(文件名,( 文件内位置), 要读的长度, 内存目的地址)。
隐含参数:文件主。
读写方式可为读、写和既读又写等。
读文件时,系统主要完成以下工作:
① 检查长度是否为正整数:
若是,则进行下一步②;否则,转向⑩。
② 根据文件名查找目录,确定该文件在目录中的位置。
③ 根据隐含参数中的文件主和目录中该文件的存储权限数据,检查是否有权读。若是,则进行下一步④;否则,转向⑩。
④ 由文件内位置与要读的长度计算最末位置,将其与目录中的文件长度比较,超过否?若是,则转向⑩; 否则, 进行下一步⑤。也可将参数中的长度修正为目录中的文件长度。
⑤ 根据参数中的位置、长度和目录中的映射信息,确定物理块号、需要读出的块数等读盘参数
(参数准备完毕后,进行物理的读盘操作,读盘操作可能要进行多次)。
⑥ 根据下一块号读块至内存缓冲区。
⑦ 取出要读的内容,也许要进行成组的分解,将取出的内容送至参数中的内存目的地址。
⑧ 根据块内长度或起始块号+块数, 确定还读下一块吗? 同时确定下一块块号: 若是,则转向⑤;否则,进行下一步⑨。
⑨ 正常返回。
⑩ 错误返回,返回相应错误号。
20. 写文件
写文件系统调用的一般格式为: write(文件名, 记录键, 内存位置)。
把内存中指定单元的数据作为指定的一个记录写入指定文件中,系统还将为其分配物理块,以便把记录信息写到外存上。
21. 关闭文件
文件关闭后一般不能存取,若要存取,则必须再次打开。
关闭文件系统调用的一般格式为: close(文件名)。
系统根据用户提供的文件名或文件描述符,在该文件的文件控制块上做修改。
22. 删除文件
删除文件系统调用的一般格式为: delete(文件名)。
系统根据用户提供的文件名或文件描述符,检查此次删除的合法性,若合法, 则收回该文件所占用的文件控制块及物理块等资源。
23. 指针定位
指针定位的一般格式为: seek(fd, 新指针的位置)。
指针定位时,系统主要完成以下工作:
① 由 fd 检查用户打开文件表, 找到对应的入口;
② 将用户打开文件表中文件读写指针位置设为新指针的位置,供后续读写命令存取该指针处文件内容。
24. 文件的保护
文件系统经常采用建立副本和定时转储的方法来保护文件。
1) 建立副本
对文件建立副本,是保护文件不受破坏的有效方法。
一般用于短小且极为重要的文件。
2) 定时转储
定时转储的含义是,每隔一定的时间就把文件转储到其他的存储介质上。
UNIX 系统就是釆用定时转储的方法保护文件,以提高文件的可靠性。
按照转储内容可分为增量转储和全量转储。增量转储是指备份自上一次转储以来更改过的文件。
按照转储方式可分为物理转储和逻辑转储。
① 物理转储是从磁盘的第 0 块开始,将全部磁盘块按序输出到另一介质上,直到最后一块复制完毕。
② 而逻辑转储是从一个或几个指定的目录开始,递归地转储其自给定日期(例如,最近一次增量转储或全量转储的日期)后有所更改的全部文件和目录。
3) 规定文件的存取权限
规定用户使用文件的权限的方法有两种:
采用树形目录结构。
凡能得到某级目录的用户就可得到该级目录所属的全部目录和文件,按目录中规定的存取权限使用目录或文件。
存取控制表。
列出每个用户对每个文件或子目录的存取权限。
25. 存取控制矩阵
在存取控制矩阵方式中,系统以一个二维矩阵来实施文件的存取控制。
在这个二维矩阵中,其中一维代表所有的用户,另一维代表所有的文件。
两维交叉点所对应的矩阵元素则是某一个用户对一个文件的存取控制权限,包括读 R、写 W 和执行 E, 当然, 还可以有其他的划分形式。
26. 二级存取控制
对文件实施存取控制的另一种方法是二级存取控制。
二级存取控制方法中设立两个存取级别。
① 在第一级,把用户按某种关系划分为若干用户组,进行对访问者的识别;
② 在第二级,进行对操作权限的识别。
常用的文件保密措施还有隐蔽文件目录、设置口令与使用密码等。
27. UNIX 系统内部数值
读( Read)操作( R);
写( Write)操作( W);
执行( e X e c u t e ) 操作( X ) ;
不能执行任何操作(--)。
UNIX 系统内部使用数值来表示上述的文件属性每一个属性与文件属性中的一个二进制位相对
应。如果该存取权限设置了,对应的二进制位就是 1, 如果该存取权限没有设置, 对应的二进制位是 0。
l 例: a.out 的权限属性 rwxr- - xr-- x 用二进制来表示就是 111101101。在 UNIX 中常使用八进制的形式表示,于是 a.out 的这个权限是 755。
28. 提高文件系统性能的方法
常见的技术措施有如下几种:块高速缓存、磁盘空间的合理分配和对磁盘调度算法进行优化。
1) 块高速缓存
其基本思想是,系统在内存中保存一些磁盘块,这些磁盘块在逻辑上属于磁盘,内存的这一区域被称为块高速缓存。
块高速缓存的内容需要定期写回到磁盘上,以保存对磁盘块的修改。
2) 合理分配磁盘空间
在磁盘空间中分配块时,应该把有可能顺序存取的块放在一起,最好在同一柱面上。
这样可以有效地减少磁盘臂的移动次数,加快了文件的读写速度,从而提高了文件系统的性能。
3) 磁盘的驱动调度
磁盘是一种高速旋转的存储设备。磁头沿着盘片直径方向移动, 同时对指定磁道上的扇面中的数据进行读写操作。当多个访盘请求在等待时,系统采用一定的策略,对这些请求的服务顺序进行调整安 排,使寻道时间和延迟时间都尽可能小的那个访问请求可以优先得到服务,并降低若干个访问者的总访问时间,增加磁盘单位时间内的操作次数。其目的在于降低平均磁盘服务时间, 从而实现公平、高效的访盘请求。
29. 磁盘调度算法
1) 磁盘的存取访问时间
磁盘的存取访问时间由 3 部分组成:
寻道时间,即将磁头移动到相应的磁道或柱面所需的时间;
旋转延迟时间,即一旦磁头到达指定磁道,必须等待所需要的扇区旋转到读\头下的时间;
传输时间,即信息在磁盘和内存之间的实际传送时间。
一次磁盘服务的总时间就是以上 3 个时间之和。要使磁盘服务尽可能地快, 就需要操作系统提供合适的磁盘调度算法,以改善磁盘服务的平均时间。
2) 设计磁盘调度算法应当考虑两个基本因素:
公平性: 一个磁盘访问请求应当在有限时间内得到满足。
高效性: 减少设备机械运动所带来的时间开销,增加磁盘缓存。
3) 磁盘驱动调度
磁盘驱动调度由“ 移臂调度” 和“ 旋转调度”两部分组成。
移臂调度
根据访问者指定的柱面位置来决定执行次序的调度,称为“ 移臂调度”。移臂调度的目的是尽可能地减少操作中的寻找时间。
一般可采用以下几种移臂调度算法: 先来先服务调度算法( FCFS)、最短寻道时间优先调度算法
( SSTF)、 扫描算法(SCAN)、循环扫描算法( C-SCAN)。
30. 先来先服务调度算法( FCFS)
即按照访问请求的次序为各个进程服务,这是最公平而又最简单的算法,但是效率不高。
因为磁头引臂的移动速度很慢,如果按照访问请求发出的次序依次读写各个磁盘块,则磁头引臂将可能频繁大幅度移动,容易产生机械振动,亦造成较大的时间开销,影响效率。
31. 最短寻道时间优先调度算法( SSTF)
SSTF 算法以寻道优化为出发点, 优先为距离磁头当前所在位置最近磁道( 柱面) 的访问请求服务。
这种算法改善了平均服务时间,但也存在缺点:假设某一段时间外磁道请求不断,则可能有内磁道请求长时间得不到服务,缺乏公平性。
32. 扫描算法( SCAN)
这种算法因其基本思想与电梯的工作原理相似,故又称电梯算法。
SCAN 算法也是一种寻道优化的算法, 它克服了 SSTF 算法的缺点。
SSTF 算法只考虑访问磁道与磁头当前位置的距离, 而未考虑磁臂的移动方向, 而 SCAN 算法则既考虑距离,也考虑方向,且以方向优先。
这种算法比较公平,而且效率较高。
33. 文件分配表(FAT)
FAT 是一个简单的文件系统, 最初为 DOS 操作系统设计, 适用于小容量的磁盘, 具有简单的目录结构。
为了向后兼容,也为了方便用户升级,目前新版本的 Wmdows 仍然提供对 FAT 的支持。
FAT 文件系统总共有 3 个版本: FAT-12、FAT-16 和 FAT-32, 取决于用多少二进制位表示磁盘地
址。
FAT 文件系统以簇为单位进行分配, 所以 FAT-16 文件系统表示用 16 位( 2 字节) 表示簇号。
34. 文件系统执行 close()
执行“关闭”操作时,文件系统主要完成如下工作:
① 将活动文件表中该文件的“当前使用用户数”减 1;若此值为 0,则撤销此表目,并保存文件控制块写入磁盘或者缓存;
② 若活动文件表目内容已被改过,则表目信息应复制到文件存储器上相应表目中,以使文件目录保持最新状态;
③ 卷定位工作,一个关闭后的文件不能再使用,若要再使用,则必须再次执行“打开”操作。
上一篇
第五章 内存管理
下一篇