4 文件管理

【文件系统模型】

下图所示为文件系统模型。可将该模型分为 3 个层次,其最底层是对象及其属性;中间层是对对象进行操纵和管理的软件集合;最高层是文件系统提供给用户的接口

其中对对象操纵和管理的软件集合这个层次,是文件系统的核心部分。文件系统的功能大多是在这一层实现的,其中包括:对文件存储空间的管理、对文件目录的管理、用于将文件的逻辑地址转化为物理地址的机制、对文件读和写的管理以及对文件的共享与保护等功能

在这里插入图片描述
△☼▽

在这里插入图片描述

分析:D,根据上述理论,显然 A 不正确;在多级目录结构中,从根目录到任何数据文件,都只有一条唯一的路径。在该路径上从树的根(即主目录开始),把全部目录文件名与数据文件名依次用 / 连接起来,即构成该数据文件的路径名。系统中的每个文件都有唯一的路径名,所以 B 不正确,对文件的访问只需要通过路径名即可;C 错在物理块大小可以任意指定,它必须和外存分配方式相符合;D 正确,基于文件系统的概念,可以把数据组成分为数据项、记录和文件 3 级,记录是一组相关数据项的集合,用于描述一个对象在某方面的属性,记录是文件存取的基本单位,数据项是文件可使用的最小单位

△☼▽

在这里插入图片描述

分析:
(1)将有可能导致该共享文件的其他用户无文件可用,或者使用了不是其需要的文件
(2)用户可以通过修改目录项来改变对文件的存取权限,从而非法使用文件系统;另外,对目录项随意修改会造成严重的管理混乱
(3)解决方法是不允许用户直接执行上述操作,而必须经由操作系统调用来执行这些操作

【文件控制块(FCB)】

文件控制块一般在创建该文件时建立,打开文件时只是将文件控制块的内容读入内存,读和写文件时对文件内容操作,它们必须依靠文件控制块的指示,例如外存地址、读写权限等。关闭文件只是将文件控制块写回磁盘,删除文件时将文件控制块清除

文件控制块至少应该包含以下信息:

  • 文件名
  • 文件的结构:说明文件的逻辑结构是记录式文件还是流式文件,若为记录式文件还需要进一步说明记录是否定长、记录长度及个数;说明文件的物理结构是顺序文件、索引顺序文件还是索引文件
  • 文件的物理位置:如对于连续文件应给出文件第一块的物理地址及所占块数,对于索引顺序文件只需要给出第一块的物理地址,对于索引文件则应给出索引表地址
  • 存取控制信息
  • 管理信息

△☼▽

在这里插入图片描述

分析:B,索引结构的文件才需要索引表地址

△☼▽

在这里插入图片描述

分析:因为原本整个文件控制块都是在目录中的,而文件控制块分解法将文件控制块的部分内容放在了目录外,所以检索完目录后别忘了还需要一次访盘找齐所有的文件控制块内容

(1)分解前,每个盘块最多容纳 512B/64B = 8 个文件控制块,有 254 (254=8×31+6)个文件控制块,需要 32 个盘块,所找的目录项在第 i 个盘块时所需的磁盘访问次数为 i,故平均访问磁盘次数 = [8×(1+2+…+31)+6×32]/254 = 16.38次

分解后,每个盘块最多容纳 512B/10B = 51 (注意是整除)个文件控制块,254 (254=51×4+50)个文件控制块,需要 5 个盘块,故平均访问磁盘次数 = [51×(2+3+…+5)+50×6]/254 = 3.99 次

(2)分解前平均访问磁盘次数 = (1+2+…+n)/n = (n+1)/2 次,分解后平均访问磁盘次数 = [2+3+…+(m+1)]/m = (m+3)/2,要使得分解后的访问次数减少就要求 (m+3)/2 < (n+1)/2,即 m < n-2

【索引节点】

有些操作系统采用了文件名和文件描述信息分开的方法,将文件描述信息单独形成一个索引节点,简称 i 结点。文件目录中的每个目录项仅由文件名和指向该文件 i 节点的指针构成

存放在磁盘上的索引节点称为磁盘索引节点,每个文件都有唯一的磁盘索引节点。当文件被打开时,磁盘索引接节点被复制到内存的索引节点中,以便使用,存放在内存中的索引节点就称为内存索引节点

【用户访问权限】

可以把用户访问权限抽象为一个矩阵,行代表用户,列代表访问权限

△☼▽

在这里插入图片描述

分析:D,4×5=20

【目录检索】

要实现用户对文件的按名存取,系统先利用用户提供的文件名形成检索路径,再对目录进行查询。在顺序检索中时,路径名的一个分量名未找到,说明路径名中的某个目录或文件不存在,就不需要再查找了

目录进行查询的方式有两种:线性检索和散列方法,线性检索即 root/…/filename,线代操作系统中一般采用这种方式查询文件

为了加快文件查找速度,可以设立当前目录,于是文件路径可以从当前目录进行查找,不必都从根目录开始逐级检索

在顺序检索法的查找完成后,得到的是文件的逻辑地址

【目录结构】

1)单级目录结构

2)二级目录结构

二级目录结构将文件目录分成主文件目录和用户文件目录。系统为每个用户建立一个单独的用户目录信息(UFD),其中的表项登记了该用户建立的所有文件及其说明信息。主文件目录(MFD)则记录系统中各个用户文件目录的情况,每个用户占一个表项,表目中包括用户名及相应用户目录所在的存储位置等

文件删除时,只需在用户文件目录中删除该文件的目录项。若删除后该用户目录表为空,则表明该用户已脱离了系统,从而可以将主文件目录表中该用户的对应项删除

二级目录结构可以解决文件重名的问题,并可以获得较高的查找速度,但二级目录结构缺乏灵活性,特别是当用户需要在某些任务上进行合作和访问其他文件时会产生很多问题

△☼▽

在这里插入图片描述

分析:采用二级目录结构,解决同名问题

在这里插入图片描述

△☼▽

在这里插入图片描述

分析:
(1)系统应采用二级目录结构

在这里插入图片描述
(2)题(1)中所给出的二级目录结构能够满足要求,用户文件目录中的 P1、P2、P3 均可改为 P
(3)在学生存取程序和数据时,文件系统会先搜索主文件目录,找到该学生的用户目录后,即可在用户目录中找到指定的文件,比如学生 S1,由路径 /S1/P 找到的文件就是 S1 的程序文件,因为它与学生 S2 的程序文件 /S2/P 不是同一个文件,所以不会引起冲突,文件 A 可由 3 个学生同时打开执行读操作

3)树形目录结构

树形目录结构由一个根目录和若干层子目录组成。这种目录结构一是能够解决文件重名问题,二是能够解决文件多而根目录容量有限带来的问题。但是在树形目录中查找一个文件,需要按照路径名逐级访问中间结点,增加了磁盘访问次数,进而影响了查询速度

路径名:在树形目录结构中,往往使用路径名来唯一标识文件。从根目录出发的路径称为绝对路径,从当前目录开始直到文件为止的路径称为相对路径

当前路径:考虑到一个进程在一段时间内所访问的文件通常具有局部性,因此可在这段时间内指定某个目录作为当前目录(或工作目录)。进程对各文件的访问都是相对于当前目录进行的,此时文件使用的路径名为相对路径

△☼▽
在这里插入图片描述

分析:
(1)
① 因为在目录 D 下没有文件名为 A 的文件,所以可以在目录 D 下建立一个文件,取名为 A
② 根目录下已有目录名为 A 的目录,不能再将目录 C 改名为 A

(2)
① 用户 E 要想共享文件 Q,只要找到 Q 的路径即可,即用户 E 可以通过路径 . . / . . / D / G / K / O / Q ../../D/G/K/O/Q ../../D/G/K/O/Q 来访问文件 Q, . . .. .. 表示上一级目录
② 可以把当前目录设置为 P 这个目录,这样一来,直接用 S 和 T这两个文件名就能访问这两个文件,不需要每次都从根目录开始寻找路径;也可以在目录 G 下建立两个链接,直接链接到 S 和 T 上
③ 可以修改文件 I 的存取控制表,在拥有对 I 的访问权的用户列表中只留下用户 E,其他用户的名字都从 I 的访问权限用户列表中删除

△☼▽

在这里插入图片描述

分析:
(1)
① 可以,因为目录 D 中不存在已命名为 A 的文件或目录
② 不可以,因为目录 C 所在的目录表中已经有一个名为 A 的目录

(2)
① 首先需要用户 E 有访问文件 M 的权限,用户 E 通过自己的主目录找到其父目录 C,再访问到目录 C 的父目录(根目录),然后依次通过目录 D、G、K、O 即可访问到文件 M
② 原本用户 G 需要通过依次访问目录 K 和 P 才能访问到文件 S 和 T,为了提高访问速度,可以在目录 G 下建立两个链接文件,分别链接到文件 S 和 T 上,这样用户 G 就可以直接访问者两个文件了

(3)用户 E 可以通过修改文件 I 的存取权限控制表进行保护,不让别的用户看到,具体来说,就是在文件 I 的存取控制表中仅留下用户 E 的访问全相,而不让其他用户访问

△☼▽

在这里插入图片描述

分析:
(1)

在这里插入图片描述
(2)用户 usera 的 file1 的文件路径名为 /usr/name/usera/asdf/file1;用户 userb 的 file1 的文件路径名为 /name/userb/asdf/file1
(3)要将用户 userb 的目录文件 asdf 下的文件 file2 换名为 userb 目录下的newfile,先从 userb 的主目录 name 查起,将此目录项中的各个目录项与 asdf 相比较,直到找到 asdf;再取出 asdf 项中各个目录项与 file2 相比,直到找到 file2,;将 file2 的目录项读入内存指定区域,将 file2 改写为 newfile,再写回 userb 的目录中,最后要删除 asdf 目录中 file2 的目录项

【无结构文件】

无结构文件是指由字符流构成的文件,故又称为流式文件

【改善磁盘 I/O 性能的方法】

1)重排 I/O 请求次序

重排 I/O 请求次序的含义就是将磁盘请求访问顺序进行重新排序,就是有关磁盘访问调度策略的选择对 I/O 的性能影响。对于相同的访问请求集合,访问顺序会受到调度策略的选择影响,因此会有不同的寻道时间,而寻道时间是磁盘访问时间中最大的一项,因此不同的调度策略会影响磁盘设备的 I/O 性能

2)磁盘缓存

预读和滞后写也是常见的提升磁盘 I/O 速度的方法。预读是指当访问一个磁盘块时,将相邻的后续几个也一并读出放在缓存中,若用到,则直接读入内存,省去了寻道的时间。而滞后写是指系统将一个数据输出到磁盘上时,先不直接写入磁盘,而是先保存在缓存中,以防短期内系统又要对这个数据进行改动。如果要改动数据,直接修改缓存即可,而不需要启动磁盘进行修改

△☼▽

在这里插入图片描述

分析:A,理论如上描述

△☼▽

在这里插入图片描述

分析:A,磁盘高速缓存是一种软件机制,它允许系统吧通常存放在磁盘上的一些数据保留在内存中,以便对那些数据的进一步访问而不需要再访问磁盘

3)优化文件物理的分布

优化文件物理的分布,这有一个典型的例子,就是将文件存储在磁盘的连续单扇区与间隔扇区的对比。磁盘是在不断旋转的,读出一块儿数据之后经系统处理之后才能读下一块数据,这时磁盘已经转过了所要读的下一块儿数据,需要等下一圈才能读,增加了旋转延迟;而间隔扇区存储就可以避免这个问题,将第二个数据快成放在间隔的几个扇区之后,当系统处理完第一块准备读第二块时,磁头恰好转至第二块所在扇区,直接开始读,这样可以有效地缩短旋转延迟,进而缩短磁盘访问时间

△☼▽

在这里插入图片描述

分析:转速为 20ms/r,每磁道有 10 记录,那么每读出一记录的时间为 20ms/10 = 2ms

对于第一种记录分布,读出并处理 A 需要 6ms,处理完时读写头已经转到 D 处,因此为了读出 B,再转 8 个记录,后续均是如此,故总时间为 6ms+9×(2+4+16)ms = 204ms

对于第二种记录分布,处理完 A 后,读写头在 B 处可立即读出并处理,故一共旋转 2.8 圈,最后一个记录的处理要 4ms,总时间为 20ms×2.8+4ms = 60ms

△☼▽

在这里插入图片描述

分析:
(1)每读出一个记录的时间为 27/9 = 3ms,读出并处理完一个记录的时间为 5ms,因此读出并处理完 A,此时读写头已经转到了 B 中间 ,因此为了读出 B,必须要再等待 25 ms(因为多走了 2ms 读写头在 B 中间),后续 7 个记录也是如此,故总时间为 5ms+8×(25+5)ms = 245ms
(2)由上述分析可知,当读出并处理完 A,此时读写头在第二个磁盘块中间,于是将 B 放在第三个盘块处,读出并处理完 A 后再转 1ms 就可以顺序读出并处理 B,故而记录可按照如下方式存放

在这里插入图片描述
此时处理文件的总时间为 5ms+8×6ms = 53ms

4)磁盘分区(注意不是改善磁盘 I/O 性能的方法)

磁盘分区从实质上说就是对磁盘的一种格式化。但磁盘的 I/O 性能是由调用顺序以及磁盘本身性质决定的和分区的多少并无太大关系,而且如果设置过多分区,还会导致一次 I/O 需要启动多个分区,反而会降低效率

【格式化】

一个新的磁盘是一个空白板,必须分成扇区以便磁盘控制器能读和写,这个过程称为 低级格式化(或物理格式化)。低级格式化为磁盘的每个扇区采用特别的数据结构,包括校验码。为了使用磁盘存储文件,操作系统还需要将自己的数据结构记录在磁盘上,这分为两步:第一步是将磁盘分为由一个或多个柱面组成的分区,每个分区可以作为一个独立的磁盘;在分区之后,第二步是 逻辑格式化(创建文件系统),在这一步,操作系统将初始的文件系统数据结构存储在磁盘上,这些数据结构包括空闲和已分配的空间和一个初始为空的目录

△☼▽

在这里插入图片描述

分析:C,磁盘存储器的最小读写单位为一个扇区,即磁盘按块存取;根据上述理论,易知磁盘格式化容量比非格式化容量要小,故 B)选项是正确的

【文件删除】

删除文件时,存放文件的盘块常常返回到空闲盘块链,有些系统同时清除盘块中的内容,而另一些系统则不清除,下面对这两种方式从性能、安全性、方便性三个角度进行比较

性能方面:因为后一种方式在删除文件时减少了访问磁盘的次数,故其速度比前一种方式更快

安全性方面:把一个内容没有被清除的磁盘分配给下一个用户使用,则有可能使其获得盘块中的内容,故前一种方式更加安全

方便性方面:如果盘块中的内容没有被清除,则当用户因误操作而删除文件时,有可能通过某种办法恢复被删除的文件,故后一种方式更为方便

【硬链接/软链接】

1)硬链接

目录项中只有文件名和指向索引节点的指针,两个不同的目录项只需要指向相同的索引节点即可实现共享,即一个共享文件只有一个索引节点

在这里插入图片描述
在索引节点中再增加一个计数值来统计指向该索引节点的目录项的个数,这样一来就需要在删除文件时先判断计数值

这种方法能够实现文件的异名共享,但当文件被多个用户共享时,文件拥有者不能删除文件

△☼▽

在这里插入图片描述

分析:B,两个进程 各自维护自己的文件描述符,故 Ⅰ. 错误

2)软链接

该方是创建一个称为链接的新的目录项,在新目录项中包含了被共享文件的路径名,可以是绝对路径或者相对路径。当需要访问一个文件时,就搜索目录表,如果目录项标记为链接,那么就可以获得真正文件的名称,再搜索目录。在利用符号链方式实现文件共享时,只有文件拥有者才能拥有指向其索引节点的指针,而共享该文件的其他用户只有该文件的路径名,并不拥有指向其索引节点的指针。当文件拥有者把一个共享文件删除后,其他用户试图通过符号链去访问一个已被删除的共享文件时,会因系统找不到该文件而使访问失败,于是再将符号链删除,此时不会产生任何影响。符号链方式有一个很大的优点,就是它能够用于链接(通过计算机网络)世界上任何地方的计算机中的文件

3)关于引用的问题

建立符号链接时,引用计数值直接复制;建立硬链接时,引用计数加 1;删除文件时,删除操作对于符号链接时不可见的,但硬链接需要先判断引用值是否为 0

【文件外存分配方式】

在该小点处只总结了三种分配方式分别适合于什么要求的文件,而不具体讨论三种分配方式,三种分配方式的详细内容在下面其后的各小点中依次给出

1)连续分配

视频文件属于有结构文件中的定长记录文件,适合用连续分配来组织,连续分配的优点主要有顺序访问容易、顺序访问速度快等。为了实现快速随机播放,要保证最短的查询时间,不宜选取链式和索引结构

△☼▽

在这里插入图片描述

分析:A,理论如上所述

2)索引分配

△☼▽

在这里插入图片描述

分析:B,只有索引结构既具有随机存取功能,又能满足文件大小不固定的要求(即动态增长)

△☼▽

在这里插入图片描述

分析:B,理由如上题所述

3)三者比较

连续分配具有随机存取功能,但不便于文件长度的动态增长,且可能会出现外部碎片。链接分配便于文件长度的动态增长,但不具有随机存取功能。索引分配既具有随机存取功能,也便于文件长度动态增长

适合随机存取的程度总结为:连续分配 > 索引分配 > 链接分配

△☼▽

在这里插入图片描述

分析:D,理论如上所述

【连续分配】

连续分配方式保证了逻辑文件的记录顺序与存储器中文件占用盘块的顺序一致。但其容易产生碎片,需要定期进行存储空间的紧缩。显然,连续分配方式不适合文件随时间动态增长和减少的情况,也不适合用户事先不知道文件大小的情况

△☼▽

在这里插入图片描述

分析:
(1)4TB/1KB = 232,块号占 32 位,即 4B,因此索引表项中块号至少占 4B;每个索引区有 512B/4B = 128 个索引项,故单个文件最大长度为 128KB

(2)剩余的 504 字节可表示 504B/6B = 84 个索引项,由于是直接索引,故这部分能表示的大小为 84KB;再看前 8 字节,起始块号的 6B 对单个文件的长度没有任何影响,剩下的 2B(16 位) 表示块数,可表示 216 个块,即可表示 216KB 大小的空间,故单个文件的最大长度为 (216+84)KB

4TB 的空间有 32 个磁盘块,仅需要 4B 即可表示所有的磁盘块,于是,若要使单个文件的长度达到最大,可以扩大 8 字节中表示快块数所占的字节数,故取起始块号占 4B,块数占 4B,这样单个文件的最大长度为 (232+84)KB

【链接分配】

1)隐式链接

链接物理块的指针隐式地放在每个物理块中,目录项中有指向索引顺序文件的第一块盘块和最后一块盘块,此外每个盘块都含有指向下一个盘块的指针(这里在计算文件大小时需要注意盘块大小减去指针大小,指针大小反应了最大可寻址的盘块数)。若要访问某一个盘块,需要从第一个盘块开始一个个盘块都读出指针来(这里注意,如果存在插入某个中间块时需要一个个地找到插入位置的前一个块,然后读出该块,修改其下地址字段并将其存回,再存回新额记录块),所以存在随机访问效率低下的问题;由于其中任何一个盘块的指针错误都会导致后面盘块位置的丢失,因此可靠性较差

在这里插入图片描述

由下面一道题来解释一下上述两个括号内的内容:

△☼▽

在这里插入图片描述

分析:
假设逻辑地址为 L,逻辑块号为 n,首先根据逻辑文件的文件名找到目录表中该文件对应的目录项,找出第一个索引块的地址 d1,若 n < 511,取出第一个索引块第 n 项的值,即为查找逻辑块号所对应的物理块号 W;如果 n ≥ 511,得到第二个索引块的地址 d2,令 n = n-511,若此时 n ≥ 511,则继续得第三个索引块的地址 d3,依次类推,直到 n < 511 时,取出第 i 个索引块第 n 项的值,即为查找逻辑块号所对应的物理块号 W

△☼▽

在这里插入图片描述

分析:
(1)系统采用顺序分配方式时,插入记录需要移动其他的记录块,且注意文件 F 放入存储区前后均有足够的空闲磁盘空间,要求最少的访问存储块数,则把前 29 条记录前移,若算访盘次数移动一条记录读出和存回各是一次访盘,29 条记录前移需要访盘 58 次,存回第 30 条记录访盘 1 次,故一共访盘 59 次
(2)文件系统采用链接分配方式时,插入记录并不用移动其他记录,只需找到相应的记录,修改指针即可。插入的记录为其第 30 条记录,那么需要找到文件系统的第 29 块,一共需要访盘 29 次,然后把第 29 块的下块地址部分赋给新块,把新块存回会访盘 1 次,然后在内存中修改第 29 块的下块地址字段,再存回磁盘,一共访盘 31 次。4 个字节共 32 位,可以寻址 232 = 4G 块存储块,每块的大小为 1KB,即 1024B,其中下块地址部分占 4B,数据部分占 1020B,那么该系统的文件最大长度是 4G×1020B=4080GB

2)显示链接

用于链接物理块的指针显示存放在内存的一张链表中,每个磁盘设置一张链接表,该表称为文件分配表(FAT),由于还是链接方式,因此在 FAT 中找一个记录的对应物理块地址时还是需要一个个找下去,不能随机查找,但是与隐式链接相比,该方法是在内存中而非在磁盘中查找,所以能节省不少时间

在这里插入图片描述
注意:从上图可知,FAT 采用的是静态链表

△☼▽ 我们从下面这道真题来好好分析一下关于显示链接的点

在这里插入图片描述

分析:
(1) 由目录文件的每个目录项包括文件名和文件的第一个簇号可知,dir 目录和 dir1 目录文件的内容如下:

在这里插入图片描述
(2)2B = 16bit,因此 FAT表中最多允许有 216 个表项,故 FAT 的最大长度为 216×2B=128KB,该文件系统支持的文件最大长度为 216×4B=256MB
(3)在 FAT 的每个表项中存放下一个簇号(采用静态链表),故 file1 的簇号存放在 FAT 的100 号表项中,簇号 108 存放在 FAT 的106 号表项中
(4)先在 dir 目录文件里找到 dir1 的簇号,然后读取 48 号簇,得 dir1 目录文件,接着找到 file1 的第一个簇号,据此在 FAT 里查找 file1 的第 5000 个字节(5000>1024×4),最后访问磁盘中的该簇,(解释一点:我们知道第 5000 个字节在文件存储的第二个簇中,但是我们需要先确定文件存储的起始簇号,然后才能通过 FAT 表确定第二个簇所对应的簇号,而 FAT 和 dir 目录文件都已读入内存)故在此过程中需要访问 48 号和 106 号簇

【FAT技术】

在 FAT 中引入了卷的概念,支持将一个物理磁盘分成四个逻辑磁盘,每个逻辑磁盘就是一个卷(也称为分区),也就是说每个卷都是一个能够被单独格式化和使用的逻辑单元,供文件系统分配空间时使用

一个卷中包含了文件系统信息、一组文件以及空闲空间。每个卷都专门划出一个单独区域来存放自己的目录和 FAT 表,以及自己的逻辑驱动器字母,如 C: 、D:等。需要指出的是,在现代 OS 中,一个物理磁盘可以划分为多个卷,一个卷也可以由多个物理磁盘组成

(通过上面一段的描述,很容易理解 19 年真题中有一道题指出 FAT 也属于文件系统管理空闲磁盘块的数据结构)

1)早期的 FAT12

FAT12 以盘块为基本分配单位,其基本概念如显示链接中所描述,对于其性能的分析可参考下面 [文件磁盘的分块] 知识点中的的描述

2)以簇为单位的 FAT12 文件系统

由于 FAT12 不能适应磁盘容量的快速增长,而出现了以簇为单位的 FAT12 文件系统(详细描述仍参考下面 [文件磁盘的分块] 知识点)

3)FAT16

FAT12 对磁盘容量限制的原因在于,FAT12 表中的表项有限制,随着磁盘容量的增加,必定会引起簇的大小随之增加,进一步导致簇内碎片增加。为了适应更大容量的磁盘,便要想增加 FAT 表中的表项数,就必须增加 FAT 表的位数(宽度)。于是,就出现了 FAT16,此时最大表项数将增至 216 = 65536 个。当要求磁盘分区的大小为 8GB 时,则每个簇的大小达到 8GB/216 = 128KB,同时这也意味着内部零头最大可达到 128KB

4)FAT32

FAT16 存在的问题就是簇内碎片导致的空间浪费,为了解决这一问题,又出现了 FAT32,由于 FAT32 能支持更小的簇,使之具有更高的存储器利用率。同时,FAT32 支持长文件名,能够有效地节省硬盘空间

但是 FAT32 也有一定的不足之处:

  • 由于文件分配表的扩大,运行速度比 FAT16 格式要慢
  • FAT 32 限制最小的管理空间,即一个卷必须至少有 65537 = 65536+1 个簇,因此对于小分区,则仍然需要使用 FAT16 或 FAT12
  • FAT32 的单个文件长度页不能大于 4GB
  • FAT32 最大的限制在于兼容性方面,FAT32 不能保持向下兼容

【文件磁盘块的分配】

绝大多数操作系统为改善磁盘访问时间,以簇为单位 进行空间分配

下面来解释为什么:

假设每个 FAT 表项为 12 位,因此,在 FAT 表中最多允许 212 = 4096 个表项,如果采用以盘块作为基本分配单位,每个盘块(也称扇区)的大小一般为 512B,那么,每个磁盘分区的容量为 212×29B = 2MB,一个物理磁盘能支持 4 个逻辑分区,所以相应的磁盘最大容量仅为 8MB,这对早期的硬盘还可以应付,但很快磁盘的容量就不只 8MB 了

在不对 FAT 作出改进的情况下,如果把每个盘块(扇区)的容量增大 n 倍,则磁盘的最大容量便可以增加 n 倍。于是就引入了以簇为新分配单位的概念,簇即一组相邻的扇区,在 FAT 中它是作为一个虚拟扇区,在实际运用中,簇的容量可以仅有一个扇区、两个扇区、四个扇区等

以簇作为基本分配单位的好处是,能使用磁盘容量不断增大的情况,还可以减少 FAT 表中的项数(在相同的磁盘容量下,FAT 表的项数与簇的大小成反比),使 FAT 表占用更少的存储空间,并减少访问 FAT 表的存取开销。但是,以簇为基本分配单位同样存在一定的问题,即会造成更大的簇内零头(如下例题所示)

△☼▽

在这里插入图片描述

分析:D,1026=1024+2,故需要 2 个簇

【索引分配】

在索引分配方式中,系统为每个文件分配一个索引块,索引块中存放索引表,索引表中的每个表项对应分配给该文件的一个物理块

索引分配方式不仅支持直接访问,而且不会产生外部碎片,文件长度受限制的问题也得到了解决。其缺点是由于索引块的分配,增加了系统存储空间的开销。另外,存取文件需要两次访问外存——首先读取索引块的内容,其次再访问具体的磁盘块,因而降低了文件的存取速度。为了更有效地使用索引表,避免访问索引文件时两次访问外存,可以在访问文件时先将索引表调入内存中,这样,文件的存取就只需要访问一次外存了

△☼▽

在这里插入图片描述

分析:A,一个文件对应一个索引节点,索引结点的总数只能说明有多少个文件,跟单个文件的长度没有关系

△☼▽

在这里插入图片描述

分析:B
对 A,索引表每个记录的索引项只有一个,故错误;
对 B,对索引文件进行存取时,需要检索索引表,找到相应的表项,再利用该表项中给出的指向记录的指针值取访问所需的记录,故正确
对 C,对主文件的每个记录,在索引表中都设有一个相应的表项,用于记录该记录的长度 L 及指向该记录的指针(指向该记录在逻辑地址空间的首地址),故错误
对 D,由于使用了索引表而增加了存储空间的开销,因此不会减少存储空间,而会增加存储开销,故错误

1)单级索引分配

建立一个索引块,其盘块号为 19,则在目录文件中该表项的块序号为 19,并在 19 号盘块中建立其分配盘块号的索引。下图中表示 test 文件分配的第 1 个盘块号为 9,第二个盘块号为 16,以此类推,-1 表示结束

在这里插入图片描述

△☼▽

在这里插入图片描述

分析:B,单级索引的索引块驻留内存,所有数据块的指针都在内存中,只需在内存中重排列这些指针间的位置即可

对 A,连续分配中每个数据块的访问都是用块号寻址的,其调整过程类似数组,将最后一块先读入内存,再把倒数第二块放入最后一块地,以此类推,故需要多次磁盘 I/O 操作

对 C、D,隐式链接中,连接分配的指针存放在数据块的末尾,即在外存中,故必然需要去磁盘中找到目标块然后才能作出相应的调整

2)二级索引分配

△☼▽

在这里插入图片描述

分析:A,每个磁盘块中最多有 1KB/4B = 28 个索引项,故单个文件最大长度为 28×28×1KB

3)混合索引分配

在这里插入图片描述
可能涉及的问题:

  1. 关于单个文件最大长度的计算
  2. 寻找某个记录的访盘次数

△☼▽

在这里插入图片描述

分析:B,直接索引的数据块大小为 10KB = 10240B( > 1234),故前者只需要一个访盘;每个磁盘可存放 1KB/4B = 28 个指针,故一级索引的数据块大小为 28×1KB = 256KB = 262144B,显然 307400 > 10240+262144,故会用到二级索引,于是,后者需要三次访盘

在这里插入图片描述

分析:
(1)每个地址项占 4B,一个簇有 4KB/4B = 1K 个地址项,故该系统支持的最大文件长度为 (8+1024+10242+10243)×4KB
(2)文件索引节点的个数为 1MB×4KB/64B = 64M,5600B 的文件占用 2 个簇,512M 个簇可以存放 512M/2 = 256M 个图像文件,而可表示的文件总个数受限制与文件索引节点个数,故最多能存放 64M 个图像文件
(3)F1 的文件大小为 6KB(< 8×4KB),故获取 F1 文件的最后一个簇的簇号仅需要访问索引节点的直接地址项;F2 的文件大小为 40 KB(8×4KB < 40KB < 1024×4KB),故获取 F2 文件的最后一个簇的簇号需要读一级索引表,故两者的时间不相同

△☼▽

在这里插入图片描述

分析:
(1)10×4KB = 40KB,文件大小小于或等于 40KB 时,可以只用到索引节点的直接块
(2)一个盘块可以有 4KB/4B = 210 个指针,于是一级索引有 210×4KB = 4MB,二级索引有 220×4KB = 4GB,三级索引有 230×4KB = 4TB,故该索引接地点能访问到的地址空间的大小总共为 40KB+4MB+4GB+4TB
(3)10000 < 40×1024,故第 10000B 的内容在直接块中,故访问磁盘 1 次
(4)4MB < 10MB < 4GB,会用到二级索引,故访问磁盘 3 次

△☼▽

在这里插入图片描述

分析:
(1)文件最大长度为 (10+170+1702+1703)×512B
(2)5000 = 512×9+392,对应逻辑块号 9,故直接从该文件的 FCB 的第 9 个地址项处得到物理盘块号,块内偏移 392B;15000 = 512×29+152,对应逻辑块号为 29(< 170+10),故从 FCB 的第 10 个地址项,即一次间接地址项中得到一次间接地址块的地址,并从一次间接地址块的第 19 项(同样从第 0 项数起)中获得对应的物理块号,块内偏移为 152;150000 = 512×292+496,对应逻辑块号为 292(< 1702+10),故可以从 FCB 的第 11 个地址项,即二次间接地址项中得到二次间接地址块的地址,292-170-10 = 112(< 170),并从二次间接地址块的第 0 项中获得一个一次间接地址块的地址,再从该一次间接地址块的第 112 项中获得对应的物理盘块号,块内偏移为 496
(3)最少需要访问磁盘 1 次,即通过直接地址直接读文件盘块;最多需要访问磁盘 4 次,即通过三次间接地址寻找文件

在这里插入图片描述
在这里插入图片描述

分析:
(1)一个盘块可有 512/2 = 256 个地址项,故一个普通文件最多可有 10+256+2562+2563 = 16843018 页
(2)先找到文件 J,将其文件控制块读入内存要访问磁盘 3 次,若 J 中某一页需要三级索引才能找出,那么最多访问磁盘 7 次
(3)找到文件 W 再将其文件控制块读入内存要访问磁盘 5 次,若 W 中某一页只用到直接块,那么最少访问磁盘 6 次
(4)为了减少启动磁盘次数,可以将需要访问的 W 文件挂在根目录项中,此时只需要访问磁盘 1 次即可将 W 文件的文件控制块读入内存,此时若 W 中某一页需要三级索引则最多需访问磁盘 5 次

△☼▽

在这里插入图片描述

分析:

【三种外存分配方式查找过程总结】

△☼▽

在这里插入图片描述

分析:3500 = 1024×3+428,故逻辑块号为 3,块内偏移为 428

(1)在连续分配中,可从相应文件的 FCB 中得到分配给该文件的起始物理量盘块号,例如 a0,故 3500 对应的物理块号为 a0+3,块内偏移为 428

(2)在隐式链接中,由于由于每个盘块需要留出 4B 来存放分配给文件的下一个盘块号,故 3500 = 1020×3+440,于是从相应文件的 FCB 中可获得分配给该文件的首个(第 0 个)盘块的块号,假设为 b0,然后可以通过读 b0 块获得分配给文件的第 1 个盘块的块号 b1,以此类推,得 b3,故 3500 对应的物理块号为 b3,块内偏移为 440

(3)在显示链接中, 可从文件的 FCB 中得到分配给文件的首个(第 0 个)盘块的块号,如 c0,然后再 FAT 的第 c0 项中找到分配给文件的第 1 个盘块的块号 c1,如此找到第 3 个盘块的块号 c3,故 3500 对应的物理块号为 c3,块内偏移为 428

(4)在索引分配中,可从文件的 FCB 中得到索引表的地址,从索引表中的第 3 项(从第 0 项开始数起)获得字节偏移量为 3500 对应的物理块号,而块内偏移为 428

【文件存储空间管理】

△☼▽

在这里插入图片描述

分析:B,Ⅰ、Ⅱ、Ⅲ 很容易判断;说下 Ⅳ,文件分配表(FAT)的表项与物理磁盘块一一对应,并且可以用一个特殊的数字 − 1 -1 1 表示文件的最后一块,用 − 2 -2 2 表示这个磁盘块是空闲的(当然,规定用 − 3 , − 4 -3,-4 3,4 来表示也是可行的)。因此,FAT 不仅记录了文件中各个块的先后链接关系,同时还标记了空闲的磁盘块,操作系统可以通过 FAT 对文件存储空间进行管理,故 Ⅳ 正确

1)空闲文件表

2)空闲链表法

3)位示图的问题

△☼▽

在这里插入图片描述

分析:C,409612 = 1024×8×50+12,那么要修改的位在第 51 个盘块中的第 2 个字节,由于盘块和块内字节均是从 0 开始编号,故所在的盘块号为 51+32-1 = 82,所在的块内字节号为 1

△☼▽

在这里插入图片描述

分析:C,由下图可知,块号 100 对应的位置为 字号为 3,位号为 4

在这里插入图片描述

△☼▽

在这里插入图片描述

分析:A,10GB 的磁盘分区有 10GB/4KB = 2.5×220 个簇,每个簇在位示图中占用 1bit,故存放该位示图需要 (2.5×220×1bit/8)/4KB = 80

4)成组链接法(UNIX 的文件存储空间管理方法)

【与文件系统相关的函数】

1)open函数、read 函数

read 系统调用通过陷入将 CPU 从用用户态切换到核心态,从而获取操作系统提供的服务。要读一个文件,首先要用 open 系统调用打开该文件,open 中的参数包含文件的路径名与文件名,而 read 只需要使用 open 返回的文件描述符,并不使用文件名作为参数。read 要求用户提供三个输入参数:① 文件描述符 fd,② buf 缓冲区首址,③ 传送的字节数 n;read 的功能是试图从 fd 所指的文件中读入 n 个字节的数据,并将它们送至指针 buf 所指的缓冲区

△☼▽

在这里插入图片描述

分析:A,当用户进程读取磁盘的文件数据不在内存时,转向中断处理,导致 CPU 从用户态切换到核心态,此时该进程进入睡眠等待状态(即阻塞套),故ⅠⅡ 正确;根据上述描述,Ⅲ 错误

2)close 函数

△☼▽

在这里插入图片描述

分析:A,close() 操作是销毁这个文件在内存中的目录项,而文件还是保存在外存上,不可能被丢弃;另外,对 D 选项,目录也是文件,也要先打开后使用

【磁盘调度】

1)SCAN

走到边再掉头反方向走,对两端磁道请求比较不公平

△☼▽

在这里插入图片描述

分析:C,根据 SCAN 调度方法 ,访问顺序为 58→130→180→199→42→15,移动过的磁道数为 (199-58)+(199-15) = 325

△☼▽

在这里插入图片描述

分析:
(1)先来先服务算法:20→10→22→2→40→6→38,总寻道时间为 (10+12+20+38+34+32)×6ms = 876ms
(2)电梯算法:20→22→38→40→10→6→2,总寻道时间为 (40-20+40-2)×6ms = 348ms

2)C-SCAN

走到边立即回到中心按照原来方向继续走

3)磁臂黏着现象

系统总是访问磁盘的某个磁道而不响应对其他磁道的访问请求,这种现象称为磁臂黏着

当系统总是持续出现某个磁道的访问请求时,均持续满足最短寻道时间优先、扫描算法和循环扫描算法的访问条件时,会一直服务该访问请求。因此,只有先来先服务按照请求次序进行调度比较公平

5 设备管理

【程序直接控制方式】

在早期的计算机系统中,没有中断系统,所以 CPU 和 I/O 设备进行通信、传输数据时,由于 CPU 的速度远远快于 I/O 设备,因此 CPU 需要不断地测试 I/O 设备。这种控制方式又称为轮询忙等

△☼▽

在这里插入图片描述

分析:B,忙等 I/O 方式就是当 CPU 等待 I/O 操作完成时,进程不能继续执行

△☼▽

在这里插入图片描述

分析:串行线接收数据的最大速率为 50000B/s,即每 20us 接收 1B,而轮询例程需 3us 来执行,则最大安全轮询时间间隔为 17us

在这里插入图片描述

【中断控制方式】

△☼▽

在这里插入图片描述

分析:每秒可传送 (56×103bit)/10bit = 5600 个字符,即要发生 5600 次中断,每次中断需要 0.1ms,故处理调制器而占用 CPU 的时间为 5600×0.1ms = 560ms,比率为 560/1000×100% = 56%

△☼▽

在这里插入图片描述

分析:时钟周期为 1/60 s,用于中断处理的时间为 2ms,故时间比率为 0.002ms/(1/60)×100% = 12%

【DMA 控制方式】

DMA 写入数据过程

当用户进程需要数据时,CPU 将准备存放输入数据的内存起始地址以及要传送的字节数分别送入 DMA 控制器中的内存地址寄存器和传送字节计数器中,并启动设备开始进行数据输入。在输入数据的同时,CPU 可以去做其他的事情。输入设备不断地挪用 CPU 工作周期,将数据寄存器中的数据源源不断地写入内存,直到要求传送的数据全部传输完毕。DMA 控制器在传输完毕时向 CPU 发送一个中断信号,CPU 收到中断信号后转中断处理程序执行,中断结束后返回被中断程序

(如,初始化 DMA 控制器并启动磁盘 → \rightarrow 从磁盘传输一块数据到内存缓冲区 → \rightarrow DMA 控制器发出中断请求 → \rightarrow 执行 DMA 结束中断服务程序)

中断控制方式和 DMA 控制方式的主要区别:

中断驱动 I/O 控制方式是每个数据传输后即发出中断,而 DMA 方式是在一批数据传输完毕后才发生中断。中断驱动 I/O 控制方式的传输是由CPU控制的,而 DMA 方式中只有数据块传输的开始和结束阶段在 CPU 控制下,在传输过程中都是由 DMA 控制器控制的。所以,DMA 方式相比于中断方式,通过硬件的增加大大减少了中断的次数

△☼▽

在这里插入图片描述

分析:DMA 的传输速率为 40MB/s,也就是平均每 100ns 传送 32bit 的数据就能达到 DMA 的传输要求。由于系统总线被 CPU 和 DMA 共用,因此要在 DMA 传输数据时暂停 CPU 对总线的使用。CPU 在对总线完全占用的情况下,每 10ns 可传输 32 bit 的指令,于是,平均每 10 个时钟周期内,只需挪用一个周期来传输数据就能达到 DMA 的传输要求。因此,DMA 挪用周期的频率是每 10 个周期挪用一个,因此磁盘控制器使命令的执行速度降低了 10%

【虚拟设备】

(模拟题一)

在这里插入图片描述

分析:C,虚拟设备是指采用虚拟技术将一台独占设备转换为若干台逻辑设备的情况。这种设备并不是物理地变成共享设备

【SPOOLing】

独占设备在一段时间内只能用一个用户使用,使许多进程因等待而阻塞,影响了整个系统的效率。另一方面,分配到独占设备的进程在整个运行期间并非持续使用,设备利用率较低。SPOOLing 技术通过共享设备来虚拟独占设备,将独占设备改造成共享设备,从而提高设备利用率和系统的效率。

采用 SPOOLing 技术,可以预先从低速的输入型独占设备上将程序运行需要的数据传送到磁盘上的输入井中,当用户程序运行时,可以直接从输入井中将数据读入内存。由于磁盘是共享设备,多个用户进程可以共享使用输入井,这样就将输入型独占设备改造成了可共享使用的虚拟设备

几点细节上的问题:

  1. 无论有没有通道,SPOOLing 系统都可以运行,因此,SPOOLing 系统利用了处理器与通道并行工作的能力的说法是错误的
  2. SPOOLing 技术需要多道程序设计技术的支持
  3. 设备与输入/输出井之间的数据的传送是由系统实现的,而不是用户作业
  4. SPOOLing 系统中代替独占设备的部分是共享设备

△☼▽

在这里插入图片描述

分析:

在这里插入图片描述
当磁盘上输入数据总块数 i = m a x i=max i=max 时,那么磁盘上输出数据块总数 o o o 必为零。此时进程 I 发现输入缓冲区已满,所以不能再把输入数据缓冲区中,进程 P 此时有一个处理好了的数据,欲把结果数据放入缓冲区,但是发现没有空闲空间可以使用, o = 0 o=0 o=0,没有输出数据可以输出,故进程 O 页无事可做,此时三个进程都将处于等待状态,出现死锁

可将条件改为 i + o ⩽ m a x , i < m a x i+o\leqslant max, i < max i+omax,i<max,这样即不会发生死锁

【设备管理中的数据结构】

设备控制表(DCT)、设备控制器控制表(COCT)、通道控制表(CHCT)和系统设备表(SDT)

【缓冲技术】

1)缓冲的引入

  • 缓冲区的引入主要是缓和了 CPU 与设备速度不匹配的矛盾,提高了设备和 CPU 的并行程度
  • 此外,引入缓冲后可以降低设备对 CPU 的中断频率,放宽对中断响应时间的限制
  • 缓冲技术的缓冲池通常设立在内存/主存中

△☼▽

在这里插入图片描述

分析:B,缓冲区主要是解决因输入/输出速度比 CPU 处理速度慢而造成的数据积压的矛盾,因此,若 I/O 所花费的时间比 CPU 处理时间段很多,则没有必要设置缓冲区

2)缓冲的分类

△☼▽

在这里插入图片描述

分析:B,在单缓冲的情况下,当上一个磁盘块从缓冲区读入用户区完成时,下一个磁盘块才能开始读入缓冲区,故总时间为 150us×10+50us = 1550us;在双缓冲下,读入第一缓冲区之后可以立即开始读入第二个缓冲区,故总时间为 100us×10+100us = 1100us

在这里插入图片描述

△☼▽

在这里插入图片描述

分析:C,总时间为 105+105+90 = 300

在这里插入图片描述

△☼▽

在这里插入图片描述

分析:单缓冲情况下,系统对一块数据的处理时间为 m a x ( T , C ) + M max(T,C)+M max(T,C)+M;双缓冲情况下,系统对一块数据的处理时间为 m a x ( T , M + C ) max(T,M+C) max(T,M+C)

在这里插入图片描述

3)高速缓存与缓冲区

【I/O 交通管制程序】

对外设的控制常分为设备、控制器和通道 3 个层次,所以 I/O 交通管制程序的主要功能是管理这 3 个层次的状态信息

【提高单机资源利用率的关键技术】

在单机系统中最关键的资源就是处理器资源,因此最大化提高处理器利用率就是最大化提高系统效率。多道程序设计技术是提高处理器利用率的关键技术,而 SPOOLing 技术、虚拟技术和交换技术等是设备和内存的相关技术

【I/O 软件层次结构】

在这里插入图片描述

考虑如下的一个流程:

当用户程序要从文件中读一个数据块时,需要通过操作系统来执行此操作。设备独立性软件首先在高速缓存中查找此数据块,若未找到,则调用设备驱动程序向硬件发出响应的请求,用户进程随即阻塞直到数据块被读出。当磁盘完成时,硬件产生一个中断,并转入中断处理程序。中断处理程序检查中断的原因,并从设备中获取所需的信息,然后唤醒睡眠的进程以结束此次 I/O 请求,使用户进程继续执行

1)中断处理程序

中断与硬件先关,I/O 设备的中断服务程序的代码与任何进程无关。完成 I/O 操作时,设备便向 CPU 发送中断信号,CPU 响应中断后便转入中断处理程序

中断过程如下:唤醒被阻塞的驱动程序进程 → 保护被中断进程的 CPU 环境 → 分析中断原因 → 进行中断处理 → 恢复被中断进程的现场

2)设备驱动程序

  • 设备驱动程序的任务是接收来自上层的设备独立性软件的抽象请求,将这些请求转换成设备控制器可以接受的具体命令,再将这些命令发送给设备控制器,并监督这些命令正确执行
  • 设备驱动程序的底层部分在发生中断时调用,以进行中断处理
  • 由于驱动程序与硬件密切相关,因而其中的一部分必须用汇编语言书写(注意不是全部),其他部分则可以用高级语言来书写
  • 我们说,所有与设备相关的代码都放在设备驱动程序中,所以,磁盘的调度程序是在设备驱动程序中运行的
  • 设备驱动程序是操作系统中唯一知道设备控制器中设置了多少个寄存器以及这些寄存器有何用途的程序
  • 另外,设备驱动程序是按类配置的

设备驱动程序的处理过程:① 将抽象要求转换为具体要求;② 检查 I/O 请求的合法性;③ 读出和检查设备的状态;④ 传送必要参数;⑤ 工作方式的设置;⑥ 启动 I/O 设备

将磁盘块号转换为磁盘的盘面,磁道号及扇区号,属于 ①,因此是设备驱动程序的功能

3)设备独立性软件

设备独立性软件的基本任务是:实现一般设备都需要的 I/O 功能,并向用户软件提供一个统一接口,与设备无关的软件层也就是系统调用的处理程序

4)用户层软件

SPOOLing 系统处于这一层之上

△☼▽

在这里插入图片描述

分析:B,理论如上描述

(模拟题一)

在这里插入图片描述

分析:A,理论如上描述

【管道】

管道实际上是一种固定大小的缓冲区,管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在于内存中。它类似于通信中半双工信道的进程通信机制,一个管道可以实现双向的数据传输,而同一个时刻只能最多有一个方向的传输,不能两个方向同时进行。管道的容量大小通常为内存上的一页,它的大小并不是受磁盘容量大小的限制。当管道满时,进程写管道会被阻塞,而当管道空时,进程读管道会被阻塞

【一堆有关中断的概念】

中断屏蔽:中断请求能否参加判优,需根据屏蔽字的状态决定,若某屏蔽为 1,其对应的请求无效,不可参加判优

开中断:当允许中断标志为 1 时,表明现行程序的优先级低于所有中断请求的优先级,一旦出现中断请求,CPU 便能响应

陷入:系统调用引发的事件

中断响应:对中断请求的整个处理过程是由硬件和软件结合起来而形成的一套中断机构实施的。发生中断时,CPU 暂停执行当前的程序,而转去处理中断,该过程由硬件对中断请求作出反应

中断:CPU 对系统发生的某个事件做出的一种反应,即 CPU 暂停正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完该事件后再返回断点,继续执行被打断的程序

软中断:利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果

中断处理:大致分为 4 个阶段:保存被中断程序的现场,分析中断原因,转入相应处理程序进行处理,恢复被中断程序的现场

关中断:为保证在中断周期中指令操作的执行不受外部干扰,将允许中断标志位清 0,即表明现行程序的优先级比所有请求的优先级都高,任何请求都不响应

【设备独立性】

引入设备独立性可使应用程序独立于具体的物理设备。此时,用户用逻辑设备名来申请使用某类物理设备,当系统中有多台该类型的设备时,系统可以将其中的一台分配给请求进程,而不必局限于某一台指定的设备,这样可以显著改善资源的利用率及可适应性。独立性还可以使用户程序独立于设备的类型,如进行输出时,既可用显示终端,也可以用打印机。有了这种适应性,就可以很方便的进行输入/输出重定向

为了实现设备独立性,必须在设备驱动程序之上设置一层设备独立性软件,用来执行所有 I/O 设备的公用操作,并向用户层软件提供统一接口。关键是系统中必须设置一张逻辑设备表(LUT)用来进行逻辑设备到物理设备的映射,其中每个表目中包含逻辑设备名、物理设备名和设备驱动程序入口地址。当应用程序用逻辑设备名请求分配 I/O 设备时,系统必须为它分配相应的物理设备,并在 LUT 中建立一个表目,以后进程利用该逻辑设备名请求 I/O 操作时,便可从 LUT 中得到物理设备名和驱动程序入口地址

【中断控制方式输入请求 I/O 处理的详细过程】

在使用中断控制方式的系统中,执行输入请求的处理过程如下:

1)应用进程请求读操作
2)设备启动程序(设备驱动程序的高层部分)查询设备控制器的状态寄存器,确定设备是否空闲。若设备忙,则设备启动程序等待,直到变为空闲为止
3)设备启动程序把输入命令存入设备控制器的命令寄存器中,从而启动设备
4)设备启动程序将相应信息写入到设备控制表(DCT)的设备对应表项中,如最初调用的返回地址以及 I/O 操作的一些特定参数等。然后,CPU 就可以分配给其他进程使用了,因此,设备管理器调用进程管理器的调度程序执行,原进程的执行被暂停
5)经过一段时间后,设备完成了 I/O 操作,设备控制器发出中断请求,中断CPU 上运行的进程,从而引起 CPU 运行中断处理程序
6)中断处理程序确定是哪个设备引起的中断,然后转移到该设备对应的设备处理程序(设备驱动程序的低层部分)执行
7)设备处理程序重新从设备控制表(DCT)找到等待 I/O 操作的状态信息
8)设备处理程序返回给应用进程控制权,从而继续运行

在以上处理 I/O 操作的过程中,中断处理程序和设备处理程序两者一起完成对中断请求的处理。但两者工作方式不同,前者必须关中断运行或以高优先级方式运行,后者可以开中断运行或以低优先级方式运行

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐