操作系统学习笔记第4章 (竟成)

目录

第 4 章 文件管理

4.1 文件

4.1.1 文件的基本概念

4.1.2 文件元数据和索引节点

4.1.3 文件的操作

4.1.4 文件的保护

4.1.5 文件的逻辑结构

1.无结构文件(流式文件)

2.有结构文件(记录式文件)

(1) 顺序文件

(2) 索引文件

(3) 索引顺序文件

(4) 直接文件与散列文件(Hash File)

4.1.6 文件的物理结构

1.连续分配

2.链接分配

3.索引分配

4.1.7 习题精编

4.1.8 真题演练

4.2 目录

4.2.1 目录的基本概念

4.2.2 目录结构

1. 单级目录结构

2. 两级目录结构

3. 树形目录结构

4. 无环图目录结构

4.2.3 目录的操作

(1)创建目录

(2)删除目录

(3)切换目录

(4)移动目录

(5)查找

4.2.4 * 目录实现

(1)线性表

(2)哈希表

4.2.5 文件共享

1.基于索引节点的共享方式(硬链接)

2.利用符号链接实现文件共享(软链接)

符号链接优点

符号链接缺点

4.2.6 习题精编

4.2.7 真题演练

 4.3 文件系统

4.3.1 文件系统结构

1. 文件系统的全局结构

2. 文件系统在外存中的结构

3. 文件系统在内存中的结构

4.3.2 外存空闲空间管理方法

1.空闲表法

2.空闲链表法

(1)空闲盘块链

(2)空闲盘区链

3.位示图法

        (1)位示图的概念

        (2)盘块的分配与回收

        (3)位示图的优缺点

4.成组链接法

4.3.3 虚拟文件系统

1. 虚拟文件系统的概念

2. 虚拟文件系统的结构

3. 虚拟文件系统的工作过程

4.3.4 文件系统挂载 (mounting)

4.3.5 习题精编

4.3.6 真题演练

4.4 本章重难点解析

4.4.1 易错点与补充知识点

1.文件控制块、索引节点、文件分配表等文件系统中数据结构的作用

2.文件控制块、索引节点和目录的关系

3.提升文件访问速度的方法

4.4.2 计算总结与重难题剖析

1.文件最大长度的计算

2.给出文件偏移量,求读取此偏移量的访盘次数

4.5 章末总结

4.5.1 本章知识点提炼

4.5.2 思考题解析

4.6 * 文件系统实战 ²⁰

4.6.1 本章内容梳理

4.6.2 FAT 文件系统

4.6.3 基于 inode 的文件系统


第 4 章 文件管理

【考纲内容】

1.文件:

        1.文件的基本概念;

        2.文件元数据和索引节点(inode);

        3.文件的操作:建立;删除;打开;关闭;读;写;

        4.文件的保护;

        5.文件的逻辑结构;

        6.文件的物理结构。

2.目录:

        1.目录的基本概念;

        2.树形目录;

        3.目录的操作;

        4.硬链接与软链接。

3.文件系统:

        1.文件系统的全局结构(layout):文件系统在外存中的结构;文件系统在内存中的结构;

        2.外存空闲空间管理方法;

        3.虚拟文件系统;

        4.文件系统挂载(mounting)。

【考情统计】

年份

单选题

综合题

总分值

考点

2009

3

0

6

FCB、文件共享、物理结构、FAT

2010

2

0

4

物理结构、目录

2011

0

1

7

FCB、物理结构

2012

1

1

10

文件操作、物理结构

2013

3

0

6

文件操作、物理结构

2014

2

1

10

FCB、文件操作、物理结构、空闲空间管理

2015

2

0

4

物理结构、空闲空间管理

2016

0

1

9

物理结构、目录

2017

2

0

4

文件操作、文件保护、文件共享

2018

1

1

9

索引节点、物理结构、文件访问速度

2019

1

0

2

索引节点、FAT、空闲空间管理

2020

3

0

6

索引节点、文件操作、物理结构、目录、文件共享

2021

1

0

2

文件操作

2022

0

1

7

目录、索引节点

2023

2

0

4

位图、目录

2024

2

0

4

外存空闲空间管理方法、文件操作

【考点解读】

        本章内容概念性的知识偏多,出题形式有选择题和综合应用题,值得注意的是文件的物理结构经常作为综合应用题的出题来源。考生需要注意理解文件相关概念,如文件控制块和索引节点的结构、文件操作所做的工作等,同时也要注重记忆有关概念的细节,如三种文件分配方式的区别、两种文件共享方式的区别等。真题通常以综合应用题的形式考查文件物理分配方式的计算,如文件长度、访盘次数等。

【复习建议】

1.掌握文件控制块和索引节点的概念。

2.掌握文件操作中操作所做的具体工作。

3.理解文件保护的不同方式。

4.理解文件逻辑结构的含义,以及不同逻辑结构的区别。

5.重点掌握不同文件物理结构的组成结构、优缺点、访盘次数以及相应文件长度的计算,尤其需要掌握混合索引分配方式的相关知识点。

6.掌握树形目录结构的概念。

7.掌握两种不同文件共享方式的含义和区别。

8.掌握不同外存空闲空间管理方法的结构、分配与回收。

9.理解文件系统结构、虚拟文件系统、文件系统挂载的概念。

4.1 文件

        本节主要围绕文件这一概念展开,通过本节的学习,考生需要对文件的概念、结构、操作和保护建立起初步而全面的认识,可以和自己在个人电脑上使用文件的场景联系起来,加深对文件这个抽象概念的理解。

在学习本节时,请考生思考以下问题:

        1.什么是 “按名存取”?文件系统如何实现对文件的按名存取?

        1.“按名存取” 的定义:用户通过文件名来访问和操作文件,而无需关心文件在存储设备上的具体物理位置等细节 。这是文件系统提供给用户的一种便捷、抽象的文件访问方式,极大地简化了用户对文件的使用,使用户可以像使用现实生活中的文件一样,通过名字快速找到并使用相应文件。

        2.文件系统实现按名存取的过程

                1.目录管理:文件系统维护文件目录,目录中记录文件名及相关文件属性信息(如文件类型、大小、创建时间等) 。例如在 Windows 系统的资源管理器中,文件夹(目录)里显示的文件名就对应着目录中的记录。

                2.文件名映射:当用户给出文件名请求访问文件时,文件系统在目录中查找匹配的文件名。找到后,通过目录项中记录的文件物理地址信息(如磁盘块号等) ,建立文件名到文件物理存储位置的映射。比如在 Linux 系统中,通过查找 inode 节点表,inode 中记录了文件数据在磁盘上的存储位置等信息,从而实现文件名到物理位置的转换。

                3.权限检查与访问控制:在确定文件位置前,还会检查用户对该文件的访问权限,若用户有相应权限(读、写、执行等) ,才允许按映射的物理地址去访问文件数据。

2. 什么是文件的逻辑结构和物理结构?它们之间是否存在制约关系?

        文件的逻辑结构:从用户角度看到的文件组织形式,是用户对文件中数据的逻辑组织和处理方式的抽象。比如,用户可以将文件视为字符流(如文本文件) ,每行是一系列字符的组合;也可以将文件看作记录的集合(如数据库文件) ,每个记录包含特定字段信息。它更关注文件数据的逻辑含义和使用方式,方便用户对文件内容进行操作和处理。

        文件的物理结构:文件在存储设备(如磁盘)上的实际存储组织方式。常见的有连续结构(文件数据连续存储在磁盘相邻块中) 、链接结构(文件数据分散存储,通过指针链接各存储块) 、索引结构(通过索引表记录文件各部分存储位置) 。它主要考虑的是如何在物理存储设备上高效地存储和管理文件数据,涉及到磁盘空间的分配和使用等问题。

二者的制约关系

        逻辑结构对物理结构的影响:不同逻辑结构可能适合不同物理结构。例如,对于定长记录的文件(逻辑结构) ,采用连续结构(物理结构)可能更便于快速定位和访问记录;而对于不定长记录或频繁增删记录的文件,链接结构或索引结构可能更合适,能更好地适应数据的动态变化。

        物理结构对逻辑结构的限制:物理结构会影响逻辑结构的实现效率。如果物理结构是连续结构,文件大小不易动态扩展,这对逻辑上需要频繁增加数据的文件就不太友好;而链接结构虽然灵活,但访问速度相对较慢,对于一些对实时性要求高的逻辑操作(如频繁随机访问)可能无法很好地满足。

4.1.1 文件的基本概念

1.文件的定义
        文件(File)指计算机系统中存储的一段信息,在逻辑上表示为一段线性的数据流,在物理上则或连续或分散地存储于存储设备中。文件存储的内容可以是视频、图片、文字等数据信息,也可以是执行某种逻辑功能的程序信息。除此之外,文件通常还包括一些元数据信息,如文件名、修改时间、文件所有者等,元数据信息由文件所属的文件系统负责维护和管理。

1.对操作系统的文件系统而言,一个源程序、一批数据、一篇文章或一张图片都可以被称为文件,只要它是( )。
A. 连续分布在一片磁盘区域中的信息集合
B. 采用链接方式连接起来的多个磁盘块组成的信息集合
C. 逻辑上具有完整意义的信息集合
D. 属于同一个用户的一个信息集合

1.【参考答案】 C
【解析】文件是逻辑上具有完整意义的信息集合,C 选项正确;文件不一定连续分布在一片磁盘区域,文件的分布由分配方式决定,A 选项错误;文件物理结构不一定采用链接方式,B 选项错误;同一个用户的信息可能存储在多个文件中,D 选项错误。

        文件系统(File System)是一种存储和组织计算机数据的方法。文件系统可以将存储设备中的二进制位组织成文件,并为每一个文件指派一个路径;用户在文件系统中存取数据时,只需路径即可访问文件中的数据,而不必关心数据实际保存在底层存储设备的具体地址。在写入新数据前,用户也无需知道底层存储设备哪些存储空间处于空闲状态,这是因为管理底层存储设备、分配和释放存储空间的任务由文件系统负责完成。除此之外,文件系统还提供了将文件组织在目录中,以便管理和查找的功能,以及文件共享和保护的功能。
        【举例】计算机中的文件系统可以类比为现实世界中的图书馆,文件可以类比为书,读者来到图书馆找书(文件),只需在前台的电脑输入书名就可以知道书的位置。图书馆里的书可以供很多人借阅,但只能借给办理了借阅证的读者,这就相当于文件的共享和保护。
        文件的结构多种多样,存储的信息不同,文件的结构也就不同。408 考试中,有一类文件常常出现,那就是由记录组成的文件。这类文件由若干条记录组成,每条记录又由若干数据项组成。三者的层次关系如图 4.1 所示。

        以表 4.1 为例,整个表就是一个文件,{10001, 张三,男,18, 一班} 就是一条记录,而 10001 就是一个数据项。

1.下列关于文件系统的说法中,正确的是 ( )。
A. 文件系统负责文件存储空间的管理,但不能实现文件名到物理地址的转换
B. 在多级目录结构中对文件的访问是通过路径名和用户目录名进行的
C. 文件可以被划分成大小相等的若干物理块且物理块大小也可任意指定
D. 逻辑记录是对文件进行存取操作的基本单位

1.【参考答案】D
        【解析】文件系统使用文件名进行管理,也实现了文件名到物理地址的转换,A 错误。在多级目录结构中,从根目录到任何数据文件都只有一条唯一的路径,该路径从目录树根开始,把全部目录文件名和文件名依次用 “/” 连接起来,即构成该数据文件的路径名。B 的说法不准确,对文件的访问只需通过路径名即可。文件被划分的物理块的大小是固定的,通常和内存管理中的页面大小一致,C 错误。逻辑记录是文件中按信息在逻辑上的独立含义来划分的信息单位,它是对文件进行存取操作的基本单位,D 正确。

2.文件的分类
        操作系统为了便于管理和控制而将文件分成若干种类型。不同的系统对文件的管理方式不同,文件的分类也不同。下面是常用的几种文件分类方法。

        1.按用途分类:系统文件、用户文件、库文件

        2.按文件中数据的形式分类:源文件、目标文件、可执行文件

        3.按存取控制属性分类:可执行文件、只读文件、读写文件

        4.按组织形式和处理方式分类:普通文件、目录文件、特殊文件

4.1.2 文件元数据和索引节点

1.文件元数据
        文件元数据(metadata)又称文件属性,是操作系统为文件配置的控制和管理信息,其目的是为方便系统和用户对文件的管理、保护和使用。文件元数据存储在文件控制块中,而不是文件本身内部数据中。文件元数据因操作系统而异,但通常包含三类信息,即基本信息、存取控制信息及使用信息,如表4.2所示。

2.文件控制块
        文件控制块(File Control Block, FCB)是操作系统为每个文件建立的唯一数据结构,用于管理、控制和按名存取文件,其中包含了全部文件属性。一个文件由两部分组成:FCB 和文件数据。文件和 FCB 一一对应。
        有了 FCB 就可以方便地实现文件的按名存取。每当创建一个文件时,系统就要为其建立一个 FCB,用来记录文件的属性信息;每当存取文件时,先找到其 FCB,再通过 FCB 内的属性找到文件的物理位置就能存取。
        FCB 的有序集合称为文件目录,即一个 FCB 就是一个文件目录项。目录也是以文件的形式存储,称为目录文件。

2.文件目录是( )的有序集合。
A. 文件控制块
B. 文件信息
C. 文件名
D. 文件属性

2.【参考答案】 A
【解析】 文件目录是文件控制块的有序集合,文件控制块中存储了文件信息,A 选项正确。

如表 4.3 为一个可能的目录文件示例。

3. 索引节点

        操作系统在查找文件时只使用文件名进行查找,仅当文件名匹配时才会读取文件的其他信息。因此在有的系统中(如 UNIX 系统)采用了文件名和文件描述信息分开存放的办法,即将文件描述信息放到一个单独的数据结构中,这个数据结构被称为索引节点。
        索引节点(inode),简称 i 节点,是一种记录了文件描述信息的数据结构,是文件的唯一标识,和文件一一对应。除了文件名以外的所有文件信息,都存在索引节点中。表 4.4 表示 UNIX 系统的文件目录结构。

        【提示】 文件控制块和索引节点不同,一般文件控制块包括文件的全部属性,而索引节点包括除了文件名的全部属性。但在 UNIX 系统中,文件控制块中仅包括文件名和指向索引节点的指针两部分,其中,文件名占 14B,索引节点指针占 2B。

4.UNIX 系统中,下列正确描述文件目录和索引结点概念的是( )。
A. 文件目录和索引结点相同
B. 文件目录和索引结点无联系
C. 文件目录中有文件的控制信息
D. 索引结点中有文件的控制信息

4.【参考答案】 D
【解析】 索引节点是为了减少查找文件的访盘次数而从文件目录项中分离出来的,A、B 选项错误;文件目录中包括文件名和指向索引节点的指针,不包括文件控制信息,C 选项错误。索引节点包括了除文件名以外的文件信息,其中也包括文件控制信息,D 选项正确。

        索引节点的引入可提高文件的查找速度。例如,假设某文件系统磁盘块大小为 1KB,每个文件目录项占 64B,此时每个盘块仅能存放 16 个目录项。若某目录下有 64 个目录项,则该目录占用四个盘块,查找时采用顺序查找,查找一次目录需平均访盘 2 次;若采用索引节点,设索引节点大小 16B,每个盘块能存放 64 个目录项,此时只占用一个盘块,查找一次目录只需访盘 1 次。

3.有些操作系统采用了文件名和文件描述信息分开的办法,即将文件描述信息记录到索引节点中,这样做的好处是( )。
A. 减少读文件时的访盘次数
B. 减少写文件时的访盘次数
C. 减少查找文件时的访盘次数
D. 减少复制文件时的访盘次数

3.【参考答案】 C
【解析】 引入索引节点后,磁盘的盘块中可以存放更多目录项,可减少查找文件的访盘次数,C 选项正确。

        【举例】 假设有一个老图书馆里面有一本登记簿,上面每一页记录一本书的信息和存放位置,通过书名检索目录可以得到书籍信息所在的页码,再通过书籍信息页可以找到书籍位置。登记簿的目录就可以看作文件控制块,书籍信息页可以看作索引节点。
        索引节点的优点:可以有效提升文件检索的速度,方便文件共享。
        索引节点的两个状态:一般情况下,索引节点存储在磁盘上,这种状态下的索引节点称为磁盘索引节点;当文件被打开时,该文件对应的磁盘索引节点会被复制并装入内存,这种状态下的索引节点称为内存索引节点。内存索引节点不但拥有磁盘索引节点记录的所有信息,还增加了部分内容。

(1) 磁盘索引节点包含的信息

        文件主标识符。拥有该文件的个人或小组的标识符。

        文件类型。包括普通文件、目录文件或特别文件。

        文件存取权限。各类用户对该文件的存取权限。

        文件物理地址。每个索引结点中含有 13 个地址项,即 iaddr (0) - iaddr (12),它们以直接或间接方式给出数据文件所在盘块的编号。

        文件长度。以字节为单位的文件长度。

        文件链接计数。在本文件系统中所有指向该文件的文件名的指针计数。

        文件存取时间。本文件最近被进程存取的时间、最近被修改的时间及索引节点最近被修改的时间。

(2) 内存索引节点增加的信息

        索引节点编号。用于标识内存索引节点。

        状态。指示 i 节点是否上锁或被修改。

        访问计数。每当有一进程要访问此 i 节点时,将访问计数加 1,访问结束减 1。

        逻辑设备号。文件所属文件系统的逻辑设备号。

        链接指针。设置分别指向空闲链表和散列队列的指针。

4.1.3 文件的操作

        用户可以通过文件系统提供的系统调用对文件进行操作,包括建立、删除、打开、关闭、读、写等。在介绍文件的操作前,首先介绍两个重要数据结构 —— 系统打开文件表和用户打开文件表。

        (1) 系统打开文件表(open file table)是一个维护所有进程打开文件的系统级描述符表,整个系统只有一张,表项中描述了一个打开文件的所有信息。系统打开文件表中部分内容如下:

        ·索引节点指针:指向文件的索引节点的指针。

        ·文件偏移量:表示文件上次读写位置,又称读写指针。

        ·文件访问模式:如只读模式、只写模式或读写模式。

        ·文件打开计数:表示当前有多少个进程打开了这个文件。

        (2) 文件描述符表(用户打开文件表)是一个用来记录用户进程当前打开的所有文件的进程级描述符表,每个用户进程分别设置一张,如图 4.2 所示,其存储在 PCB 中,又称用户打开文件表。表项索引值为文件描述符(file descriptor, fd),是一个非负整数,每个文件描述符对应一个指针,指针指向系统打开文件表的一个表项。

下面以 Linux 系统为例,介绍文件系统调用的种类、功能和实现。

1. 建立文件
        建立文件的系统调用格式为:fd = create (filename, mode),其中 filename 是一个存储了文件路径的字符串;mode 是文件存取权限,如可读、可写、可执行等,创建成功后返回文件描述符 fd。
建立文件的操作如下:

        (1)先在文件系统中为文件找到空间,然后为新文件分配磁盘索引节点、内存索引节点和 FCB,并把文件名和磁盘索引节点指针组成新的目录项,记录到当前目录的目录文件中;

        (2)设置文件内存索引节点的信息;

        (3)为新文件分配用户打开文件表项和系统打开文件表项,为后者设置初值,最后返回文件描述符 fd。
        上述步骤中兼有 “打开” 文件的功能,因此,创建文件后无需再次打开文件。

2. 删除文件
        删除文件的系统调用格式为:unlink (filename),其中参数的含义和 create () 中的相同,调用成功返回 0,失败返回 - 1。删除文件时,应删除文件目录中相应的目录项,然后把该文件占用的存储空间释放(包括文件控制块、缓冲区等)。删除文件要求用户对文件目录具有 “写” 操作权。
        【提示】 为什么 Unix 下删除文件的系统调用名叫 unlink 而非 delete 呢?这可以参考本章后半部分文件共享中硬链接的知识学习。Unix 中,每个 inode 可以与多个文件名相对应,相当于每个文件都可以有多个硬链接,unlink 的作用是删除某一个硬链接,全部硬链接删除时操作系统才会回收文件所占用的空间。

8.下列选项中,( )不是删除文件所需要完成的工作。
A. 释放文件所占用的存储空间
B. 在目录中删除该文件相应的目录项,即文件控制块
C. 若文件为共享文件,还要对共享设置进行处理
D. 对文件原存储单元全部清零

8.【参考答案】 D
【解析】 删除文件时不一定要清除文件存储单元的全部内容,有些操作系统只是对该文件所在盘块作 “删除” 标记,这样当用户因误操作删除文件时,可以进行恢复,选择 D 选项。A、B、C 选项,释放文件所占用的存储空间、在目录中删除该文件相应的目录项,即文件控制块、若文件为共享文件,还要对共享设置进行处理,均为删除文件所需要完成的工作。

3. 打开文件
        打开文件系统调用的格式为:fd = open (filename, mode),其中 mode 表示文件打开方式,其余参数的含义和 create () 中的相同。打开文件后,文件的读写和关闭都不再以文件路径为参数,而是以打开文件返回的操作标识符 fd 为参数,即必须打开文件后,才可以进行文件读写和关闭操作。

5.文件系统中使用 open () 系统调用打开文件的基本操作是( )。
A. 把文件信息从辅存读到内存
B. 把文件的控制管理信息从辅存读到内存
C. 把文件的 FAT 表信息从辅存读到内存
D. 把磁盘的超级块从辅存读到内存

5.【参考答案】 B
        【解析】 打开文件是将文件的控制管理信息从辅存读到内存,即将文件的磁盘索引节点复制到内存索引节点中,打开文件时无需读入文件具体数据,B 选项正确。

打开文件的操作如下:

        (1)检索目录,要求打开的文件必须已经被创建,因此应在文件目录中存在对应的表项,否则会出错。操作系统根据文件名查找文件,查找到指定文件后,就将其磁盘索引节点复制到内存索引节点表中,将其 FCB 调入内存;如果该文件已被其他进程打开,内存索引节点表中已有此文件的索引节点,则无需进行复制索引节点的操作,仅需把内存索引节点的引用计数加 1 即可。

51.【2014】在一个文件被用户进程首次打开的过程中,操作系统需做的是( )。
A. 将文件内容读到内存中
B. 将文件控制块读到内存中
C. 修改文件控制块中的读写权限
D. 将文件的数据缓冲区首指针返回给用户进程

51.【参考答案】 B
【解析】 文件被用户进程首次打开,即执行了 open 系统调用,open 系统调用首先根据传入的文件名查找相应文件,找到后将文件的 FCB 调入内存。进程希望获取文件内容时,操作系统才会将文件内容读入内存。

        (2)比较参数 mode 和内存索引节点中在建立文件时所记录的访问权限,如果非法,则此次打开操作失败;

        (3)打开合法时,为文件分配用户打开文件表项和系统打开文件表项,并为后者设置初值,通过指针建立表项与内存索引结点之间的联系,再把文件描述符 fd 返回给调用者。
        关于打开文件操作需要注意的是,不管是同一个进程还是不同进程,每打开一次文件,即调用一次 open (),都会产生一个系统打开文件表项,但每个表项的索引节点指针相同。如图 4.2 所示,进程 A 和进程 B 分别对同一个文件调用一次 open (),两个进程的文件描述符各产生一个表项,即进程 A 的 fd3 和进程 B 的 fd5,两个表项分别指向不同的系统打开文件表项 0 和 80,但这两个系统打开文件表项都指向索引节点表中的同一个条目 1046,即指向同一个文件。这两个进程的读写指针是不同的,即可以在不同位置读写。
        【拓展】 同一进程可以通过 dup () 或 dup2 () 系统调用产生两个用户打开文件表项,指向同一系统打开文件表项。父进程可以通过 fork () 系统调用产生子进程,使得不同进程的用户打开文件表项可以指向同一系统打开文件表项。若指向同一系统打开文件表项,可以共享读写指针,反之则不能共享。
        打开文件不会将文件内容调入内存,只会将 FCB 写入内存,只有进程希望获取文件内容时才会从磁盘读取文件内容。
        【拓展】 多个进程同时打开同一个文件时,可以任意对文件进行读写操作,操作系统并不保证写的互斥性,进程可以通过系统调用对文件加锁,从而实现对文件内容的保护。


【例 4.1】 若多个进程共享同一个文件 F,则下列叙述中,正确的是( )。
A. 各进程只能用 “读” 方式打开文件 F
B. 在系统打开文件表中仅有一个表项包含 F 的属性
C. 各进程的用户打开文件表中关于 F 的表项内容相同
D. 进程关闭 F 时,系统删除 F 在系统打开文件表中的表项
        解:本题为 2020 年统考 408 真题,此题和上面介绍的文件操作情况有出入,推测题目可能参照了 Linux 系统外的操作系统实现,或题目本身不严谨。
        多个进程共享同一个文件,存在多种情况,若进程通过 fork () 创建子进程共享文件,指向的是同一个系统打开文件表项,若两个进程分别通过 open () 打开文件,指向的是不同系统打开文件表项。A 选项,多个进程可以同时以 “读” 或 “写” 的方式打开文件,操作系统并不保证写的互斥性;D 选项,系统打开文件表项可能被其他进程共享,某一进程关闭 F,要先将表项中打开计数减 1,若减 1 后为 0 才能删除。
        B、C 选项不够严谨并且相互矛盾,但可以设想:多个进程共享文件,每个进程应当希望独立的读写文件,因此是不能共享读写指针的,C 选项中各进程的用户打开文件表项应当指向不同的系统打开文件表项,从而达到独立读写的目的。使用排除法,这道题只能选 B 选项。

4. 关闭文件
        关闭文件的系统调用格式为:close (fd),fd 表示文件描述符,调用成功返回 0,失败返回 - 1。关闭文件操作如下:

        (1)根据 fd 找到用户打开文件表项,再找到系统打开文件表项,将该文件从用户打开文件表的条目上删除;

        (2)把对应系统打开文件表项中的文件打开计数减 1,如果其值不为 0,说明还有其他进程正在共享它,不用释放此表项直接返回,否则释放此表项并找到相应的内存索引节点;

        (3)把内存索引节点中引用计数减 1,如果其值不为 0,说明还有其他进程正在使用此文件,直接返回,否则将内存索引节点复制到相应的磁盘索引节点中,释放此内存索引节点。

6.文件系统中使用 close () 系统调用关闭文件的基本操作是( )。
A. 把文件的最新信息从内存写入磁盘
B. 把文件当前的控制信息从内存写入磁盘
C. 把位示图从内存写回磁盘
D. 把超级块的当前信息从内存写回磁盘

6.【参考答案】 B
【解析】 关闭文件是指将文件当前的控制信息从内存写入磁盘,需要注意的是关闭文件并不意味着将文件数据写入磁盘,写文件操作才会写入磁盘(不考虑延迟写),B 选项正确。

        【提示】 关闭文件以及读、写文件之前需要先打开文件,获取文件描述符,关闭和读、写文件使用文件描述符而不是文件路径名作为参数。
        【拓展】 系统打开文件表中文件打开计数和索引节点中的引用计数不同,前者反映多少进程通过同一个读写指针共享文件,后者反映多少进程共享文件。实际做题时,可以看情况考虑,一般不加区分。

5. 读文件
        读文件的系统调用格式为:n = read (fd, buf, count),表示从文件描述符 fd 表示的文件中的当前文件偏移量开始,读取 count 个字节的数据,并把它们放到数据区 buf 中,返回实际读入的字节数,它可能会小于请求的字节数,因为一旦读到文件末尾系统调用就返回。
        在读文件时,首先检查操作的合法性,如果合法,按内存索引节点中存放的文件物理地址去寻找文件,从当前的文件偏移量处开始读取所要求的字节数到块设备缓冲区中,然后送到 buf 指向的用户数据区。

7.正确的读文件次序是( )。
I. 向设备驱动程序发出 I/O 请求,完成数据交换工作
II. 按存取控制说明检查访问的合法性
III. 根据目录项中该文件的逻辑和物理组织形式,将逻辑记录号转换成物理块号
IV. 按文件名在活动文件表中找到该文件的目录项
A. II、IV、III、I
B. IV、II、III、I
C. IV、III、II、I
D. II、IV、I、III

7.【参考答案】 B
【解析】 读文件应先根据文件名找到该文件的目录项,然后检验访问的合法性,确认访问合法后找到文件物理地址,最后发出 I/O 请求读文件。(注:read 系统调用的参数是文件描述符,此处不考虑)正确的读文件次序是 IV、II、III、I,选择 B 选项。

6. 写文件
        写文件的系统调用格式为:n = write (fd, buf, count),表示把缓冲区 buf 的前 count 个字节写入 fd 表示的文件中的当前文件偏移量开始的位置,成功时返回写入的字节数,错误时返回 - 1。

4.1.4 文件的保护

        文件的保护是指操作系统提供的对文件的保护机制,使得文件:①拒绝来自未经授权的用户和组的访问;②限制授权用户和组的访问类型。文件保护可通过限制文件的访问类型和访问控制等方式实现。
        【拓展】 为了防止系统故障对文件的破坏,可以采用建立副本和定时转储的方法来保护文件。建立副本是指把同一个文件存放到多个存储介质上,当某个存储介质上的文件被破坏时,可以用其他存储介质上的副本来替换。定时转储是指定时地把文件转储到其他存储介质上,当文件发生故障时,就用转储的文件来复原,这样仅丢失了上次转储以来新修改或增加的信息。

1.访问类型
        文件的访问类型用来控制不同用户对文件的读、写、执行等权限,可加以控制的访问类型主要有以下几种:

        1.读取:从文件中读取。

        2.写入:向文件中写入。

        3.执行:加载文件到内存并执行它。

        4.附加:在文件末尾写入新的信息。

        5.删除:删除文件,并释放空间以重复使用。

        6.列表:列出文件的名称和属性。
        其他访问类型,如文件的重命名、复制、编辑等也可以加以控制,这些功能可以通过调用低级系统调用实现,如复制文件可以通过一系列读写请求实现。因此,具有读访问权限的用户也可以对文件进行复制、打印等。

2.访问控制
        访问控制是指对访问者向受保护资源进行访问操作的控制管理。在文件系统中,通常采用访问控制矩阵、访问控制表、访问权限表以及口令和密码等方式实现访问控制。

(1) 访问控制表
        访问控制最常用的是访问控制表(Access - Control List, ACL),其原理为:为每个文件和目录配置一个访问控制表,表中记录每个用户的名称及其允许的访问类型,如读取、写入、执行等。当用户请求访问特定文件时,操作系统会首先检查访问控制表中当前用户的访问权限。如果该用户属于可访问的,则允许访问;否则会发生保护冲突,并且用户被拒绝访问。

10.对一个文件的访问,常由( )共同限制。
A. 用户访问权限和文件属性
B. 用户访问权限和用户优先级
C. 优先级和文件属性
D. 文件属性和口令

10.【参考答案】 A
【解析】 用户访问权限是指用户有没有权限访问该文件,文件属性即保存在 FCB 中的对文件访问的控制信息,用户访问权限和文件属性共同决定了一个用户能不能访问该文件和访问文件的类型,A 选项正确。用户优先级是指多个用户同时请求该文件时的访问次序,但是用户优先级和用户访问权限无关,用户可能有很高的优先级,但是没有访问权限,B、C 错误。D 选项,文件不一定设置口令,且文件的访问还需由用户访问权限决定。

        访问控制表的优点是可以对每个单一用户设定其所允许的访问类型,能够进行复杂的访问方法。缺点是系统用户量大、控制功能多导致维护困难,长度不可预计。
采用精简的访问列表可以解决访问控制表的问题。精简的访问列表中采用三种用户类型:

        1.所有者:创建文件的用户。

        2.组:共享文件且需要类似访问的一组用户。

        3.其他:系统内的所有其他用户。


        精简的访问列表仅需三个域即可列出三类用户的访问权限,此时只需要 9 位二进制数就能描述文件的权限。创建文件时,系统将文件所有者的名字、所属组名记录在文件 FCB 中。用户如果是所有者,按所有者权限访问文件,否则若用户和所有者属于同一组,按同组权限访问,否则按其他用户权限访问。现代操作系统常用的方法是,将访问控制表与精简的访问列表结合使用。
        【举例】 Solaris 系统默认使用三种类型的访问,但需要更细粒度的访问控制时,可以为特定文件和目录添加访问控制表。

(2) 口令和密码
        口令和密码是另外两种访问控制方法,都是防止文件被未授权用户窃取,并没有控制对文件的访问类型。

        口令是由用户在建立文件时所设定的字符串,其保存在文件元数据中。任何用户请求访问时,都必须提供正确的口令,否则无法访问文件。其优点是简单、便于储存,缺点是其直接存在系统内部且是静态的,易被破解。

        密码是一种对文件加密的算法,是指将文件中的数据通过一种变换手段,变为除有密钥的人以外其他人所不能读懂的信息编码。其优点是比口令安全,保密性强,缺点是加密和解密需要花费时间。

9.在文件系统中,以下不属于文件保护的方法有( )。
A. 口令
B. 用户权限表
C. 存取控制
D. 读写之后使用关闭命令

9.【参考答案】 D
【解析】 A、B、C 选项,口令、用户权限表和存取控制都属于文件保护方法,读写之后使用关闭命令不属于文件保护方法,选择 D 选项。

        【提示】 我们俗称的 “密码” 其实是口令,而密码实际指的是加密算法。

4.1.5 文件的逻辑结构

        文件的逻辑结构是指从用户的角度出发所观察到的文件的组织形式,它独立于文件的物理特性。从用户的角度而言,文件的逻辑记录是进行存取操作的基本单位。

12.逻辑文件的组织形式是由( )决定的。
A. 存储介质的特性
B. 文件系统的管理方式
C. 内存管理方式
D. 用户

12.【参考答案】 D
【解析】 文件的逻辑结构是指从用户的角度出发所观察到的文件的组织形式,它独立于文件的物理特性。逻辑文件的组织形式由用户决定,D 选项正确。

        文件的逻辑结构按是否有结构,可以分为两大类:一是无结构文件,这是指由字符流 / 字节流构成的文件,故又称流式文件;二是有结构文件,这是指由记录构成的文件,故又称记录式文件。按文件的组织方式,有结构文件又可以分为顺序文件、索引文件和索引顺序文件。

11.文件的逻辑组织中,下列文件中( )是记录文件。
A. 堆文件
B. 索引文件
C. 分区文件
D. 链接文件

11.【参考答案】 B
【解析】 索引文件是一种记录文件,其记录为一条条索引,B 选项正确。A、C、D 选项,堆文件、分区文件、链接文件均为无结构文件。

1.无结构文件(流式文件)


        无结构文件中的内容是一串字符流 / 字节流,又称流式文件,其长度以字节为单位,通过读、写指针来指出下一个要访问的字符。

13.无结构文件的含义是( )。
A. 变长记录的文件
B. 索引文件
C. 流式文件
D. 索引顺序文件

13.【参考答案】 C
【解析】 无结构文件中的内容是一串字符流 / 字节流,因此无结构文件又称流式文件,C 正确。

        在系统中运行的大量源程序、可执行文件、库函数等,所采用的就是无结构的文件形式。事实上,有许多应用不要求文件内再区分记录,强制分割源程序文件为若干记录只会带来操作复杂、开销加大等缺点,因而,为了简化系统,大多数现代操作系统如 Linux 系统只提供流式文件,即使是有结构文件,也被视为流式文件,系统不对文件进行格式处理和解释,对文件内容的具体解释方式由应用程序决定。

2.有结构文件(记录式文件)


        有结构文件通常由若干个记录组成,又称记录式文件。记录是文件内独立的最小信息单位。例如学生信息表中,每个学生的信息是一条记录。记录的长度可分为定长和不定长两类:

        (1) 定长记录:指文件中所有记录的长度都是相同的,同时所有数据项的相对位置也是固定的。定长记录处理方便,易于控制,在数据处理中被广泛采用。

        (2) 变长记录:指文件中各记录的长度不相同。有两种情况会造成变长记录:包含一个或多个可变长度的数据项,包含可变数目的定长数据项。对变长记录的检索速度慢,也不便于对于文件处理和修改。但变长记录可以节省存储空间,因为定长记录的长度为所有记录的最大长度,变长记录的长度则可变。例如学生信息里有家庭住址属性,由于每个学生的详细住址不一样,所以家庭住址数据项长度也不确定,这就是个变长记录。
        按照文件的组织方式,可把有结构文件分为四类:顺序文件、索引文件、索引顺序文件和直接文件。

34.关于文件,下列说法正确的是( )。
A. 文件的访问控制信息存储在其父目录中
B. 流式文件、记录式文件、顺序文件、索引文件都属于文件逻辑结构类型
C. 文件的物理结构有顺序式、链接式以及索引式,FAT 技术采用的是单级索引式
D. 多级索引相对于单级索引,可以加快文件的查找速度

34.【参考答案】 B
【解析】 文件的访问控制信息存放在其文件控制块(FCB)中,A 选项错误;文件的逻辑结构分为两类,一类是无结构文件,其中包括流式文件,一类是有结构文件,其中包括记录式文件、顺序文件、索引文件、索引顺序文件,B 选项正确;文件的物理结构有顺序式、链接式、索引式,FAT 技术采用的是链接式,C 选项错误;多级索引是为了解决单级索引无法表示大文件的问题,无法加快文件查找速度,D 选项错误。

        【提示】 文件的逻辑结构和数据结构的逻辑结构一一对应,不同逻辑结构的查找方法也和数据结构中查找方法相关,本节可以和数据结构的查找章节对比学习。

(1) 顺序文件


        顺序文件,指由记录按某种顺序排列所形成的文件,可以顺序存储或以链表形式存储。顺序文件中的记录通常是定长的。顺序文件按排列方式可分为串结构和顺序结构两种情况:

        1.串结构。串结构文件中的记录按存入时间先后进行排序,记录顺序与关键字无关。检索时必须从头开始逐个查找,效率不高。

        2.顺序结构。顺序结构文件中的记录按用户指定的关键字排序检索时可以采用折半查找算法进行查找,效率较高。
        【提示】 对于顺序文件的物理存储情况,若是顺序存储的文件,则逻辑相邻物理上也相邻;若是链式存储的文件,逻辑相邻物理上不一定相邻。
        顺序文件的优点:对于批量存取的场合,即每次对文件读或写一大批记录时,顺序文件存取效率最高;此外,对于磁带这类顺序存储设备,也只有顺序文件才能被存储并能有效地工作。

19.下述文件中适合于磁带存储的是( )。
A. 顺序文件
B. 索引文件
C. 散列文件
D. 多关键字文件

19.【参考答案】 A
【解析】 磁带本身的性质决定其只能采用顺序存储结构,因此只有顺序文件适合于磁带存储,A 选项正确。

        顺序文件的缺点:对于交互应用的场合,查找或修改单个记录的效率很差;增加或删除记录比较困难。

(2) 索引文件


        对于顺序文件,定长记录的文件可以经过简单计算进行随机查找,但变长记录的文件则必须从第一个记录查起,一直顺序查找到目标记录为止,较为耗时。如果将变长记录文件中的记录提取出来,建立一张索引表,查找速度就会变快,由此提出了索引文件的概念。
        【提示】 顺序查找是指对记录进行依次查找,直到找到其所在地址,随机查找又称直接查找,可根据记录直接找到其所在地址。


        如图 4.3 所示,索引文件是指除了文件本身外,另建立一张索引表,索引表和主文件一起构成的文件。其中索引表记录文件中每一条记录的指针和记录的长度,按关键字排序,因此其本身也是一个定长记录的顺序文件。
        索引文件的优点:把对变长记录顺序文件的顺序查找转变为对定长记录索引文件的随机查找,从而加快查找速度。
        索引文件的缺点:由于需要配置索引表,且每个记录都要有一个索引项,增加了存储开销。

16.下列关于索引表的叙述中,( )是错误的。
A. 索引表中每条记录的索引项只能有一个
B. 对索引文件存取时,必须先查找索引表
C. 索引表中含有索引文件的物理地址
D. 建立索引的目的之一是减少存储空间

16.【参考答案】 D
【解析】 建立索引的目的是提高查找速度,索引文件反而会增加存储空间,选择 D 选项。

        【举例】 索引文件通常用于对信息的及时性要求比较严格、且很少会对所有数据进行处理的应用程序中,例如航空公司的订票系统和商品库存控制系统。

(3) 索引顺序文件

        由于顺序文件不能随机查找,而索引文件中建立索引表的开销较大,因此提出了索引顺序文件的概念。索引顺序文件中,对文件记录进行分组,然后为每组的第一条记录在索引表中建立一个索引项。其中,分组的组间关键字必须有序,组内关键字可以是无序的。
        查找索引顺序文件时,首先根据用户提供的关键字以及某种算法(如折半查找)查找索引表,找到记录所在的组,再进行组内顺序查找。

        如图 4.4 所示,文件中包含姓名和其他属性,姓名为关键字,按姓名首字母进行分组,将每组第一个姓名和其位置指针放入索引表。查找时,先通过索引表找到所在的组,再在组内顺序查找。

15.索引顺序文件的正确描述( )。
A. 按索引值查找
B. 按记录关键字顺序查找
C. 既要按索引值查找又要按记录关键字顺序查找
D. 利用关键字找到该记录组中第一个记录的表项,然后,顺序查找所要求的记录

15.【参考答案】 D
【解析】 索引顺序文件分组的组间关键字必须有序,组内关键字可以是无序的,查找时首先根据用户提供的关键字以及某种算法(如折半查找算法)查找索引表,找到记录所在的组,再进行组内顺序查找,D 选项正确。


【提示】 索引顺序文件的查找相当于数据结构中的分块查找。
        索引顺序文件分组的最好情况是,N 条记录分为√N 组,每组有√N 条记录。顺序查找索引表平均需查找√N/2 次,再在组内顺序查找也平均需找√N/2 次,即共需查找√N 次。若采用折半查找算法查找索引表,查找索引表平均需查找 (log₂N)/2 次,共需查找 (log₂N + √N)/2 次。
        索引顺序文件的优点:极大地减少了访问单条记录的时间,同时保留了文件的顺序特性。缺点:配置索引表同样需要增加存储开销。

(4) 直接文件与散列文件(Hash File)

        上述几种文件结构都需要根据给定的记录对文件进行检索,以找到指定记录的地址,而直接文件可以根据给定的关键字直接获得指定记录的物理地址,换言之,关键字本身就决定了记录的物理地址。
        散列文件属于直接文件中的一种,它利用 Hash 函数(或称散列函数)将关键字转换为相应记录的地址。
        直接文件常在要求快速访问时使用,且记录的长度是固定的,通常一次只访问一条记录,例如目录、价格表等。
        各种逻辑结构文件的相关总结如表 4.6 所示。

4.1.6 文件的物理结构

        文件的物理结构是指操作系统将文件存储在外存上所形成的一种存储组织形式,是用户不可见的,包括文件分配方式和对磁盘空闲块的管理,后者将在 4.3.2 小节介绍。

17.物理文件的组织方式是由( )确定的。
A. 应用程序
B. 主存容量
C. 外存容量
D. 操作系统

17.【参考答案】 D
【解析】 文件的物理结构是操作系统设计人员根据存储介质的特性确定的,如磁带只能实现顺序结构,确定以后由操作系统进行管理,选择 D 选项。

        文件分配方式指的是文件物理空间的分配,即如何为文件分配磁盘块。常用的文件分配方法有三种:连续分配、链接分配和索引分配。

1.连续分配


        连续分配为每个文件分配一组相邻的磁盘块,文件中的逻辑记录顺序和物理记录顺序完全一致,由此所形成的文件结构称为顺序文件结构。
        【提示】 连续分配方式和数据结构中的顺序表物理结构类似,两者的增删改查等操作具有很强的相似性,可以对比学习。
        文件的连续分配可用首块磁盘地址和文件所占盘块数来定义。文件的目录项中记录该文件第一个记录所在的盘块号和文件长度。如果文件占 n 块,并从位置 b 开始,则文件将占有块 b, b + 1, b + 2, …, b + n - 1,如果要访问文件的第 i 块,可以直接访问块 b + i - 1。因此,连续分配支持顺序访问和随机访问。

20.文件系统中若文件的物理结构采用连续结构,则文件控制块(FCB)中有关文件的物理位置的信息应包括( )。
I. 首块地址
II. 文件长度
III. 索引表地址
A. 仅 I
B. I、II
C. II、III
D. I、III

20.【参考答案】 B
        【解析】 连续结构的文件可用首块磁盘地址和文件所占盘块数来定义。每个文件的 FCB 中应记录该文件第一个记录所在的盘块号和文件长度,I、II 正确,选择 B 选项。

        【提示】 顺序访问是指对记录进行依次查找,直到找到其所在地址进行访问;随机访问又称直接访问,指程序按任意顺序访问记录。
        如图 4.5 所示,假定记录和盘块的大小相同。文件 abc 的第一个盘块号是 2,文件长度为 3,因此在盘块号为 2、3、4 的三个盘块中存放文件 abc 的数据。


        对连续分配的文件进行插入操作时,若文件前后均有足够的存储空间,假定插入第 i 条记录,可以将前 i - 1 条记录向前移,也可以将第 i 条记录包括之后的记录向后移,然后插入第 i 条记录。删除时同理。

29.一个文件有 100 个盘块(数据块),假设管理文件所必须的元数据(如文件控制块、文件索引块等)都已经调入内存。如果需要在文件的第 45 个盘块后面插入数据,当该文件采用( )物理结构时开销最大。
A. 顺序文件
B. 链接文件
C. 一级索引文件
D. 多级索引文件

29.【参考答案】 A
【解析】 链接文件和索引文件插入数据时,只需修改指针即可,而连续文件插入数据,需要将前 45 个盘块整体前移、或将后 55 个盘块整体后移,开销最大,选择 A 选项。

连续分配的优点:

        (1) 支持顺序访问和直接访问,对于顺序文件,可以根据文件的逻辑地址直接找到物理地址。

14.文件的顺序存取是( )。
A. 按终端号依次存取
B. 按文件的逻辑号逐一存取
C. 按物理块号依次存取
D. 按文件逻辑记录大小逐一存取

14.【参考答案】 B
【解析】 文件的顺序存取是指按照逻辑顺序依次存取,B 选项正确。C 选项错误,文件的物理块号不一定相邻。

        (2) 顺序读 / 写时速度最快,连续分配的文件,其所占用的盘块可能位于同一条或相邻磁道上,磁头在磁道上移动的距离少,访问速度快。
连续分配的缺点:

        (1) 必须为一个文件分配连续的存储空间,由内存的连续分配可知,反复增删文件后会产生外部碎片 (和内存管理分配方式中的碎片相似)。

21.下列文件的物理结构中,可能带来外部碎片问题的是( )。
A. 隐式链接
B. 顺序结构
C. 索引结构
D. 显式链接

21.【参考答案】 B
【解析】 顺序结构的文件必须为其分配连续的存储空间,反复增删文件后会产生外部碎片,选择 B 选项。

        (2) 建立文件之前需要预先确定文件的长度,对于动态增长的文件,很难为其分配空间。

        (3) 不能灵活地删除和插入记录,例如若磁盘需要拓展时后面没有相邻的空闲盘块,则需要将文件整体迁移到一组大小合适的连续磁盘块处。
        【提示】 考试中说的顺序存储一般是指物理上的顺序存储。

2.链接分配


        链接分配为文件分配多个不连续的盘块,通过指针将这些盘块链接成一个链表,由此所形成的文件结构称为链接文件结构。
链接分配的优点:

        (1) 消除了磁盘的外部碎片,提高了外存的利用率。

        (2) 插入、删除和修改记录都非常容易。

        (3) 创建文件时无需说明文件的大小,文件可以动态增长。

31.下列有关文件组织管理的描述,不正确的是( )。
A. 记录是对文件进行存取操作的单位,一个文件中诸记录的长度可以不等
B. 采用链接块方式分配的文件,它的物理块必须顺序排列
C. 创建一个文件时,可以分配连续的区域,也可以分配不连续的物理块
D. Hash 结构文件的优点是能够实现物理块的动态分配和回收

31.【参考答案】 B
【解析】 链接分配是一种离散分配方式,为文件分配多个离散的盘块,通过指针将这些盘块链接成一个链表,因此链接文件的物理块可以不是顺序排列,选择 B 选项。

根据指针位置的不同,链接分配可分为隐式链接和显式链接两种形式。

①隐式链接

        采用隐式链接时,文件的目录项记录指向文件第一个盘块和最后一个盘块的指针,除最后一个盘块外,每个盘块都含有指向下一个盘块的指针。
        每次访问文件的其中一个盘块时,都需要从第一个盘块开始逐盘块读出下一个盘块的指针,直到找到所要访问的盘块。

26.设某文件物理存储方式为链接方式,该文件由 5 个逻辑记录组成,每个逻辑记录的大小与磁盘块的大小相等,均为 512B,并依次存放在 70,121,55,90,63 号磁盘块上。若要存取文件的第 2061 逻辑字节处的信息,则应该访问( )号磁盘块。
A. 4
B. 55
C. 90
D. 63

26.【参考答案】 D
【解析】 2061=512×4+13,要访问的字节在第 5 个盘块上,即 63 号盘块,选择 D 选项。

        如图 4.6 所示,目录项中记录了文件 abc 的开始盘块号是 8,结束盘块号是 24。盘块 8 记录了第二个盘块号指针 15,盘块 15 中记录了第三个盘块号指针 2,由此类推,直到盘块 24 中记录了 - 1,代表文件结束。
        对隐式链接分配的文件进行插入操作时,假定插入第 i 条记录,每条记录占一个盘块,需要为记录分配一个新盘块,依次找到前 i - 1 个盘块,将第 i - 1 块的下址指针赋给新盘块,再修改第 i - 1 块的下址指针,使其指向新盘块。

28.某文件共有 4 个记录L0~L3,采用链接存储结构,每个记录及链接指针占用一个磁盘块,主存储器中的磁盘缓冲区的大小与磁盘块的大小相等。为了在L2​和L3​之间插入一个记录L2′​(已经在内存中),需要进行的磁盘操作有( )。
A. 4 次读盘和 2 次写盘
B. 4 次读盘和 1 次写盘
C. 3 次读盘和 2 次写盘
D. 3 次读盘和 1 次写盘

28.【参考答案】 C
【解析】 在 L2​ 和 L3​ 之间插入记录 L2′​,需要先找到 L2​,需要从第一块盘块开始读取,依次找到下一块的位置,依次读取 L0​、L1​、L2​ 所在盘块,共 3 次读盘,然后为记录 L2′​ 分配新盘块,将 L2​ 盘块的下址指针赋给新盘块,需要 1 次写盘,再将新盘块的地址写入 L2​ 盘块的下址指针部分,需要 1 次写盘,总共需要 3 次读盘和 2 次写盘,选择 C 选项。

隐式链接的缺点:

        (1) 只适合顺序访问,对于随机(直接)访问极其低效。如果访问第 i 块,就必须从第一块开始读起,总共需要访问磁盘 i 次,速度很慢。

33.不具有直接读写文件任意记录能力的物理结构是( )。
A. 顺序结构
B. 链接结构
C. 索引结构
D. 哈希结构

33.【参考答案】 B
【解析】 不具有直接读写文件任意记录能力即不能够直接存取,链接结构的文件需要依次读取每条记录,才能找到所需记录,选择 B 选项。

18.某文件中共有 3 个记录,每个记录占用 1 个磁盘块,在 1 次读文件的操作中,为了读出最后 1 个记录,不得不读出了其他的 2 个记录。根据这个情况可知这个文件所采用的结构是( )。
A. 顺序结构
B. 索引结构
C. 链接结构
D. 顺序结构或链接结构

18.【参考答案】 C
【解析】 顺序结构和索引结构都可以实现直接存取,即根据记录直接找到所在地址,而隐式链接结构中,为找到下一块物理地址,必须读出上一块盘块。因此这个文件采用的是隐式链接结构,选择 C 选项。

        (2) 指针需要占用一定的磁盘空间。

        (3) 可靠性较差,任何一个指针丢失或损坏,都会导致文件数据丢失。
        为了提高检索速度和减小指针所占用的存储空间,Windows 系统通常将几个扇区组成一个簇(cluster),并按簇而不是扇区来分配文件的物理空间。比如,可以定义一个簇为 4 个连续扇区,在磁盘上仅以簇为单位来操作。这样,指针所占磁盘空间的百分比就要小得多,而且会成倍地减小查找指定扇区的时间。这种方式的代价是增大了内部碎片,且如果一个簇没有完全使用,会比扇区浪费更多空间。
        【拓展】 Windows 中磁盘分配单位叫做簇,Linux 磁盘中分配单位叫做块。两者是相对应的,都是由几个扇区组成的单元。
        【提示】 以簇为单位分配文件时,文件尾部的簇存在内部碎片,两个文件不能共享簇。例如,一个文件仅占了一个簇的一个扇区,这个簇剩下的扇区不能被分配给其他文件。

②显式链接

        为了解决隐式链接访问速率慢的问题,提出了显式链接。显式链接相当于把隐式链接中每个盘块末尾的、指向下一个盘块的指针提取出来,存放在一张链接表中,该表称为文件分配表(File Allocation Table, FAT),一个磁盘中仅设置一张,存放在磁盘固定位置FAT 所有文件共用,开机时将其从磁盘读入内存并常驻内存,因此查找 FAT 的过程是在内存中进行的。

32.采用文件分配表的文件系统所支持的文件的存储结构本质上是( )。
A. 连续结构
B. 索引结构
C. 混合索引结构
D. 链接结构

32.【参考答案】 D
【解析】 文件分配表中包括所有盘块中指向下一块的指针,实际上是一种链接结构,D 正确。

23.12GB 的硬盘,块的大小为 4KB,FAT 应占多少硬盘空间( )。
A. 12MB
B. 7.5MB
C. 9MB
D. 6MB

23.【参考答案】 C
【解析】 12GB 的硬盘可划分磁盘块 12GB/4KB = 3M 块 = 3×2^20块,需用 22 位表示,盘块号位数一般是 8 的整数倍,即用 24 位表示,占 3B,FAT 的长度为 3B×3×2^20=9MB,选择 C。

        【提示】 FAT 的结构和数据结构中的静态链表十分相似,可以类比学习。
        在 FAT 中,按块号索引每个磁盘块,并记录磁盘所在文件的下一块号,最后一块用 - 1 表示, - 2 表示此块空闲(也可用其他特殊数字表示)。文件目录项中记录文件首块的块号,通过首块块号找到文件分配表的相应条目,即可顺序查找文件。
        【提示】 由于 FAT 中用特殊数字表示磁盘块是否空闲,因此也可用于管理空闲磁盘块。
        如图 4.7 所示,文件目录记录了文件 abc 的起始块号 3,在 FAT 中找到 3 的下一盘块号为 7,7 的下一盘块号 4,4 的下一块号为 - 1 代表文件结束,即文件 abc 占三个盘块,依次是 3→7→4。
        显式链接的优点:由于查找记录的过程是在内存中进行的,因而减少了访问磁盘次数,提高了访问速度。
        显式链接的缺点:必须把整个 FAT 放在内存中,对于大容量磁盘,其 FAT 的表项很多,因而内存开销非常大。
        【提示】 FAT 表项占多少位由磁盘总块数决定,通常是字节的整数倍。题目中 FAT16 表示每个表项占 16 位,FAT32 表示每个表项占 32 位。
        【提示】 题中若未指明链接方式,默认为隐式链接。

3.索引分配

        事实上,在打开某个文件时,只需把该文件占用的盘块的编号调入内存即可,完全没有必要将整个 FAT 调入内存。为此,可以将每个文件所对应的盘块号集中地放在一起,在访问到某个文件时,将该文件所对应的盘块号一起调入内存,索引分配就是基于这种想法形成的。
        索引分配为每个文件分配一个存放索引表的磁盘块,称作索引块,把分配给该文件的所有盘块号都记录在该索引块中,索引块的第 i 个条目指向文件的第 i 个块。文件目录项中记录指向索引块的指针。当查找和读取第 i 个块时,采用索引块中的第 i 个条目的指针。


        如图 4.8 所示,文件 abc 的索引块号为 19,而 19 号块中依次记录了这个文件的所有盘块号,即:16→9→1→10→25。
索引分配的优点如下:

        (1) 支持随机访问,可以直接从索引块中读取想要的盘块号。

        (2) 方便文件扩展。

        (3) 不会产生外部碎片。

56.【2020】下列选项中,支持文件长度可变、随机访问的磁盘存储空间分配方式是( )
A. 索引分配
B. 链接分配
C. 连续分配
D. 动态分区分配

56.【参考答案】 A
        【解析】 索引分配支持文件长度可变,只需在索引表中增加一个表项,支持随机访问,因为文件的地址可通过索引表索引,A 正确。链接分配通过指针不断找到下一个盘块的地址直到找到目标盘块,只支持顺序查找,B 错误。连续分配的文件支持随机访问,但是由于文件长度固定,无法随意修改文件长度,如果需要改变文件长度,只能将整个文件移动到一个新开辟的空间,移动大量数据带来极大的开销,C 错误。动态分区分配不是磁盘存储空间分配方式,而是内存管理方式,D 错误。

30.在文件的物理磁盘空间分配方法中,支持直接访问并且不会产生外部碎片的是( )
A. 连续分配
B. 链接分配
C. 索引分配
D. 链接分配和索引分配

30.【参考答案】 C
【解析】 连续分配和索引分配支持直接访问,但连续分配会产生外部碎片,因此只有索引分配符合条件,选择 C 选项。

索引分配的缺点如下:

        (1) 需要系统分配索引块,增加了存储空间的开销,对于只占用一两块的小文件,也需要分配一个完整的索引块。

        (2) 存取文件需要两次访问外存,首先读取索引块,再访问具体的磁盘块,降低了文件的存取速度。
        索引分配方式的问题是:索引块太大的话,因为每个文件都要有一个索引块,浪费空间;索引块太小的话,一个索引块里存储的盘块数目有限,无法支持大文件。
        【提示】 请考生思考以下问题:假设一个磁盘块大小为 1KB,每个索引表项占 8B,则一个磁盘块只能存放 128 个索引,即一个文件最大为 128KB,若文件超出 128KB 该怎么办?

解:当文件超出 128KB 时,可采用以下几种方法来解决:

多级索引

        原理:引入多级索引结构。例如二级索引,先将索引表项存放在一个磁盘块(一级索引块)中,若文件大小超过了一级索引所能表示的范围(本题中一级索引下文件最大为 128KB ),则把指向实际数据块的索引表项分散存放在多个磁盘块中,而一级索引块中存放的是这些存放索引表项的磁盘块的地址。

        示例:若采用二级索引,一个磁盘块可存放 128 个索引表项,那么二级索引下可表示的文件大小为 128×128×1KB=16MB 。如果是三级索引,可表示的文件大小会进一步增大,计算方式为 128×128×128×1KB=2048GB 。这样就能满足更大文件的存储需求。

混合索引

        原理:结合直接索引和间接索引(多级索引 )。在文件控制块(FCB)中设置多个地址项,一部分为直接地址项,直接指向存放文件数据的磁盘块;另一部分为间接地址项,如一级间接、二级间接等。对于较小的文件,可直接通过直接地址项访问数据;当文件大小超出直接索引所能表示的范围时,再利用间接地址项来扩展文件大小。

        示例:假设 FCB 中有 10 个直接地址项,1 个一级间接地址项。直接地址项可表示的文件大小为 10×1KB=10KB ,一级间接地址项可表示的文件大小为 128×1KB=128KB ,那么总共可表示的文件大小为 10KB+128KB=138KB 。若再加入二级间接地址项,文件可表示的大小还能进一步增大。

索引分配方式的问题可以通过以下机制处理:

        (1) 链接方案。将多个索引块链接起来,每个索引块包括指向下一个索引块的指针。

        (2) 多级索引。为文件的索引块再建立一个索引块,称为二级索引。在二级索引中,第一级索引表中的表项指向第二级索引块,第二级索引块的表项指向文件的物理盘块号。依此类推,可建立多级索引。
        多级索引的优点:加快了对大型文件的查找速度。缺点:随着索引级数的增加,访问磁盘的次数也变多。

22.在一个采用一级索引结构的文件系统中,磁盘块大小为 1KB。若某文件的大小为 1300B,则该文件需要占用的磁盘块数是( )。
A. 0
B. 1
C. 2
D. 3

22.【参考答案】 D
【解析】 一级索引文件中,索引块占用一块磁盘,文件本身占两块磁盘,共需占用 3 个磁盘块,选择 D 选项。

        (3) 混合索引。既采用直接地址,又采用直接索引和多级索引的分配方式。下文会对这两种分配方式进行详细分析。

(1) 混合索引分配

        对于小文件,只需要一个索引块,并不需要多级索引,而大文件又必须采用多级索引,因此,UNIX 系统采用了混合索引分配的方式。
在 UNIX System V 的索引节点中设有 13 个地址项,即 i.addr (0) - i.addr (12),如图4.9所示 。

(a) 直接地址

        在索引节点中设置 10 个直接地址项,也称直接盘块号,为 i.addr (0) - i.addr (9)。直接地址项中存放的是文件数据所在盘块的盘块号每个盘块的大小为 4KB,当文件不大于 40KB 时,便可直接从索引节点中读取文件的全部盘块号。

(b) 一次间接地址

        对于大、中型文件,只采用直接地址并不能满足其需求。因此提供一次间接地址,为 i.addr (10),实质就是一级索引分配方式。一次间接地址中记录文件的一次间址块号,一次间址块就是索引块,其中记录文件的物理盘块号一次间址块中可以存放 1K 个盘块号,可表示 1K×4KB = 4MB 大小的文件如果同时采用直接地址和一次间接地址,允许文件最大长度为 4MB + 40KB。

(c) 多次间接地址

        当文件长度大于 4MB + 40KB 时,使用一次间址和 10 个直接地址项时地址空间仍不足,还需采用二次间址分配方式,用 i.addr (11) 提供二次间址,实质为两级索引分配方式。二次间接地址中记录文件的二次间址块号,二次间址块相当于主索引块,二次间址块中记录文件的一次间址块号。二次间址可表示 1K×1K×4KB = 4GB 大小的文件。如果同时采用直接地址、一次间址和二次间址,允许文件最大长度为 4GB + 4MB + 40KB。
同理,地址项 i.addr (12) 为三次间接地址,允许的文件最大长度可达 4TB + 4GB + 4MB + 40KB。
        【提示】 混合索引分配为全国统考重要考点,考生务必熟练掌握。

36.一个文件系统使用类似 Linux 的 inode 存储结构,文件块和磁盘块的大小都是 4KB,磁盘地址是 32 位,现一个文件包含 10 个直接指针和 1 个一级间接指针。则这个文件所占用的磁盘块数目最多是( )块(不考虑索引块)。
A. 128
B. 512
C. 1024
D. 1034

36.【参考答案】 D
        【解析】 磁盘地址是 32 位,即磁盘地址长度占 4B,一个磁盘块可存放 4KB/4B=1024 个地址,该文件 10 个直接指针可指向 10 个盘块,1 个一级间接指针可指向 1024 个盘块,共占用 1034 个盘块,选择 D 选项。

35.一个文件系统的文件目录项由 16 个磁盘块组成,每个磁盘块可以直接存储文件数据;每个磁盘块也可以作为一级间接索引指向 512 个磁盘块,这些磁盘块直接存储文件数据。假定每个磁盘块大小为 1024B,则文件大小最大是( )。
A. 2^13B
B. 2^14B
C. 2^19B
D. 2^23B

35.【参考答案】 D
【解析】 该文件的每个磁盘块都作为一级索引时,文件最大,文件长度最大为 16×512×1024B=2^23B,选择 D 选项。

4. 文件分配方式比较

文件的三种分配方式的比较如表 4.7 和表 4.8 所示,此部分为考试重点,应重点掌握。

50.【2013】若某文件系统索引结点(inode)中有直接地址项和间接地址项,则下列选项中,与单个文件长度无关的因素是( )。
A. 索引结点的总数
B. 间接地址索引的级数
C. 地址项的个数
D. 文件块大小

50.【参考答案】 A
【解析】 A 选项索引结点的总数为系统中所有索引结点的总数,可理解为文件的总数,与单个文件长度无关。B、C、D 三个选项都与文件长度有关,间接地址索引的级数决定了有多少个索引块可以放文件地址;地址项的个数越多、文件块越大,文件的长度越大。

4.1.7 习题精编

1.对操作系统的文件系统而言,一个源程序、一批数据、一篇文章或一张图片都可以被称为文件,只要它是( )。
A. 连续分布在一片磁盘区域中的信息集合
B. 采用链接方式连接起来的多个磁盘块组成的信息集合
C. 逻辑上具有完整意义的信息集合
D. 属于同一个用户的一个信息集合

1.【参考答案】 C
【解析】文件是逻辑上具有完整意义的信息集合,C 选项正确;文件不一定连续分布在一片磁盘区域,文件的分布由分配方式决定,A 选项错误;文件物理结构不一定采用链接方式,B 选项错误;同一个用户的信息可能存储在多个文件中,D 选项错误。

2.文件目录是( )的有序集合。
A. 文件控制块
B. 文件信息
C. 文件名
D. 文件属性

2.【参考答案】 A
【解析】 文件目录是文件控制块的有序集合,文件控制块中存储了文件信息,A 选项正确。

3.有些操作系统采用了文件名和文件描述信息分开的办法,即将文件描述信息记录到索引节点中,这样做的好处是( )。
A. 减少读文件时的访盘次数
B. 减少写文件时的访盘次数
C. 减少查找文件时的访盘次数
D. 减少复制文件时的访盘次数

3.【参考答案】 C
【解析】 引入索引节点后,磁盘的盘块中可以存放更多目录项,可减少查找文件的访盘次数,C 选项正确。

4.UNIX 系统中,下列正确描述文件目录和索引结点概念的是( )。
A. 文件目录和索引结点相同
B. 文件目录和索引结点无联系
C. 文件目录中有文件的控制信息
D. 索引结点中有文件的控制信息

4.【参考答案】 D
【解析】 索引节点是为了减少查找文件的访盘次数而从文件目录项中分离出来的,A、B 选项错误;文件目录中包括文件名和指向索引节点的指针,不包括文件控制信息,C 选项错误。索引节点包括了除文件名以外的文件信息,其中也包括文件控制信息,D 选项正确。

5.文件系统中使用 open () 系统调用打开文件的基本操作是( )。
A. 把文件信息从辅存读到内存
B. 把文件的控制管理信息从辅存读到内存
C. 把文件的 FAT 表信息从辅存读到内存
D. 把磁盘的超级块从辅存读到内存

5.【参考答案】 B
【解析】 打开文件是将文件的控制管理信息从辅存读到内存,即将文件的磁盘索引节点复制到内存索引节点中,打开文件时无需读入文件具体数据,B 选项正确。

6.文件系统中使用 close () 系统调用关闭文件的基本操作是( )。
A. 把文件的最新信息从内存写入磁盘
B. 把文件当前的控制信息从内存写入磁盘
C. 把位示图从内存写回磁盘
D. 把超级块的当前信息从内存写回磁盘

6.【参考答案】 B
【解析】 关闭文件是指将文件当前的控制信息从内存写入磁盘,需要注意的是关闭文件并不意味着将文件数据写入磁盘,写文件操作才会写入磁盘(不考虑延迟写),B 选项正确。

7.正确的读文件次序是( )。
I. 向设备驱动程序发出 I/O 请求,完成数据交换工作
II. 按存取控制说明检查访问的合法性
III. 根据目录项中该文件的逻辑和物理组织形式,将逻辑记录号转换成物理块号
IV. 按文件名在活动文件表中找到该文件的目录项
A. II、IV、III、I
B. IV、II、III、I
C. IV、III、II、I
D. II、IV、I、III

7.【参考答案】 B
【解析】 读文件应先根据文件名找到该文件的目录项,然后检验访问的合法性,确认访问合法后找到文件物理地址,最后发出 I/O 请求读文件。(注:read 系统调用的参数是文件描述符,此处不考虑)正确的读文件次序是 IV、II、III、I,选择 B 选项。

8.下列选项中,( )不是删除文件所需要完成的工作。
A. 释放文件所占用的存储空间
B. 在目录中删除该文件相应的目录项,即文件控制块
C. 若文件为共享文件,还要对共享设置进行处理
D. 对文件原存储单元全部清零

8.【参考答案】 D
【解析】 删除文件时不一定要清除文件存储单元的全部内容,有些操作系统只是对该文件所在盘块作 “删除” 标记,这样当用户因误操作删除文件时,可以进行恢复,选择 D 选项。A、B、C 选项,释放文件所占用的存储空间、在目录中删除该文件相应的目录项,即文件控制块、若文件为共享文件,还要对共享设置进行处理,均为删除文件所需要完成的工作。

9.在文件系统中,以下不属于文件保护的方法有( )。
A. 口令
B. 用户权限表
C. 存取控制
D. 读写之后使用关闭命令

9.【参考答案】 D
【解析】 A、B、C 选项,口令、用户权限表和存取控制都属于文件保护方法,读写之后使用关闭命令不属于文件保护方法,选择 D 选项。

10.对一个文件的访问,常由( )共同限制。
A. 用户访问权限和文件属性
B. 用户访问权限和用户优先级
C. 优先级和文件属性
D. 文件属性和口令

10.【参考答案】 A
【解析】 用户访问权限是指用户有没有权限访问该文件,文件属性即保存在 FCB 中的对文件访问的控制信息,用户访问权限和文件属性共同决定了一个用户能不能访问该文件和访问文件的类型,A 选项正确。用户优先级是指多个用户同时请求该文件时的访问次序,但是用户优先级和用户访问权限无关,用户可能有很高的优先级,但是没有访问权限,B、C 错误。D 选项,文件不一定设置口令,且文件的访问还需由用户访问权限决定。

11.文件的逻辑组织中,下列文件中( )是记录文件。
A. 堆文件
B. 索引文件
C. 分区文件
D. 链接文件

11.【参考答案】 B
【解析】 索引文件是一种记录文件,其记录为一条条索引,B 选项正确。A、C、D 选项,堆文件、分区文件、链接文件均为无结构文件。

12.逻辑文件的组织形式是由( )决定的。
A. 存储介质的特性
B. 文件系统的管理方式
C. 内存管理方式
D. 用户

12.【参考答案】 D
【解析】 文件的逻辑结构是指从用户的角度出发所观察到的文件的组织形式,它独立于文件的物理特性。逻辑文件的组织形式由用户决定,D 选项正确。

13.无结构文件的含义是( )。
A. 变长记录的文件
B. 索引文件
C. 流式文件
D. 索引顺序文件

13.【参考答案】 C
【解析】 无结构文件中的内容是一串字符流 / 字节流,因此无结构文件又称流式文件,C 正确。

14.文件的顺序存取是( )。
A. 按终端号依次存取
B. 按文件的逻辑号逐一存取
C. 按物理块号依次存取
D. 按文件逻辑记录大小逐一存取

14.【参考答案】 B
【解析】 文件的顺序存取是指按照逻辑顺序依次存取,B 选项正确。C 选项错误,文件的物理块号不一定相邻。

15.索引顺序文件的正确描述( )。
A. 按索引值查找
B. 按记录关键字顺序查找
C. 既要按索引值查找又要按记录关键字顺序查找
D. 利用关键字找到该记录组中第一个记录的表项,然后,顺序查找所要求的记录

15.【参考答案】 D
【解析】 索引顺序文件分组的组间关键字必须有序,组内关键字可以是无序的,查找时首先根据用户提供的关键字以及某种算法(如折半查找算法)查找索引表,找到记录所在的组,再进行组内顺序查找,D 选项正确。

16.下列关于索引表的叙述中,( )是错误的。
A. 索引表中每条记录的索引项只能有一个
B. 对索引文件存取时,必须先查找索引表
C. 索引表中含有索引文件的物理地址
D. 建立索引的目的之一是减少存储空间

16.【参考答案】 D
【解析】 建立索引的目的是提高查找速度,索引文件反而会增加存储空间,选择 D 选项。

17.物理文件的组织方式是由( )确定的。
A. 应用程序
B. 主存容量
C. 外存容量
D. 操作系统

17.【参考答案】 D
【解析】 文件的物理结构是操作系统设计人员根据存储介质的特性确定的,如磁带只能实现顺序结构,确定以后由操作系统进行管理,选择 D 选项。

18.某文件中共有 3 个记录,每个记录占用 1 个磁盘块,在 1 次读文件的操作中,为了读出最后 1 个记录,不得不读出了其他的 2 个记录。根据这个情况可知这个文件所采用的结构是( )。
A. 顺序结构
B. 索引结构
C. 链接结构
D. 顺序结构或链接结构

18.【参考答案】 C
【解析】 顺序结构和索引结构都可以实现直接存取,即根据记录直接找到所在地址,而隐式链接结构中,为找到下一块物理地址,必须读出上一块盘块。因此这个文件采用的是隐式链接结构,选择 C 选项。

19.下述文件中适合于磁带存储的是( )。
A. 顺序文件
B. 索引文件
C. 散列文件
D. 多关键字文件

19.【参考答案】 A
【解析】 磁带本身的性质决定其只能采用顺序存储结构,因此只有顺序文件适合于磁带存储,A 选项正确。

20.文件系统中若文件的物理结构采用连续结构,则文件控制块(FCB)中有关文件的物理位置的信息应包括( )。
I. 首块地址
II. 文件长度
III. 索引表地址
A. 仅 I
B. I、II
C. II、III
D. I、III

20.【参考答案】 B
【解析】 连续结构的文件可用首块磁盘地址和文件所占盘块数来定义。每个文件的 FCB 中应记录该文件第一个记录所在的盘块号和文件长度,I、II 正确,选择 B 选项。

21.下列文件的物理结构中,可能带来外部碎片问题的是( )。
A. 隐式链接
B. 顺序结构
C. 索引结构
D. 显式链接

21.【参考答案】 B
【解析】 顺序结构的文件必须为其分配连续的存储空间,反复增删文件后会产生外部碎片,选择 B 选项。

22.在一个采用一级索引结构的文件系统中,磁盘块大小为 1KB。若某文件的大小为 1300B,则该文件需要占用的磁盘块数是( )。
A. 0
B. 1
C. 2
D. 3

22.【参考答案】 D
【解析】 一级索引文件中,索引块占用一块磁盘,文件本身占两块磁盘,共需占用 3 个磁盘块,选择 D 选项。

23.12GB 的硬盘,块的大小为 4KB,FAT 应占多少硬盘空间( )。
A. 12MB
B. 7.5MB
C. 9MB
D. 6MB

23.【参考答案】 C
【解析】 12GB 的硬盘可划分磁盘块 12GB/4KB = 3M 块 = 3×2^20块,需用 22 位表示,盘块号位数一般是 8 的整数倍,即用 24 位表示,占 3B,FAT 的长度为 3B×3×2^20=9MB,选择 C。

24.某文件系统采用两级索引分配方式,设磁盘块长为 512B,每个索引项占 2B,该文件系统能支持的文件最大长度是( )。
A. 16MB
B. 32MB
C. 64MB
D. 以上答案都不对

24.【参考答案】 B
【解析】 每个盘块中可存放 512B/2B=256 个索引项,则两级索引分配方式下该文件系统能支持的文件最大长度是 256×256×512B=32MB,选择 B 选项。

        在两级索引分配方式中,文件最大长度的计算需考虑索引块和数据块的层级关系。以下是详细分析:

已知条件

  • 块长(磁盘块大小):512B
  • 每个索引表项大小:2B(每个块号占 2B,用于指向磁盘块地址)

关键计算步骤

1. 单个索引块可容纳的索引表项数

每个索引块的大小为 512B,每个索引表项占 2B,因此:单个索引块的表项数=表项大小块长​=512B/2B​=256个

2. 两级索引的结构

  • 一级索引块:存放二级索引块的地址(每个地址占 2B,对应一个二级索引块)。
  • 二级索引块:存放数据块的地址(每个地址占 2B,对应一个数据块)。

3. 计算最大文件大小

  • 一级索引可指向的二级索引块数:1 个一级索引块可指向 256 个二级索引块(每个表项对应一个二级索引块)。
  • 每个二级索引块可指向的数据块数:每个二级索引块可指向 256 个数据块(每个表项对应一个数据块)。
  • 每个数据块的大小:512B(数据块直接存储文件数据)。
 

因此,两级索引支持的最大文件大小为:最大文件大小=
分步计算:256×256=65536(总数据块数)

65536×512B=33554432B=32MB(注意:1MB=1024×1024B)

选项分析

  • 计算结果为 32MB,对应选项 B
  • 部分考生可能误将索引块自身占用的空间计入文件大小,但索引块用于存储地址,不直接存储文件数据,因此无需扣除索引块占用的空间。

答案:B. 32MB

25.设有一个记录文件,采用链接分配方式,逻辑记录的固定长度为 100B,在磁盘上存储时采用记录成组分解技术(多个逻辑记录在磁盘块内连续存放,并且同一个逻辑记录只能存放在同一个磁盘块中)。盘块长度为 512B。若该文件的目录项已经读入内存,则对第 22 个逻辑记录完成修改后,共启动了磁盘( )次。
A. 3
B. 4
C. 5
D. 6

25.【参考答案】 D
【解析】 题目中已解释,在记录成组分解技术中,记录不能跨块存放,这个点是影响解题的。一个磁盘块可存放 ⌊512B÷100B⌋=5 个逻辑记录。⌈22÷5⌉=5,第 22 个记录在第 5 个盘块中。由于文件采用链接分配方式,需要从第一个盘块开始读取,共启动磁盘 5 次,修改后还需写回原盘块,还需启动磁盘一次,共启动磁盘 6 次,选择 D 选项。
【提示】 此题是 2002 南京大学的一道考研真题。在 408 这种国家级考试中,题目严谨规范,不会出现超纲内容。本题题目中出现了 “成组分解技术” 这个新名词,这种新名词要么不影响做题,要么像本题一样,题目中也会给出新名词的解释。所以,大家若在 408 考试中遇到了考纲上没有的新名词,不要畏难慌张。

26.设某文件物理存储方式为链接方式,该文件由 5 个逻辑记录组成,每个逻辑记录的大小与磁盘块的大小相等,均为 512B,并依次存放在 70,121,55,90,63 号磁盘块上。若要存取文件的第 2061 逻辑字节处的信息,则应该访问( )号磁盘块。
A. 4
B. 55
C. 90
D. 63

26.【参考答案】 D
【解析】 2061=512×4+13,要访问的字节在第 5 个盘块上,即 63 号盘块,选择 D 选项。

27.考虑一个文件存放在 100 个数据块中。文件控制块、索引块或索引信息都驻留内存。那么如果( ),不需要做任何磁盘 I/O 操作。
A. 采用连续分配,将最后一个数据块搬到文件头部
B. 采用单级索引分配,将最后一个数据块插入文件头部
C. 采用隐式链接分配,将最后一个数据块插入文件头部
D. 采用隐式链接分配,将第一个数据块插入文件尾部

27.【参考答案】 B
【解析】 A 选项,最后一块可以直接通过计算得到,但是将最后一个数据块搬到文件头部,需要先把最后一块读入内存,然后将文件的每个数据块向后移动一块,读取和写入都需要 I/O 操作;B 选项,由于单级索引的索引块驻留内存,所以将最后一块的指针移动到最前面即可,无需 I/O 操作;C 选项,隐式链接分配需要依次读取每一块,找到下一块的地址,需要 I/O 操作;D 选项同理。

28.某文件共有 4 个记录L0~L3,采用链接存储结构,每个记录及链接指针占用一个磁盘块,主存储器中的磁盘缓冲区的大小与磁盘块的大小相等。为了在L2​和L3​之间插入一个记录L2′​(已经在内存中),需要进行的磁盘操作有( )。
A. 4 次读盘和 2 次写盘
B. 4 次读盘和 1 次写盘
C. 3 次读盘和 2 次写盘
D. 3 次读盘和 1 次写盘

28.【参考答案】 C
【解析】 在 L2​ 和 L3​ 之间插入记录 L2′​,需要先找到 L2​,需要从第一块盘块开始读取,依次找到下一块的位置,依次读取 L0​、L1​、L2​ 所在盘块,共 3 次读盘,然后为记录 L2′​ 分配新盘块,将 L2​ 盘块的下址指针赋给新盘块,需要 1 次写盘,再将新盘块的地址写入 L2​ 盘块的下址指针部分,需要 1 次写盘,总共需要 3 次读盘和 2 次写盘,选择 C 选项。

29.一个文件有 100 个盘块(数据块),假设管理文件所必须的元数据(如文件控制块、文件索引块等)都已经调入内存。如果需要在文件的第 45 个盘块后面插入数据,当该文件采用( )物理结构时开销最大。
A. 顺序文件
B. 链接文件
C. 一级索引文件
D. 多级索引文件

29.【参考答案】 A
【解析】 链接文件和索引文件插入数据时,只需修改指针即可,而连续文件插入数据,需要将前 45 个盘块整体前移、或将后 55 个盘块整体后移,开销最大,选择 A 选项。

30.在文件的物理磁盘空间分配方法中,支持直接访问并且不会产生外部碎片的是( )
A. 连续分配
B. 链接分配
C. 索引分配
D. 链接分配和索引分配

30.【参考答案】 C
【解析】 连续分配和索引分配支持直接访问,但连续分配会产生外部碎片,因此只有索引分配符合条件,选择 C 选项。

31.下列有关文件组织管理的描述,不正确的是( )。
A. 记录是对文件进行存取操作的单位,一个文件中诸记录的长度可以不等
B. 采用链接块方式分配的文件,它的物理块必须顺序排列
C. 创建一个文件时,可以分配连续的区域,也可以分配不连续的物理块
D. Hash 结构文件的优点是能够实现物理块的动态分配和回收

31.【参考答案】 B
【解析】 链接分配是一种离散分配方式,为文件分配多个离散的盘块,通过指针将这些盘块链接成一个链表,因此链接文件的物理块可以不是顺序排列,选择 B 选项。

32.采用文件分配表的文件系统所支持的文件的存储结构本质上是( )。
A. 连续结构
B. 索引结构
C. 混合索引结构
D. 链接结构

32.【参考答案】 D
【解析】 文件分配表中包括所有盘块中指向下一块的指针,实际上是一种链接结构,D 正确。

33.不具有直接读写文件任意记录能力的物理结构是( )。
A. 顺序结构
B. 链接结构
C. 索引结构
D. 哈希结构

33.【参考答案】 B
【解析】 不具有直接读写文件任意记录能力即不能够直接存取,链接结构的文件需要依次读取每条记录,才能找到所需记录,选择 B 选项。

34.关于文件,下列说法正确的是( )。
A. 文件的访问控制信息存储在其父目录中
B. 流式文件、记录式文件、顺序文件、索引文件都属于文件逻辑结构类型
C. 文件的物理结构有顺序式、链接式以及索引式,FAT 技术采用的是单级索引式
D. 多级索引相对于单级索引,可以加快文件的查找速度

34.【参考答案】 B
【解析】 文件的访问控制信息存放在其文件控制块(FCB)中,A 选项错误;文件的逻辑结构分为两类,一类是无结构文件,其中包括流式文件,一类是有结构文件,其中包括记录式文件、顺序文件、索引文件、索引顺序文件,B 选项正确;文件的物理结构有顺序式、链接式、索引式,FAT 技术采用的是链接式,C 选项错误;多级索引是为了解决单级索引无法表示大文件的问题,无法加快文件查找速度,D 选项错误。

35.一个文件系统的文件目录项由 16 个磁盘块组成,每个磁盘块可以直接存储文件数据;每个磁盘块也可以作为一级间接索引指向 512 个磁盘块,这些磁盘块直接存储文件数据。假定每个磁盘块大小为 1024B,则文件大小最大是( )。
A. 2^13B
B. 2^14B
C. 2^19B
D. 2^23B

35.【参考答案】 D
【解析】 该文件的每个磁盘块都作为一级索引时,文件最大,文件长度最大为 16×512×1024B=2^23B,选择 D 选项。

36.一个文件系统使用类似 Linux 的 inode 存储结构,文件块和磁盘块的大小都是 4KB,磁盘地址是 32 位,现一个文件包含 10 个直接指针和 1 个一级间接指针。则这个文件所占用的磁盘块数目最多是( )块(不考虑索引块)。
A. 128
B. 512
C. 1024
D. 1034

36.【参考答案】 D
        【解析】 磁盘地址是 32 位,即磁盘地址长度占 4B,一个磁盘块可存放 4KB/4B=1024 个地址,该文件 10 个直接指针可指向 10 个盘块,1 个一级间接指针可指向 1024 个盘块,共占用 1034 个盘块,选择 D 选项。

37.下列不是为了提升文件系统性能的操作是( )。
A. 目录项分解
B. 文件高速缓存
C. 磁盘调度算法
D. 异步 I/O

37.【参考答案】 D
【解析】 A 选项,通过目录项分解,可以加快文件目录的检索速度,从而提升文件系统性能;B 选项,采用文件高速缓存,可以减少磁盘访问次数,从而提升文件系统性能;C 选项,采用合适的磁盘调度算法,可以有效的减少访问磁盘所需的寻道时间,从而提升文件系统性能;D 选项,异步 I/O 可以提升 CPU 工作效率,与文件系统性能无关,选择 D 选项。

38.某文件系统采用显式链接分配方式为文件分配磁盘空间,已知硬盘大小为 64GB,簇的大小为 4KB,该文件系统的 FAT 需占用多少存储空间?若文件 A 分配到的盘块号依次为 23、25、30、29,若文件 B 分配到的盘块号依次为 27、22、24,画出 FAT 中与文件 A、B 有关的各表项。

38.【参考答案】
硬盘大小为 64GB,簇的大小为 4KB,则该文件系统共有 64GB/4KB=16M=2^24 个簇,用 24 位表示,即 3B,则 FAT 需占用 3B×16M=48MB 的存储空间。FAT 中与文件 A、B 有关的各表项如下图所示。

39.在实现文件系统时,为加快文件目录的检索速度,可利用 “FCB 分解法”。假设目录文件存放在磁盘上,每个盘块 512B。FCB 占 64B,其中文件名占 8B。通常将 FCB 分解成两部分,第一部分占 10B(包括文件名和文件内部号),第二部分占 56B(包括文件内部号和文件的其他描述信息)。
(1) 假设某一目录文件共有 254 个 FCB,试分别给出采用分解法前和分解法后,查找该目录文件的某个 FCB 的平均访问磁盘次数(访问每个文件的概率相同)。
(2) 一般地,若目录文件分解前占用 n 个盘块,分解后改用 m 个盘块存放文件名和文件内部号,请给出访问磁盘次数减少的条件(假设所有使用盘块都正好装满)。

39.【参考答案】
(1) ①分解法前,每个盘块可存放 512B/64B=8 个 FCB,254/8=31 余 6,即 254 个 FCB 需占 32 个盘块,前 31 块每块放 8 个 FCB,最后 1 块放 6 个 FCB,查找某个 FCB 需访盘 [8×(1+2+3+⋯+31)+6×32]/254=16.38 次。②分解法后,FCB 只占 10B,每个盘块可放 ⌊512÷10⌋=51 个 FCB,254/51=4 余 50,即 254 个 FCB 需要占 5 个盘块,前 4 块每块放 51 个 FCB,最后 1 块放 50 个 FCB。由于将 FCB 的部分放在目录外,查找时找到 FCB 后还需访问 1 次磁盘,以读取文件的其他描述信息。查找某个 FCB 需访盘 [51×(2+3+4+5)+50×6]/254=3.99 次。
(2) 分解法前平均访问磁盘 (1+2+⋯+n)/n=(n+1)/2 次。
分解法后平均访问磁盘 (2+3+⋯+(m+1)/n=(m+3)/2 次。
访盘次数减少的条件为 (m+3)/2<(n+1)/2,即 m<n−2。

40.已知 yourfile 文件的逻辑结构是由定长记录组成、按记录号排序的顺序文件,记录长度为 128B。其中物理结构采用了顺序文件结构(即逻辑上连续的记录存放在连续的物理块中),文件的起始地址为 200 号物理块,物理块长 512B。假设 yourfile 文件已经打开,且从打开的 yourfile 文件中读出 18 号记录(从 0 开始编号),请问:
(1) 启动磁盘的次数是多少?
(2) 每次读的物理块号是多少?
(3) 块内位移量是多少?

40.【参考答案】
(1) 由于顺序文件可以根据记录号找到物理地址进行直接存取,因此只需启动一次磁盘即可。
(2) 每块物理块可存放 512B/128B=4 条记录,即每个物理块分别存放 0~3、4~7、8~11、12~15、16~19 号记录,18/4=4,故 18 号记录在 200+4=204 号物理块上。
(3) 18 号记录是 16~19 这个物理块的第 3 条记录,该物理块的第 3 条记录的起始位置(即块内偏移量)为 128×(3−1)=256。

41.UNIX 系统采用混合索引分配方式给文件分配外存空间,如下图所示。某个文件的索引节点存放文件的属性和地址信息,该索引节点中,有 13 个地址项,其中直接地址项 10 个,一级、二级和三级间接地址项各 1 个,盘块大小为 4KB,地址项占 4B。假设索引节点已放入内存。


请回答下列问题。
(1) 若只用到索引节点的直接块,文件长度最大是多少?
(2) 这个文件系统允许的最大文件长度是多少?(给出计算表达式即可)
(3) 若要读取一个文件的第 5000B 的内容,需要访问磁盘多少次?
(4) 若要读取一个文件的第 50MB 的内容,需要访问磁盘多少次?
(5) 若文件大小为 2GB,则该文件在这个文件系统中实际占用多少存储空间?

41.【参考答案】
(1) 索引节点的直接地址项有 10 个,盘块大小为 4KB,则若只用到索引节点的直接块,文件长度最大是 10×4KB=40KB。
(2) 先计算总共可以表示多少个盘块数,最后乘上盘块大小,就可以得到最大文件长度,10 个直接地址可指向 10 个盘块,对于间接地址,一个盘块可存放 4KB/4B=1K 个地址,则一个一级间接地址项可指向 1K 个地址,一个二级间接地址项可指向 1K×1K=1M 个地址,一个三级间接地址项可指向 1K×1K×1K=1G 个地址,则这个文件系统允许的最大文件长度是 (10+1K+1M+1G)×4KB=40KB+4MB+4GB+4TB。
(3) 由于 5000B<40KB,故该内容放在直接块中,只需根据直接地址项找到相应的直接块,需访盘 1 次。
(4) 由于 40KB+4MB<50MB<40KB+4MB+4GB,故该内容在二级间址块中,需要根据二级间址项读出二级间址块,再根据二级间址块读出其指向的一级间址块,根据一级间址块读出数据所在盘块,共需访问磁盘 3 次。
(5) 文件实际占用的存储空间分数据部分和索引部分。
文件数据部分占用 2GB/4KB=512K=512×1024 个数据块。直接地址可表示 10 个数据块,不占索引块,一级间址占用一个索引块,可表示 1024 个数据块,二级间址占用一个二级索引块,还需占用 (512×1024−10−1024)/1024≈511 个一级间址块,索引块共需占用 1+1+511=513 个索引块,占用空间为 513×4KB=2MB+4KB。由于索引节点的地址项需占用 13×4B=52B,该文件实际占用空间大小为 2GB+2MB+4KB+52B。

42.文件采用多重索引结构搜索文件内容。设块长为 512B,每个块号长 2B,若不考虑逻辑块号在物理块中所占的位置,分别计算二级索引和三级索引时可寻址的文件最大长度。

42.【参考答案】
一块磁盘块最多存放 512B/2B=256 个地址项,则两级索引分配方式下该文件系统能支持的文件最大长度是 256×256×512B=32MB,三级索引分配方式下该文件系统能支持的文件最大长度是 256×256×256×512B=8GB。

43.某文件系统采用混合索引分配方式为文件分配磁盘空间。设每个盘块大小为 512B,每个盘块号占 3B,每个盘块中最多存放 170 个盘块地址,而且 FCB 中采用 10 个直接地址项、1 个一级间接索引、1 个二级间接索引项和 1 个三级间接索引项。请回答下列问题。
(1) 该文件系统能支持的文件的最大长度是多少?
(2) 访问该文件系统中一个文件的最大长度内容,最少和最多分别需要访问几次磁盘?(假设该文件索引节点已调入内存)

43.【参考答案】
(1) 10 个直接地址可指向 10 个盘块,对于间接地址,一个盘块可存放 170 个地址,则一个一级间接索引项可指向 170 个地址,一个二级间接地址项可指向 170×170 个地址,一个三级间接地址项可指向 170×170×170 个地址,则这个文件系统允许的最大文件长度为:(10+170+170×170+170×170×170)×512B=2471040KB。
(2) 最少需要访问 1 次磁盘,即根据直接地址项读取文件数据盘块;最多需要访问 4 次磁盘,即根据三级间接索引读取三级间址块,然后依次读取二级间址块、一级间址块、文件数据块。

4.1.8 真题演练

44.【2009】文件系统中,文件访问控制信息存储的合理位置是( )。
A. 文件控制块
B. 文件分配表
C. 用户口令表
D. 系统注册表

44.【参考答案】 A
【解析】 本题考查文件控制块的内容。文件控制块是操作系统为每个文件建立的唯一数据结构,文件控制块中通常含有三类信息,即基本信息、存取控制信息及使用信息。B 选项文件分配表在分配文件的物理空间时使用,即显示链接分配时使用,其中存放的是同一个文件中每个盘块指向下一个盘块的指针。C 选项用户口令表用于存放用户名和口令。D 选项系统注册表是 Windows 操作系统和其应用程序中的一个重要的层次型数据库,用于存储系统和应用程序的设置信息。

45.【2009】下列文件物理结构中,适合随机访问且易于文件扩展的是( )。
A. 连续结构
B. 索引结构
C. 链式结构且磁盘块定长
D. 链式结构且磁盘块变长

45.【参考答案】 B
【解析】 本题考查文件物理结构的特性。连续结构不易于文件拓展,链式结构不适合随机访问,索引结构适合随机访问且易于文件扩展。

46.【2010】设文件索引节点中有 7 个地址项,其中 4 个地址项是直接地址索引,2 个地址项是一级间接地址索引,1 个地址项是二级间接地址索引,每个地址项大小为 4B。若磁盘索引块和磁盘数据块大小均为 256B,则可表示的单个文件最大长度是( )。
A. 33KB
B. 519KB
C. 1057KB
D. 16513KB

46.【参考答案】 C
【解析】 本题考查混合索引分配方式。文件的 4 个直接地址索引可指向 4 个盘块,对于间接地址,一个数据块可放 256/4=64 个地址,则 2 个一级间址索引可指向 2×64=128 个盘块,1 个二级间址索引可指向 1×64×64=4096 个盘块。7 个地址项可指向 4+128+4096=4228 个盘块,可表示的数据大小为 4228×256B=4228×1/4KB=1057KB。

47.【2012】若一个用户进程通过 read 系统调用读取一个磁盘文件中的数据,则下列关于此过程的叙述中,正确的是( )。
I. 若该文件的数据不在内存,则该进程进入睡眠等待状态
II. 请求 read 系统调用会导致 CPU 从用户态切换到核心态
III. read 系统调用的参数应包含文件的名称
A. 仅 I、II
B. 仅 I、III
C. 仅 II、III
D. I、II 和 III

47.【参考答案】 A
【解析】 本题考查 read 系统调用的过程与特点。I 正确,当所读文件数据不在内存时,产生中断,进程进入睡眠等待状态,直到所需数据从外存调入内存,进程被唤醒,变为就绪态。II 正确,系统调用需要 CPU 从用户态进入核心态,以获取操作系统所提供的服务,对磁盘进行操作。III 错误,在 read 系统调用之前,需要先使用 open 系统调用将文件打开,获取文件描述符 fd,然后进行 read 系统调用。read 系统调用的参数包括:(1) 文件描述符 fd;(2) 缓冲区首地址 buf;(3) 读取的字节数 n。read 系统调用的功能为从文件描述符 fd 表示的文件中读取 n 个字节的数据,并把它们放到 buf 所指的缓冲区中,返回实际读入的字节数。

48.【2013】用户在删除某文件的过程中,操作系统不可能执行的操作是( )。
A. 删除此文件所在的目录
B. 删除与此文件关联的目录项
C. 删除与文件对应的文件控制块
D. 释放与此文件关联的内存缓冲区

48.【参考答案】 A
【解析】 删除文件时,删除与此文件关联的目录项,删除与此文件对应的文件控制块,同时释放与此文件关联的内存缓冲区,不能删除文件所在目录。

49.【2013】为支持 CD-ROM 中视频文件的快速随机播放,播放性能最好的文件数据块组织方式是( )。
A. 连续结构
B. 链式结构
C. 直接索引结构
D. 多级索引结构

49.【参考答案】 A
【解析】 连续结构支持随机查找,且对于顺序文件查找较快,而链式结构不支持随机查找,索引结构支持基于关键字的随机查找,但有额外的开销,且需要多次访问磁盘,速度慢。综上,选择 A。

50.【2013】若某文件系统索引结点(inode)中有直接地址项和间接地址项,则下列选项中,与单个文件长度无关的因素是( )。
A. 索引结点的总数
B. 间接地址索引的级数
C. 地址项的个数
D. 文件块大小

50.【参考答案】 A
【解析】 A 选项索引结点的总数为系统中所有索引结点的总数,可理解为文件的总数,与单个文件长度无关。B、C、D 三个选项都与文件长度有关,间接地址索引的级数决定了有多少个索引块可以放文件地址;地址项的个数越多、文件块越大,文件的长度越大。

51.【2014】在一个文件被用户进程首次打开的过程中,操作系统需做的是( )。
A. 将文件内容读到内存中
B. 将文件控制块读到内存中
C. 修改文件控制块中的读写权限
D. 将文件的数据缓冲区首指针返回给用户进程

51.【参考答案】 B
【解析】 文件被用户进程首次打开,即执行了 open 系统调用,open 系统调用首先根据传入的文件名查找相应文件,找到后将文件的 FCB 调入内存。进程希望获取文件内容时,操作系统才会将文件内容读入内存。

52.【2015】在文件的索引节点中存放直接索引指针 10 个,一级和二级索引指针各 1 个。磁盘块大小为 1KB,每个索引指针占 4 个字节。若某文件的索引节点已在内存中,则把该文件偏移量(按字节编址)为 1234 和 307400 处所在的磁盘块读入内存,需访问的磁盘块个数分别是( )。
A. 1,2
B. 1,3
C. 2,3
D. 2,4

52.【参考答案】 B
        【解析】 一个磁盘块大小为 1KB,一个索引指针大小为 4B,一个磁盘块可存放的索引指针数量为:1KB/4B​=256。一个直接索引指针指向一个 1KB 的数据块,一个一级索引指针指向的磁盘块里存放了 256 个直接索引指针,对应的数据块大小为:256×1KB=256KB,一个二级索引指针指向的磁盘块里存放了 256 个一级索引指针,对应的数据块大小为:256×256×1KB=64MB。
        因为是按照字节编址的,所以偏移量 1234 指的是 1234B。1234B<10KB,说明偏移量为 1234 所处的磁盘块在直接索引指向的磁盘块中,而题目中已经指明文件的索引节点已在内存中,只需要根据直接索引指针找到对应的磁盘块即可,所以只需要访盘 1 次。
        同理,偏移量 307400 即 307400B,10KB+256KB<307400B<10KB+256KB+64MB,说明偏移量为 307400 所处的磁盘块在二级索引指向的磁盘块中。根据二级索引指针得到一级索引指针,再根据一级索引指针得到直接索引指针,直接索引地址即文件所在磁盘块地址,再根据文件所在磁盘块地址得到要找的磁盘块,总共需要访盘 3 次。
        提示: 此类题型在 408 考试中多次出现,考生需要熟练掌握。

53.【2017】某文件系统中,针对每个文件,用户类别分为 4 类:安全管理员、文件主、文件主的伙伴、其他用户;访问权限分为 5 种:完全控制、执行、修改、读取、写入。若文件控制块中用二进制位串表示文件权限,为表示不同类别用户对一个文件的访问权限,则描述文件权限的位数至少应为( )。
A. 5
B. 9
C. 12
D. 20

53.【参考答案】 D
【解析】 1 个用户有 5 种访问权限,即 5 种情况。那么 4 个用户就有 4×5=20 种情况,即题目条件可以抽象一个 4×5 的矩阵。而每种情况至少用 0/1,也就是 1 位数据表示,所以需要至少 20 位才能完全描述文件权限。

54.【2018】下列优化方法中,可以提高文件访问速度的是( )。
I. 提前读
II. 为文件分配连续的簇
III. 延迟写
IV. 采用磁盘高速缓存
A. 仅 I、II
B. 仅 II、III
C. 仅 I、III、IV
D. I、II、III、IV

54.【参考答案】 D
【解析】 I. 读取当前盘块时,和之后的一些盘块一起读取并缓存,之后的盘块内容可能会在之后被请求读取,加快了访问速度,I 正确。II. 为文件分配连续的簇,在读文件时可以顺序的读取,不必查找下一个盘块位置,II 正确。III. 延迟写是将数据写入缓冲区,并在缓存首部设置延迟写标志,然后将此缓冲区放入空闲缓冲区链表的尾部。当有进程申请空闲缓冲区而得到该缓冲区时,才将该缓冲区内容写入磁盘,从而减少了不必要的访问磁盘操作,III 正确。IV. 访问磁盘高速缓存比访问磁盘速度快,IV 正确。

55.【2020】若多个进程共享同一个文件 F,则下列叙述中,正确的是( )。
A. 各进程只能用 “读” 方式打开文件 F
B. 在系统打开文件表中仅有一个表项包含 F 的属性
C. 各进程的用户打开文件表中关于 F 的表项内容相同
D. 进程关闭 F 时,系统删除 F 在系统打开文件表中的表项

55.【参考答案】 B
        【解析】 多个进程共享同一个文件,存在多种情况,若进程通过 fork () 创建子进程共享文件,指向的是同一个系统打开文件表项,若两个进程分别通过 open () 打开文件,指向的是不同系统打开文件表项。A 选项,多个进程同时打开同一个文件时,可以任意对文件进行读写操作,操作系统并不保证写的互斥性,进程可以通过系统调用对文件加锁,从而实现对文件内容的保护;D 选项,系统打开文件表项可能被其他进程共享,某一进程关闭 F,要先将表项中打开计数减 1,若减 1 后为 0 才能删除。
        B、C 选项不够严谨并且相互矛盾,但可以设想:多个进程共享文件,每个进程应当希望独立的读写文件,因此是不能共享读写指针的,C 选项中各进程的用户打开文件表项应当指向不同的系统打开文件表项,从而达到独立读写的目的。使用排除法,这道题只能选 B。

56.【2020】下列选项中,支持文件长度可变、随机访问的磁盘存储空间分配方式是( )
A. 索引分配
B. 链接分配
C. 连续分配
D. 动态分区分配

56.【参考答案】 A
        【解析】 索引分配支持文件长度可变,只需在索引表中增加一个表项,支持随机访问,因为文件的地址可通过索引表索引,A 正确。链接分配通过指针不断找到下一个盘块的地址直到找到目标盘块,只支持顺序查找,B 错误。连续分配的文件支持随机访问,但是由于文件长度固定,无法随意修改文件长度,如果需要改变文件长度,只能将整个文件移动到一个新开辟的空间,移动大量数据带来极大的开销,C 错误。动态分区分配不是磁盘存储空间分配方式,而是内存管理方式,D 错误。

57.【2020】某文件系统的目录项由文件名和索引结点号构成。若每个目录项长度为 64 字节,其中 4 字节存放索引结点号,60 字节存放文件名。文件名由小写英文字母构成,则该文件系统能创建的文件数量的上限为( )。
A. 2^26
B. 2^32
C. 2^60
D. 2^64

57.【参考答案】 B
【解析】 索引结点号占 4B 为 32 位,因此系统最多可表示 2^32 个文件。

58.【2021】若目录 dir 下有文件 file1,则为删除该文件内核不必完成的工作是( )。
A. 删除 file1 的快捷方式
B. 释放 file1 的文件控制块
C. 释放 file1 占用的磁盘空间
D. 删除目录 dir 中与 file1 对应的目录项

58.【参考答案】 A
【解析】 A 选项,删除文件不必删除其快捷方式,删除文件后下次访问此快捷方式时,系统会将其删除。B、C、D 选项,删除文件,需要释放文件的文件控制块,释放文件占用的磁盘空间,删除所在目录中与此文件对应的目录项。

59.【2011】某文件系统为一级目录结构,文件的数据一次性写入磁盘,已写入的文件不可修改,但可多次创建新文件。请回答如下问题。
(1) 在连续、链式、索引三种文件的数据块组织方式中,哪种更合适?要求说明理由。为定位文件数据块,需要 FCB 中设计哪些相关描述字段?
(2) 为快速找到文件,对于 FCB,是集中存储好,还是与对应的文件数据块连续存储好?要求说明理由。

59.【参考答案】
(1) 连续结构更合适。因为文件的数据是一次性写入的,不需要修改,连续结构更方便顺序访问,效率更高,且节省了其他不必要的空间开销。为定位文件数据块,需要在 FCB 中加入 < 起始块号,块数 > 或 < 起始块号,结束块号 >。
(2) FCB 集中存储好。由于查找文件是按文件名进行查找,FCB 集中存放使得查找只需访问 FCB 对应的块,可减少磁头移动和磁盘 I/O 访问次数,加快查找速率。

60.【2012】某文件系统空间的最大容量为 4TB(1TB=2^40B),以磁盘块为基本分配单位。磁盘块大小为 1KB。文件控制块(FCB)包含一个 512B 的索引表区。请回答下列问题。
(1) 假设索引表区仅采用直接索引结构,索引表区存放文件占用的磁盘块号,索引表项中块号最少占多少字节?可支持的单个文件最大长度是多少字节?
(2) 假设索引表区采用如下结构:第 0~7 字节采用 < 起始块号,块数 > 格式表示文件创建时预分配的连续存储空间,其中起始块号占 6B,块数占 2B;剩余 504 字节采用直接索引结构,一个索引项占 6B,则可支持的单个文件最大长度是多少字节?为了使单个文件的长度达到最大,请指出起始块号和块数分别所占字节数的合理值并说明理由。

60.【参考答案】
(1) 文件系统中所能容纳的磁盘块总数为 4TB/1KB=2^32 块。因此索引表项中的块号至少要占 32/8=4B,即 4 个字节,才能表示所有的块号。(2 分)
直接索引结构中,文件的盘块号直接记录在索引表中,可表示 512B/4B=128 个盘块,可支持单个文件的最大长度为 128×1KB=128KB。(2 分)
【评分说明】 过程描述正确,但计算结果不正确,可酌情给分。
(2) 所求单个文件最大长度包含两部分:预分配的连续空间和直接索引部分。连续空间块数占 2B,可表示 2^16 块,占 2^16×1KB=2^26B。直接索引部分包括 504B/6B=84 个索引项,可表示 84 块,占 84KB。该系统可支持的单个文件最大长度为 2^26B+84KB=65620KB。(2 分)
起始块号和块数分别所占字节数的合理值分别为 4,4(或 1 段表示的空间尽可能大)。(1 分)
理由:为使单个文件的长度达到最大,应使连续存储空间段数最少,6 或 3,5)。由于系统空间的最大容量为 4TB,占 2^32 块,用 32/8=4B 表示块数,可以表示 4TB 的文件,为最大文件长度。(1 分)
【评分说明】 过程描述正确,但计算结果不正确,可酌情给分。只要答出起始块号和块数所占字节数的任何合理值,均可得 1 分;理由说明正确得 1 分。

61.【2014】文件 F 由 200 条记录组成,记录从 1 开始编号。用户打开文件后,欲将内存中的一条记录插入到文件 F 中,作为其第 30 条记录。请回答下列问题,并说明理由。
(1) 若文件系统采用连续分配方式,每个磁盘块存放一条记录,文件 F 存储区域前后均有足够的空闲磁盘空间,则完成上述插入操作最少需要访问多少次磁盘块?F 的文件控制块内容会发生哪些改变?
(2) 若文件系统采用链接分配方式,每个磁盘块存放一条记录和一个链接指针,则完成上述插入操作需要访问多少次磁盘块?若每个存储块大小为 1KB,其中 4 个字节存放链接指针,则该文件系统支持的文件最大长度是多少?

61.【参考答案】
(1) 采用连续分配方式,文件顺序存放,将内存中的一条记录插入文件作为第 30 条记录,则使文件的前 29 条记录向前移,可使得访问磁盘数最少。每移动一条记录都需要读取和写入各访盘一次,移动 29 条记录共需访问 29×2=58 次磁盘,写入第 30 条记录需访问一次磁盘,则完成上述插入操作最少需要访问 59 次磁盘。(1 分)
F 的文件控制块中的文件的起始块号和文件长度会发生改变。(1 分)
【评分说明】 第 2 问,若答案中不包含文件的起始地址和文件大小,则不给分。
(2) 采用链接分配方式,插入记录只需找到记录的前一块盘块,修改指针即可。插入第 30 条记录,需要找到第 29 条记录的盘块,此时访问 29 次盘块。把 29 块的下址部分配给新块,访盘一次,再使 29 块的指针指向新块,访盘一次(1 分),总共访问磁盘 31 次。(1 分)
存储块的下地址指针占 4B 即 32 位,可寻址 2^32 个盘块,数据部分占 1KB−4B=1020B,则文件最大长度为 2^32×1020B=4080GB。(2 分)
【评分说明】 若按 1024×2^32B=4096GB 计算最大长度,给 1 分。

62.【2018】某文件系统采用索引节点存放文件的属性和地址信息,簇大小为 4KB。每个文件索引节点占 64B,有 11 个地址项,其中直接地址项 8 个,一级、二级和三级间接地址项各 1 个,每个地址项长度为 4B。请回答下列问题。
(1) 该文件系统能支持的最大文件长度是多少?(给出计算表达式即可)
(2) 文件系统用 1M(1M=2^20)个簇存放文件数据。若一个图像文件的大小为 5600B,则该文件系统最多能存放多少个这样的图像文件?
(3) 若文件 F1 的大小为 6KB,文件 F2 的大小为 40KB,则该文件系统获取 F1 和 F2 最后一个簇的簇号需要的时间是否相同?为什么?

62.【参考答案】
        (1) 簇大小为 4KB,每个地址项长度为 4B,则一个簇可存放 4KB/4B=1024 个地址项。文件索引节点共可存放 8+1×1024+1×1024^2+1×1024^3 个地址项,该文件系统支持的最大文件长度是 (8+1×1024+1×1024^2+1×1024^3)×4KB=32KB+4MB+4GB+4TB。
        (2) 一个簇占 4KB,可存放 4KB/64B=64 个索引节点,1M 个簇可存放 1M×64=64M 个索引节点。由于一个文件只能占据单独的簇,两个文件不能放入同一个簇,因此 5600B 的图像文件占用 2 个簇。512M 个簇可存放 512M/2=256M 个文件。文件系统最多能存放的图像文件数为 min(64M,256M)=64M。
        (3) 文件 F1 的大小 6KB<4KB×8=32KB,故获取 F1 的最后一个簇号只需访问索引节点的直接地址项。文件 F2 的大小为 40KB,4KB×8<40KB<4KB×8+4KB×1024,故获取 F2 的最后一个簇号还需要访问一级间址。综上,需要的时间不相同。

4.2 目录

        本节围绕目录这一概念展开,考生在学习这一节时,需要注意理解目录的功能以及为什么需要这些功能,可结合实际在个人电脑上使用文件夹的场景理解树形目录的结构。
在学习本节时,请考生思考以下问题:
(1) 目录的主要功能是什么?是怎样实现的?
(2) 文件共享有几种方式?如何实现?

4.2.1 目录的基本概念

        在计算机系统中,为了对大量文件进行管理并方便用户存取,引入目录的概念。目录相当于一种索引,指出文件名和文件物理地址之间的映射关系。目录是文件控制块(FCB)的有序集合,一个目录项就是一个文件控制块。

目录的功能包括如下:
(1) 实现 “按名存取”。用户无需关心文件实际保存在硬盘的哪个数据块上,只需记住这个文件的所属目录和文件名即可访问。
(2) 提高对目录的检索速度。通过设计合理的目录结构加快对目录的检索速度,这是在设计一个大、中型文件系统时所追求的主要目标。
(3) 文件共享。若多个用户需要同一个文件,应当使这一文件在这些用户之间共享,以节省存储空间。
(4) 允许文件重名。不同目录下的文件应当可以重名,以便用户按自己的习惯使用文件。
【举例】 可以将计算机文件系统理解为一个书柜,在书柜中,又分为不同的抽屉,抽屉中存在许多文件夹,文件夹中存放了文件,这就相当于多级目录的概念。Windows 系统中,目录就是文件夹。

2.下面有关文件目录说法错误的是( )。
A. 文件目录是用于检索文件的,由若干目录项组成
B. 文件目录的组织和管理应便于检索和防止冲突
C. 工作目录即当前目录
D. 文件目录需要长期保存在主存中

2.【参考答案】D
【解析】文件目录无需长期保存在主存,检索时调入即可,一般根目录常驻主存,D 正确。

4.2.2 目录结构

        目录结构影响文件的存取速度,也影响文件的共享性和安全性,因此目录结构对文件系统非常重要。目前大家接触到的目录结构几乎都是树形目录结构,也就是说根目录下可以任意建立文件夹,文件夹里还可以嵌套文件夹。但是早期操作系统中还存在过其他目录结构:单级目录结构就是根目录下只能有文件,不能有文件夹;两级目录结构就是根目录下按照用户名建立文件夹,这些文件夹中不能嵌套建立文件夹。

1. 单级目录结构

        单级目录结构是指在一个目录中包含所有的文件,即在整个文件系统中只建立一张目录表,每个文件占一个目录项,如图 4.10 所示。


        单级目录的优点是结构简单,且能快速定位文件。缺点是只能实现按名存取功能,存在检索速度慢的问题,且不允许文件重名和文件共享,只适用于单用户系统。

2. 两级目录结构

        两级文件目录将目录分成主文件目录和用户文件目录,以解决单级文件目录存在的缺点。
        主文件目录(Master File Directory, MFD)中的目录项包括用户名和指向该用户目录的指针,用户文件目录(User File Directory, UFD)包括该用户所有文件的文件控制块。如图 4.11 所示,图中的主目录中示出了三个用户名,即 Alice、Bob 和 David。

 9.用户甲有两个文件 A、B,用户乙有 3 个文件 B、C、D。其中甲的文件 B 和乙的文件 B 不是同一个文件,甲通过文件名 B、乙通过文件名 D 共享同一个文件,请为这种文件共享情况拟定一个合适的目录组织方案,并画图说明。

9.【参考答案】
为了解决两个用户的文件重名和共享问题,可以采用两级目录结构,将目录分成主文件目录和用户文件目录,如下图所示。

        两级目录结构的优点是提高了目录的检索速度,允许不同的用户文件重名,还支持不同用户使用不同的文件名访问系统中同一个共享文件。两级目录结构的缺点是缺乏灵活性,用户不能对自己的文件进行分类管理。

6.以下关于文件系统的描述,正确的是( )。
A. 文件的逻辑结构是指文件在硬盘空间的存储模式
B. 文件控制块 FCB 包含了文件的说明信息与文件内容
C. 多级目录结构能有效解决文件命名冲突的问题
D. 修改某个文件内容时,无需执行打开文件的操作

6.【参考答案】C
【解析】 A 选项错误,文件的逻辑结构是指从用户的角度出发所观察到的文件的组织形式;B 选项错误,FCB 不包括文件内容;C 选项正确,多级目录结构能有效解决文件命名冲突的问题;D 选项错误,修改文件需要先打开文件。

3. 树形目录结构

        目前最常用的结构是树形目录结构,树形目录可以类比数据结构中树的概念,树根是根目录,从根向下,每个树枝是子目录,而树叶是文件。图 4.12 为 Linux 树形目录结构,在根目录下包含多个子目录。


树形目录引入如下概念:

(1)当前目录(current directory)

        由于一个进程运行时所访问的文件大多局限于某个范围,但对文件进行访问需要每次都从根目录开始查询,速度较慢,因此提出当前目录的概念。当前目录是指进程当前所在的目录,又称工作目录,每次进程对文件的访问都基于当前目录进行,因此加快了文件的检索速度。

7.在树形目录结构中,文件已被打开后,对文件的访问采用( )。
A. 文件符号名
B. 从根目录开始的路径名
C. 从当前目录开始的路径名
D. 用户文件描述符

7.【参考答案】D
【解析】在树形目录结构中,对文件的首次访问通常采用文件路径名,文件被打开后,对文件的访问都采用用户文件描述符,选择 D 选项。

2.下面有关文件目录说法错误的是( )。
A. 文件目录是用于检索文件的,由若干目录项组成
B. 文件目录的组织和管理应便于检索和防止冲突
C. 工作目录即当前目录
D. 文件目录需要长期保存在主存中

2.【参考答案】D
【解析】文件目录无需长期保存在主存,检索时调入即可,一般根目录常驻主存,D 正确。

4.在文件系统中引入 “当前目录” 的主要目的是( )。
A. 方便用户
B. 提高系统性能
C. 增强系统安全性
D. 支持共享访问

4.【参考答案】B
【解析】由于一个进程运行时所访问的文件大多局限于某个范围,因此提出当前目录的概念。当前目录是指进程当前所在的目录,又称工作目录,每次进程对文件的访问都基于当前目录进行,因此加快了文件的检索速度,进而提高系统性能,B 选项正确。

        每个目录在创建时都含有两个特殊的目录项 “.” 和 “..”,“.” 表示当前目录,“..” 表示父目录(根目录除外,根目录中它指向自己)。

(2)路径名(path name)

        路径名是指从根目录或当前目录开始,到文件所在目录之间的所有目录名与文件名依次地用分隔符连接起来形成的字符串。在树形目录结构中,使用路径名唯一标识文件。在 UNIX 中,路径各部分之间用 “/” 分隔,在 Windows 中用 “\” 分隔。

        从根目录开始的路径名称为绝对路径名(absolute path name)。以 UNIX 系统为例,绝对路径名是从 “/” 开始,即从根目录开始,依次连接每个目录名,最后连接文件名而形成的字符串。

3.文件的绝对路径名由( )组成。
A. 一系列目录名和该文件的文件名
B. 文件名及扩展名
C. 从根目录到对应文件所经历的全部目录名和文件名
D. 相对路径名和文件名

3.【参考答案】C
【解析】文件的绝对路径名是指从根目录开始,到文件所在目录之间的所有目录名与文件名依次地用分隔符连接起来形成的字符串,C 选项正确。

        【举例】如图 4.12,文件 hello.c 的绝对路径名为 “/home/dir3/dir4/hello.c”,文件 test.c 的绝对路径名为 “/home/dir1/test.c”。

        从当前目录开始的路径名称为相对路径名(relative path name)。以 UNIX 系统为例,“./” 表示当前目录(实际使用时 “.” 可省略),“../” 表示父目录,相对路径名是从 “./” 或 “../” 开始依次连接每个目录名,最后连接文件名而形成的字符串。

        【举例】如图 4.12,如果用户 A 的当前目录是 “/home/dir3”,则此时文件 hello.c 的相对路径名为 “/dir4/hello.c” 或 “./dir4/hello.c”,文件 test.c 的相对路径名为 “../dir1/test.c”。


        树形目录的优点:层次结构清晰,解决了文件重名和文件共享问题,能够有效地进行文件的管理和保护。缺点:查找文件需要按路径名逐级访问中间节点,增加了磁盘访问次数,影响查询速度,不便于实现文件共享。

5.下面的说法中,错误的是( )。
I. 打开文件的基本操作是把文件信息从辅存读到内存
II. 对一个文件的访问,常由用户访问权限和用户优先级共同限制
III. 文件系统采用树形目录结构后,对于不同用户的文件,其文件名可以相同
IV. 为了防止系统故障对文件的破坏,常采用存取控制矩阵方法保护文件
A. 仅 I、II
B. 仅 II、III、IV
C. 仅 I、II、IV
D. I、II、III、IV

5.【参考答案】C
【解析】 I 错误,打开文件是将文件的控制管理信息从辅存读到内存;II 错误,对文件访问由用户访问权限和文件属性共同限制;III 正确;IV 错误,为了防止系统故障对文件的破坏,可以采用建立副本和定时转储的方法来保护文件,而存取控制矩阵是防止由人为因素对文件造成的破坏。选择 C 选项。

1.在现代操作系统中,文件系统都有效地解决了重名(即允许不同用户的文件可以具有相同的文件名)问题。系统是通过( )来实现这一功能的。
A. 重名翻译结构
B. 建立索引表
C. 树形目录结构
D. 建立指针

1.【参考答案】C
【解析】树形目录结构由一个根目录和多个子目录构成,因此可以解决文件重名问题,C 正确。

4. 无环图目录结构

        在树形目录结构中,每个文件只有一个父目录,其他用户想要访问该文件,必须经过其父目录,不方便文件共享。无环图目录结构通过在树形目录结构的基础上添加指向同一文件或子目录的有向边,使得整个目录成为一个有向无环图。无环图目录结构允许文件和子目录有多个父目录,不同用户的目录可以指向同一个文件或子目录。
        如图 4.13,目录 D1 和 D2 共享目录 D3,目录 D1 和 D3 共享文件 f。对于无环图目录共享的文件,实际文件只存在一份,一个用户所做的更改都可以被其他用户看到,共享的子目录同理。


        无环图目录结构方便了文件共享,但也带来了文件系统管理和维护的复杂性。

4.2.3 目录的操作

        用户可以通过操作系统提供的命令对目录进行操作,包括创建、删除、切换、移动目录,以及修改目录和查找文件等。

(1)创建目录

        创建一个新的目录文件。在树形目录结构中,用户可为自己建立用户文件目录,并可再创建子目录。创建目录时,系统自动放入两个目录项 “.” 和 “..”。

(2)删除目录

        对于删除目录,分两种情况。如果所要删除的目录是空的,就可直接将该目录项删除。如果要删除的目录不空,则视操作系统以及调用的具体参数不同而不同。有些操作系统中会连同子目录及文件一并删除;有些操作系统则会判定为非法操作,返回错误。

(3)切换目录

        切换目录的命令可以使用户改变当前工作目录,通过指定目录的绝对或相对路径名修改。如果没有指明任何目录,通常默认改变到主目录(与指定用户相关的最顶层目录)。

(4)移动目录

        移动目录可以将目录移动到其他目录下。移动后会改变目录所在位置。

(5)查找

        当用户查找文件时,系统首先根据用户提供的文件名对目录进行查询,在文件所在目录的目录文件中找到其对应的目录项(FCB),然后找到文件对应索引节点,根据索引节点中记录的文件物理位置找到文件。

        文件系统提供对文件的查找命令,可以通过多种方式查找文件,例如可以从根目录或当前目录位置开始进行查找。查找时,可用精确匹配或局部匹配方式等。

        如图 4.14,假设进程要打开文件 /home/dir1/test.c,当前目录为根目录,文件系统开始查找:
        (a) 首先遇到根目录 “/”,它通常被存放在磁盘的固定盘块中,将该盘块内容读入内存;
        (b) 其次读入路径的第一个分量名 home,用它与根目录文件中各目录项中的文件名顺序比较,找到匹配项,得到 home 的索引节点号,再从此索引节点中找到 home 所在盘块 497;
        (c) 然后读入第二个分量名 dir1,用它和 home 所在盘块中的目录项的文件名比较,得到 dir1 的索引节点号,再从此索引节点中找到 dir1 所在盘块号 248;
        (d) 接着读入第三个分量名 test.c,用它与第三级目录文件 /home/dir1 中各目录项中的文件名进行比较,最后得到 /home/dir1/test.c 的索引节点号为 123,其中存放了文件物理地址。
        上述一共进行了三次磁盘 I/O 操作,第一次读取根目录,第二次读取 home 目录,第三次读取 dir1 目录获取 test.c 目录项内容如果在查找过程中,发现有一个文件分量名未能找到,则应停止查找,并返回 “文件未找到” 信息。
        【提示】通常根目录常驻内存,做题时需看清题中条件:目录是否在内存中、目录项所存的内容、是否需读取文件内容、文件存储方式等。需要注意的是若目录项过多,超出一块盘块能存放的内容,查找时可能需要多次 I/O 操作,具体根据目录文件的分配方式确定。
        【提示】前文曾经提到,设计合理的目录结构能够加快对目录的检索速度,这一点需要结合目录的查找操作才能理解。例如,一个目录下有文件名分别为 000.txt, 001.txt, …, 999.txt 的 1000 个文件,那么查找文件平均需要 1000/2=500 次匹配;如果将这 1000 个文件按照第一位数字划分到 folder0 到 folder9 共 10 个文件夹下,每个文件夹有 100 个文件(folder0 存储 000.txt 到 099.txt,以此类推),那么确定目录后查找文件就只需

要 100/2=50 次匹配。可见,合理设置目录结构能够提高文件查找速度。但是,目录嵌套层次的提高会增加硬盘读取次数,因此这种嵌套应当保持在合理的范围内。

4.2.4 * 目录实现

目录的实现方法有线性表和散列表两种,其中线性表对应线性查找,哈希表对应哈希查找。

(1)线性表

        线性表是最简单的目录实现方法,一个目录存储一个线性表,表中的元素就是 <文件名,数据块指针>。线性表中查找文件的方法是线性查找,是指根据用户提供的文件名,从根目录或当前工作目录开始,逐级查找路径名中各子目录名,用其作为索引,逐层搜索各级目录文件,最后找到相匹配的文件目录项。线性表的优点:实现比较简单。缺点:查找速度慢。

(2)哈希表

        哈希表是指目录中建立一张表项为 <文件名,数据块指针> 的哈希表,文件名是哈希表的键,数据块指针就是哈希表的值。创建文件时,将用户提供的文件名转换为一个哈希值,保存在哈希表中。查找时,将文件名映射为哈希值,利用该哈希值到目录中去查找。

        哈希表的优点:查找速度较快。缺点:对于使用了通配符进行模糊查找的文件名,无法采用哈希查找,只能采用线性查找;不同的文件名可能会映射到同一个哈希值,需要采取措施解决冲突;哈希表需要复杂的管理,只有在预计目录中经常会有成百上千个文件时,才考虑使用哈希表实现目录。

4.2.5 文件共享

        文件共享是指多个用户(进程)共同使用同一个文件。文件共享使得在外存中仅需保留共享文件的一份副本,节省大量存储空间,减少因文件复制而增加的 I/O 操作次数。硬链接和软链接是两种常用的文件共享方法,它们是在树形结构目录的基础上经适当修改形成的。

1.基于索引节点的共享方式(硬链接)

        没有索引节点结构的文件系统可以通过无环图方式进行共享,通过在不同目录项中设置相同的物理地址实现,这种方法不够灵活,因为如果某一用户在某个目录下向文件中添加新数据,从而需要增加新的盘块,这些新增盘块只会出现在执行操作的目录中,对其他共享用户不可见。

        硬链接(hard link)是一种基于索引节点的共享方式,在这种共享方式中,文件目录只存放文件名和指向索引节点的指针,需要共享文件时,将用户目录项中的指针指向该索引节点,且将该索引节点的链接计数加 1

        索引节点中的链接计数 count,又称引用计数用于表示链接到本索引节点上的用户目录项的数目由于任何用户对文件进行的修改操作都会引起索引节点内容的改变,并且对其他用户可见,因此文件也就能共享给其他用户

        如图 4.15 所示,图中用户 A 和 B 的文件目录中,都设置有指向共享文件 Test 的索引节点指针。而 Test 的索引节点中 count=2,表示有两个用户目录项链接到此文件上,即两个用户共享此文件。

        图 4.16 表示了用户 B 链接前后的情况。当用户 A 创建了一个新文件,此时将 count 置 1。当有用户 B 要共享此文件时,在用户 B 的目录中增加一目录项,并设置一指针指向该文件的索引节点,此时 count=2。

        如果用户 A 不再需要此文件,不能直接将文件和其索引节点删除,因为这样会使 B 的指针指向一个无效索引节点,如果该索引节点以后分配给另一个文件,B 将会指向一个错误的文件。因此用户 A 删除文件时,应将文件索引节点的 count 减 1,并删除其目录项。当 count=0 时,系统会释放文件的物理存储空间,从而真正删除该文件。

8.设文件 F1 的当前引用计数为 1,先建立 F1 的硬链接文件 F2,再建立 F1 的符号链接文件 F3,然后删除 F2,则此时文件 F1、F3 的引用计数值分别是( )。
A. 1、1
B. 1、2
C. 1、0
D. 2、2

8.【参考答案】A
【解析】建立硬链接文件时,引用计数加 1;建立符号链接文件时,直接将引用计数值设置成 1。删除硬链接文件时,引用计数减 1,若减 1 后为 0,删除文件,否则不能删除;删除原文件对符号链接文件不可见,因此不会改变符号链接文件的引用计数。建立硬链接文件 F2 后,F1 和 F2 的引用计数都为 2,建立符号链接 F3 后,F3 的引用计数直接设置成 1,此时 F1、F2 的引用计数都为 2,F3 的引用计数为 1,删除 F2 后,F1 的引用计数减 1,变为 1,F3 的引用计数不变。此时文件 F1、F3 的引用计数值分别是 1、1,选择 A 选项。

2.利用符号链接实现文件共享(软链接)

        符号链接(symbolic linking)又称软链接,是一类特殊的文件,其包含有一条以绝对路径或者相对路径的形式指向其他文件或者目录的引用

        一个符号链接文件仅包含有一个文本字符串,其被操作系统解释为一条指向另一个文件或者目录的路径。它是一个独立文件,其存在并不依赖于目标文件。如果删除一个符号链接,它指向的目标文件不受影响。如果目标文件被移动、重命名或者删除,任何指向它的符号链接仍然存在,且不会改变,但是这些符号链接将会指向一个不复存在的文件

        符号链接的操作是透明的:对符号链接文件进行读写的程序会表现得像直接对目标文件进行操作。某些需要特别处理符号链接的程序(如备份程序)可能会识别并直接对其进行操作。

        【拓展】Windows 系统中的快捷方式就是一种符号链接。

        如图 4.17,目录 /dirB 通过文件名 file2 来共享目录 /dirA 的文件 file1,可由系统生成 file1 的一个符号链接,把所创建的新链接称为 file2,把此符号链接写入目录 /dirB 中。符号链接中只包含被链接文件 file1 的路径名,而不是其索引节点指针。用户访问 file2 这个链接文件时,操作系统将会根据其中的路径名找到真正的文件 file1,然后对它进行读写操作,由此实现文件共享。

        【提示】建立符号链接时,原文件的引用计数不会改变,符号链接文件的引用计数设置为 1。图 4.17 中建立 file2 时,file2 的引用计数设置为 1,且 file1 的引用计数不变。若删除 file1,file2 的引用计数同样不变。

10.有文件系统如下图所示,图中的框表示目录,圆圈表示普通文件。
(1) 可否建立 F 与 R 的链接?试加以说明。
(2) 能否删除 R?为什么?
(3) 能否删除 N?为什么?

10.【参考答案】
(1) 不能建立链接,因为 F 是一个目录而 R 是一个普通文件,只能建立目录到目录和文件到文件的链接,所以不能建立 F 和 R 的链接。
【提示】此题是 1995 北京大学的一道考研真题。是否支持建立目录到文件的链接,取决于具体的操作系统,一般认为是不支持的,但也有的地方说支持。
(2) 不一定能删除 R,因为 R 被多个目录所共享,能否删除 R 取决于文件系统的 R 的共享方法,如果采用基于索引节点的共享方法,删除 R 后会存在悬空指针问题,只能将其引用计数减 1,如果采用基于符号链接的共享方法,则可以删除 R。
(3) 不一定能删除 N,因为 N 的子目录中存在共享文件 R,由于 R 不一定能被删除,所以 N 也不一定能被删除。

符号链接优点

         (1) 不影响原文件。只有文件主才拥有指向其索引结点的指针,而共享该文件的其他用户则只有该文件的路径名。文件主删除文件后,通过符号链接将访问文件失败。删除符号链接不会影响原文件。
        (2) 更为灵活。硬链接是基于索引节点的,因此创建硬链接的条件较为严格:各硬链接必须处于同一文件系统中;该文件系统必须基于索引节点;不能链接不存在的文件。符号链接本质上是一个记录了路径的文件,因此符号链接可以链接其他文件系统的文件,也可以链接不存在的文件。除此之外,如果操作系统支持相关特性,符号链接还能通过 ftp 等协议链接互联网上的文件。

符号链接缺点

        (1) 读取文件开销大。通过符号链接读取文件,需要根据其路径名依次查找相应的目录,直到找到目标文件的索引节点,需要多次读取磁盘,增大访问开销。
        (2) 额外耗费磁盘空间。符号链接本质是一个文件,尽管该文件非常简单,仍要为其配置索引节点,需要额外耗费一定的磁盘空间。

4.2.6 习题精编

1.在现代操作系统中,文件系统都有效地解决了重名(即允许不同用户的文件可以具有相同的文件名)问题。系统是通过( )来实现这一功能的。
A. 重名翻译结构
B. 建立索引表
C. 树形目录结构
D. 建立指针

1.【参考答案】C
【解析】树形目录结构由一个根目录和多个子目录构成,因此可以解决文件重名问题,C 正确。

2.下面有关文件目录说法错误的是( )。
A. 文件目录是用于检索文件的,由若干目录项组成
B. 文件目录的组织和管理应便于检索和防止冲突
C. 工作目录即当前目录
D. 文件目录需要长期保存在主存中

2.【参考答案】D
【解析】文件目录无需长期保存在主存,检索时调入即可,一般根目录常驻主存,D 正确。

3.文件的绝对路径名由( )组成。
A. 一系列目录名和该文件的文件名
B. 文件名及扩展名
C. 从根目录到对应文件所经历的全部目录名和文件名
D. 相对路径名和文件名

3.【参考答案】C
【解析】文件的绝对路径名是指从根目录开始,到文件所在目录之间的所有目录名与文件名依次地用分隔符连接起来形成的字符串,C 选项正确。

4.在文件系统中引入 “当前目录” 的主要目的是( )。
A. 方便用户
B. 提高系统性能
C. 增强系统安全性
D. 支持共享访问

4.【参考答案】B
【解析】由于一个进程运行时所访问的文件大多局限于某个范围,因此提出当前目录的概念。当前目录是指进程当前所在的目录,又称工作目录,每次进程对文件的访问都基于当前目录进行,因此加快了文件的检索速度,进而提高系统性能,B 选项正确。

5.下面的说法中,错误的是( )。
I. 打开文件的基本操作是把文件信息从辅存读到内存
II. 对一个文件的访问,常由用户访问权限和用户优先级共同限制
III. 文件系统采用树形目录结构后,对于不同用户的文件,其文件名可以相同
IV. 为了防止系统故障对文件的破坏,常采用存取控制矩阵方法保护文件
A. 仅 I、II
B. 仅 II、III、IV
C. 仅 I、II、IV
D. I、II、III、IV

5.【参考答案】C
        【解析】 I 错误,打开文件是将文件的控制管理信息从辅存读到内存;II 错误,对文件访问由用户访问权限和文件属性共同限制;III 正确;IV 错误,为了防止系统故障对文件的破坏,可以采用建立副本和定时转储的方法来保护文件,而存取控制矩阵是防止由人为因素对文件造成的破坏。选择 C 选项。

6.以下关于文件系统的描述,正确的是( )。
A. 文件的逻辑结构是指文件在硬盘空间的存储模式
B. 文件控制块 FCB 包含了文件的说明信息与文件内容
C. 多级目录结构能有效解决文件命名冲突的问题
D. 修改某个文件内容时,无需执行打开文件的操作

6.【参考答案】C
        【解析】 A 选项错误,文件的逻辑结构是指从用户的角度出发所观察到的文件的组织形式;B 选项错误,FCB 不包括文件内容;C 选项正确,多级目录结构能有效解决文件命名冲突的问题;D 选项错误,修改文件需要先打开文件。

7.在树形目录结构中,文件已被打开后,对文件的访问采用( )。
A. 文件符号名
B. 从根目录开始的路径名
C. 从当前目录开始的路径名
D. 用户文件描述符

7.【参考答案】D
        【解析】在树形目录结构中,对文件的首次访问通常采用文件路径名,文件被打开后,对文件的访问都采用用户文件描述符,选择 D 选项。

8.设文件 F1 的当前引用计数为 1,先建立 F1 的硬链接文件 F2,再建立 F1 的符号链接文件 F3,然后删除 F2,则此时文件 F1、F3 的引用计数值分别是( )。
A. 1、1
B. 1、2
C. 1、0
D. 2、2

8.【参考答案】A
【解析】建立硬链接文件时,引用计数加 1;建立符号链接文件时,直接将引用计数值设置成 1。删除硬链接文件时,引用计数减 1,若减 1 后为 0,删除文件,否则不能删除;删除原文件对符号链接文件不可见,因此不会改变符号链接文件的引用计数。建立硬链接文件 F2 后,F1 和 F2 的引用计数都为 2,建立符号链接 F3 后,F3 的引用计数直接设置成 1,此时 F1、F2 的引用计数都为 2,F3 的引用计数为 1,删除 F2 后,F1 的引用计数减 1,变为 1,F3 的引用计数不变。此时文件 F1、F3 的引用计数值分别是 1、1,选择 A 选项。

9.用户甲有两个文件 A、B,用户乙有 3 个文件 B、C、D。其中甲的文件 B 和乙的文件 B 不是同一个文件,甲通过文件名 B、乙通过文件名 D 共享同一个文件,请为这种文件共享情况拟定一个合适的目录组织方案,并画图说明。

9.【参考答案】
为了解决两个用户的文件重名和共享问题,可以采用两级目录结构,将目录分成主文件目录和用户文件目录,如下图所示。

10.有文件系统如下图所示,图中的框表示目录,圆圈表示普通文件。
(1) 可否建立 F 与 R 的链接?试加以说明。
(2) 能否删除 R?为什么?
(3) 能否删除 N?为什么?

10.【参考答案】
(1) 不能建立链接,因为 F 是一个目录而 R 是一个普通文件,只能建立目录到目录和文件到文件的链接,所以不能建立 F 和 R 的链接。
【提示】此题是 1995 北京大学的一道考研真题。是否支持建立目录到文件的链接,取决于具体的操作系统,一般认为是不支持的,但也有的地方说支持。
(2) 不一定能删除 R,因为 R 被多个目录所共享,能否删除 R 取决于文件系统的 R 的共享方法,如果采用基于索引节点的共享方法,删除 R 后会存在悬空指针问题,只能将其引用计数减 1,如果采用基于符号链接的共享方法,则可以删除 R。
(3) 不一定能删除 N,因为 N 的子目录中存在共享文件 R,由于 R 不一定能被删除,所以 N 也不一定能被删除。

11.某文件系统以硬盘作为文件存储器,物理块大小为 512B。有文件 A 包括 590 个逻辑记录,每个记录占 255B,每个物理块存 2 个记录。文件 A 在该多级目录中的位置如下图所示。每个目录项占 127B,根目录内容常驻内存。
(1) 若文件采用链表分配方式,链指针地址占 2B,如果要将文件 A 全部读入内存,至少要访问多少次硬盘?
(2) 若文件采用连续分配方式,如果要读取逻辑记录号为 480 的记录,至少要访问多少次硬盘?

11.【参考答案】
(1) 由于根目录内容常驻内存,即 usr1、usr2、usr3 的地址可以直接获得,接下来读入 usr2 第一块,根据 usr2 的内容查找,由于物理块大小为 512B,每个目录项占 127B,一块物理块可放 4 个目录项,故第一次读取只能找到 d1、d2、d3、d4,接下来读取 usr2 目录的第二块内容,找到 d5,对 d5 访盘,根据 d5 的内容找到文件 A,此时共访盘 3 次。每个物理块可存放 2 条记录和 1 个下址指针,文件 A 共有 590 条记录,存储在 590/2 = 295 个盘块中,所以将 A 全部读入内存至少访盘 3 + 295 = 298 次。
(2) 文件采用连续分配方式,找到 A 同样需要 3 次访盘,但连续分配可根据记录号直接计算出其所在地块地址,只需一次访盘,所以至少访盘 4 次。

12.如下图所示,某磁盘文件系统使用链接分配方式组织文件,簇大小为 1KB,目录文件的每个目录项包括文件名和文件的第一个簇号,其他簇号存放在文件分配表 FAT 中。
(1) 假定目录树如上图所示,各文件占用的簇号及顺序如上表所示,其中 dir1,dir2 是目录文件,file1、file2、file3 是用户文件。请给出所有目录文件的内容。
(2) 删除 file3 的过程?
(3) 若 FAT 的每个表项仅存放簇号,占 4 个字节,则 FAT 的最大长度为多少字节?该文件系统支持的文件长度最大是多少?
(4) 假设仅 FAT 和 dir1 目录文件已读入内存,若需读文件 dir1/dir2/file2 的第 2000 个字节,需要读几次磁盘?

12.【参考答案】
(1) 两个目录文件的内容如下图所示。

(2) 删除 file3,应先将 dir2 中关于 file3 的目录项删除,然后把该文件占用的存储空间释放,由于该文件系统采用显式链接分配,删除 file3 需要根据目录项的第一个簇号,找到 FAT 中有关 file3 的全部簇号,依次进行释放。
(3) 簇号占 4B 为 32 位,即可以表示 2^32 个簇,则 FAT 的最大长度为 4B×2^32=16GB。该文件系统支持的最大长度为 2^32×1KB=4TB。
(4) 要读取 dir1/dir2/file2,首先需要根据 dir1 的内容找到 dir2 所在簇号,访盘一次,然后根据 dir2 的内容找到 file2 的第一个簇号,此时无需访盘,只需根据该簇号找到 FAT 中 file2 的第 2000 个字节所在簇号,然后进行访盘即可,共需访盘 2 次。

13.某树形目录结构的文件系统如下图所示。该图中的方框表示目录,圆圈表示文件。
(1) 可否进行下列操作:①在目录 D 中建立一个文件,取名为 A;②将目录 C 改名为 A。
(2) 若 E 和 G 分别为两个用户的目录:①用户 E 欲共享文件 Q,应有什么条件?如何操作?②在一段时间内用户 G 主要使用文件 S 和 T。为简化操作和提高速度,应如何处理?③用户 E 欲对文件 I 加以保护,不许别人使用,能否实现?如何实现?

13. 【参考答案】
(1) ①目录 D 中没有名为 A 的文件,因此可以新建文件 A;②由于根目录中已存在一个名为 A 的目录,因此目录 C 不能改名为 A。
(2) ①用户 E 欲共享文件 Q,需要 E 有 Q 的访问权限,用户 E 可通过自己的主目录 E 找到其父目录 C,再找到 C 的父目录根目录,然后依次通过目录 D、G、K、O 访问文件 Q,若用户当前目录是 E,则可以通过路径名 “../../D/G/K/O/Q” 访问文件 Q;②可以将用户 G 的当前目录修改为 “/D/G/K/P”,这样就不必每次访问文件都进行目录的查找;也可以在目录 G 下新建两个链接文件,链接到 S 和 T 上,方便直接访问;③可以通过修改文件 I 的存取控制表进行实现,具体办法为:在文件 I 的存取控制表中,只授予用户 E 对文件的访问权限,不允许其他用户访问。

14.有一个文件系统如图 4.18 所示。图中的方框表示目录,圆圈表示普通文件。根目录常驻内存,目录文件组织成链接文件,不设 FCB,普通文件组织成索引文件。目录表示下一级文件名及其磁盘地址(各占 2B,共 4B)。下级文件是目录文件时,指示其第一个磁盘块地址。下级文件是普通文件时,指示其 FCB 的磁盘地址。每个目录的文件磁盘块的最后 4B 供拉链使用。下级文件在上级目录文件中的次序在图中为从左至右。每个磁盘块有 512B,与普通文件的一页等长。普通文件的 FCB 组织如下表所示。其中,每个磁盘地址占 2B,前 10 个地址直接指示该文件前 10 页的地址。第 11 个地址指示一级索引表地址,一级索引表中的每个磁盘地址指示一个文件页地址;第 12 个地址指示二级索引表地址,二级索引表中的每个地址指示一个一级索引表地址;第 13 个地址指示三级索引表地址,三级索引表中的每个地址指示一个二级索引表地址。

请问:
(1) 一个普通文件最多可有多少个文件页?
(2) 若要读文件 J 中的某一页,最多启动磁盘多少次?
(3) 若要读文件 W 中的某一页,最少启动磁盘多少次?
(4) 根据 (3),为最大限度地减少磁盘启动次数,可采用什么方法?此时,磁盘最多启动多少次?

14.【参考答案】
(1) 每个磁盘块占 512B,地址占 2B,一个一级索引表可存放 512B/2B=256 个地址,一个二级索引表可存放 256 个一级索引表地址,以此类推,一个普通文件最多可有 10+256+256×256+256×256×256=16843018 个文件页。
(2) 由图可知,目录 A 和 D 的目录项都只有两个,因此这两个目录文件都只占用一个物理块,由于根目录常驻内存,从根目录中找到目录 A 的地址读入内存,访盘一次,然后从目录 A 中找到目录 D 的地址读入内存,访盘一次,再从目录 D 中找到文件 J 的 FCB 地址读入内存,访盘一次,找到文件 J 共需访盘三次。最坏情况下,访问文件 J 中的三级索引下的某一页,访盘次数最多,需要访盘 3+4=7 次。
(3) 由图可知,目录 C 和目录 U 的目录项较多,可能存放在不止一个盘块中,通过每个盘块的指针链接在一起,最好情况下,需要访问的目录项都在第一块盘块中,从根目录中找到目录 C 的地址读入内存,访盘一次,然后依次访问目录 I、P、U,找到文件 W 的 FCB 地址并读入内存,共需访盘 5 次,最好情况下,要访问的页在直接块中,按照直接地址项中的内容找到直接块并读入内存,最终共需访盘 6 次。
(4) 为了减少启动磁盘的次数,可以将需要访问的 W 文件挂在根目录最前的目录项中,此时只需读内存中的根目录就可以找到文件 W 的 FCB,将其读入内存。最坏情况下,读取文件 W 的三级索引下的一页,需访盘 4 次,此时,磁盘最多启动 5 次。

4.2.7 真题演练

15.【2009】设文件 F1 的当前引用计数值为 1,先建立 F1 的符号链接(软链接)文件 F2,再建立 F1 的硬链接文件 F3,然后删除 F1。此时,F2 和 F3 的引用计数值分别是( )。
A. 0、1
B. 1、1
C. 1、2
D. 2、1

15.【参考答案】B
【解析】本题考查软链接和硬链接的特性。软链接相当于新建了一个文件,该文件只记录原文件的路径,软链接文件本身的引用计数值在新建时为 1,对原文件进行操作并不会改变软链接文件的引用计数值,故 F2 的引用计数值为 1。建立硬链接时,引用计数值加 1,F3 的引用计数值为 2。删除文件 F1 时,F3 的引用计数值减 1 为 1。故本题选 B。

16.【2010】设置当前工作目录的主要目的是( )。
A. 节省外存空间
B. 节省内存空间
C. 加快文件的检索速度
D. 加快文件的读 / 写速度

16.【参考答案】C
【解析】当前工作目录是指进程当前所在的目录,每次进程对文件的访问都基于当前目录进行,此时文件的路径名只需从当前工作目录开始连接形成,而不是从根目录,因此当前工作目录能够加快对文件的检索速度。A、B 选项,目录的设置无法节省内外存空间,D 选项,文件的读 / 写速度取决于磁盘。

17.【2017】若文件 f1 的硬链接为 f2,两个进程分别打开 f1 和 f2,获得对应的文件描述符为 fd1 和 fd2,则下列叙述中,正确的是( )。
I. f1 和 f2 的读写指针位置保持相同
II. f1 和 f2 共享同一个内存索引结点
III. fd1 和 fd2 分别指向各自的用户打开文件表中的一项
A. 仅 III
B. 仅 II、III
C. 仅 I、II
D. I、II 和 III

17.【参考答案】B
【解析】I. 对于不同进程打开的文件,读写指针位置不同,I 错误。II. 硬链接的共享文件指向同一个索引节点,II 正确。III. 两个进程获得的文件描述符分别指向各自的用户打开文件表中的一项,III 正确。

18.【2021】若目录 dir 下有文件 file1,则为删除该文件内核不必完成的工作是( )。
A. 删除 file1 的快捷方式
B. 释放 file1 的文件控制块
C. 释放 file1 占用的磁盘空间
D. 删除目录 dir 中与 file1 对应的目录项

18.【参考答案】A
【解析】A 选项,删除文件不必删除其快捷方式,删除文件后下次需访问此快捷方式时,系统会将其删除。B、C、D 选项,删除文件,需要释放文件的文件控制块,释放文件占用的磁盘空间,删除所在目录中与此文件对应的目录项。

19.【2016】某磁盘文件系统使用链接分配方式组织文件,簇大小为 4KB。目录文件的每个目录项包括文件名和文件的第一个簇号,其他簇号存放在文件分配表 FAT 中。

(1) 假定目录树如上图所示,各文件占用的簇号及顺序如上表所示,其中 dir、dir1 是目录,file1、file2 是用户文件。请给出所有目录文件的内容。
(2) 若 FAT 的每个表项仅存放簇号,占 2 个字节,则 FAT 的最大长度为多少字节?该文件系统支持的文件长度最大是多少?
(3) 系统通过目录文件和 FAT 实现对文件的按名存取,说明 file1 的 106、108 两个簇号分别存放在 FAT 的哪个表项中。
(4) 假设仅 FAT 和 dir 目录文件已读入内存,若需将文件 dir/dir1/file1 的第 5000 个字节读入内存,则要访问哪几个簇?

19.【参考答案】
(1) 两个目录文件 dir 和 dir1 的内容如下表所示。

【评分说明】每个目录项的内容正确给 1 分,共 3 分。
(2) FAT 的每个表项仅存放簇号,占 2 个字节,即 16 位,在 FAT 中最多允许 2^16 个表项,即最多包含 2^16 个簇。FAT 的最大长度为 2^16×2B=128KB。文件的最大长度为 2^16×4KB=256MB 。
【评分说明】若考生考虑到文件结束标志、坏块标志等,且答案正确,同样给分。
(3) 按簇分配的文件中,FAT 的每个表项存放文件的下一簇号,file1 的 106 簇号放在 FAT 的 100 号表项中,108 簇号放在 FAT 的 106 号表项中。
(4) 首先在 dir 目录文件中找到 dir1 的簇号 48,读取 48 号簇,得到 dir1 目录文件;在 dir1 目录文件中找到 file1 文件的第一个簇号 100,无需读取 100 号簇,只需根据此簇号在 FAT 表中找到第 5000 个字节所在的簇号,由于一个簇为 4KB=4096B,可知 5000B 在文件的第二个簇即 106 号簇。因此,需要访问目录文件 dir1 所在的 48 号簇和文件 file1 的 106 号簇 。

 4.3 文件系统

        本节综合介绍了文件系统的结构、虚拟文件系统以及文件系统挂载这几个抽象概念,考生在学习本节时,注重理解这些结构、系统、方法设计的主要目的,以及背后的思想,不必拘泥于具体概念的记忆。对于外存空闲空间管理方法,可以结合文件物理结构对比学习。

在学习本节时,请考生思考以下问题:
(1) 什么是文件系统?
(2) 为什么要进行外存空闲空间管理?有几种方法?

4.3.1 文件系统结构

1. 文件系统的全局结构

        文件系统是操作系统中负责存取和管理文件信息的模块,它采用统一方法管理文件。文件布局(layout)是文件系统的重要部分,维护着文件逻辑位置到物理位置的映射关系。文件系统有两个截然不同的设计问题。第一个问题是,如何定义文件系统的用户接口,这个任务涉及文件及其属性、所允许的文件操作、组织文件的目录结构;第二个问题是,创建算法和数据结构,以便映射逻辑文件系统到物理外存设备。

1.从用户的角度看,操作系统中引入文件系统主要是实现( )。
A. 数据存储
B. 按名存取
C. 数据保护
D. 数据共享

1.【参考答案】B
【解析】文件系统的主要目的是实现按名存取,B 选项正确。

        文件系统本身通常由许多不同的层组成,下层为上层提供服务,上层使用下层的功能,上下层之间只需关心二者的接口而无需关注对方的内部结构和实现方法。图 4.19 为一个代表性的文件层次结构。

        第 1 层是用户接口,该层根据用户对文件的存取要求,把系统调用命令及参数改造成内部调用格式。

        第 2 层是符号文件系统层(SFD),SFD 中存放文件名和文件内部标识符 fd。该层通过搜索符号文件目录表,把第 1 层提供的参数 —— 用户文件名转换成系统内部的唯一标识符 fd,然后将 fd 作为参数传给第 3 层。

        第 3 层是基本文件系统层(BFD),BFD 中存放除了文件名之外的文件说明信息和文件内部标识符 fd。该层根据第 2 层提供的参数 fd,找到文件的说明信息,包括存取控制信息、文件逻辑结构、物理结构、物理位置等。

        第 4 层是存取控制验证层,该层把用户的访问要求与文件控制块中的存取控制信息进行比较,以确定访问的合法性,从而实现文件的共享和保护。

        第 5 层是逻辑文件系统层,该层根据文件逻辑结构,把所要操作的数据或记录的逻辑块号转换成相对块号。

        第 6 层是物理文件系统层,该层根据文件物理结构,把相对块号转换成实际的物理地址。

        第 7 层和第 8 层是文件系统和设备管理程序的接口层。第 7 层是文件存储设备分配模块和设备策略模块。文件存储设备分配模块管理空闲外存空间,负责分配、释放和组织空闲存储块。设备策略模块主要是把物理块号转换成相应文件存储设备所要求的地址格式,例如磁盘的柱面号,磁道号和盘区号等,并将上层的具体操作要求及参数转换成对输入输出设备的具体命令。

        第 8 层是启动输入输出层,由设备处理程序执行具体的读或写文件操作。

2. 文件系统在外存中的结构

        文件系统的实现需要采用多个磁盘和内存的结构,虽然这些结构因操作系统和文件系统而异,但还是有一些通用原则。在磁盘上,文件系统可能包括如下信息:如何启动存储在那里的操作系统、总的块数、空闲块的数量和位置、目录结构以及各个具体文件等。图 4.20 为一个可能的文件系统布局。

文件系统在磁盘上的结构具体包括如下:

        (1)主引导记录(Master Boot Record, MBR),用来引导计算机,是计算机开机后访问硬盘所必须要读取的首个扇区。在计算机被引导时,基本输入输出系统(BIOS)读入并执行 MBR。MBR 的开头是第一阶段引导代码,主要作用是检查分区表是否正确,并在系统硬件自检完以后,将控制权交给引导块中的引导程序。MBR 的结尾是分区表,用于描述分区的结构信息,如分区的起始和结束地址,表中的第一个分区被标记为活动分区。

        (2)引导块(boot block),包含引导操作系统的代码。每个分区都有一个引导块,引导块中的程序将装载该分区中的操作系统。为统一起见,每个分区都从引导块开始,如果分区不包含操作系统,则这块的内容为空。

        引导块之后,各分区存储的内容就由文件系统决定,不再统一。然而,不同的文件系统往往也会有相似的内容。以下是文件系统经常包括的部分。

        (1)超级块(superblock),包含文件系统的属性和信息,如分区大小和索引节点表大小。在计算机启动时,或在该文件系统首次使用时,超级块会被读入内存。

        (2)文件系统中空闲块的信息,具体形式将在 4.3.2 节介绍。

        (3)索引节点表,为系统中所有文件的索引节点集合。

        (4)根目录,存放文件系统目录树的根部,位置固定。

        (5)文件和目录,存放所有文件和除根目录外目录的数据部分。

3. 文件系统在内存中的结构

        内存中的信息用于管理文件系统并通过缓存来提高性能。这些数据在挂载文件系统时被加载,在文件系统操作期间被更新,在卸载时被丢弃。这些结构的类型可能包括:

(1)挂载表(mount table),为系统中所有挂载的文件系统信息表,系统启动时自动读取其信息,并且会自动将其中的文件系统挂载到指定目录。挂载的详细内容见第 4.3.4 小节。

(2)目录结构的缓存,包含最近访问目录的信息。

(3)系统级的打开文件表,包含每个打开文件的 FCB 的副本以及打开计数、读写指针等信息。

(4)进程级的打开文件表,包含每个进程打开文件的文件描述符和指向系统级打开文件表中表项的指针。

(5)对磁盘读写时,缓冲区保存文件系统的块。

4.3.2 外存空闲空间管理方法

        为实现前面所讲的文件分配方式,需要为文件分配盘块而分配盘块就必须知道磁盘上哪些盘块是可用的。因此,除文件分配表外,还需设置一个磁盘分配表(Disk Allocation Table),用于记录空闲磁盘块的情况
        外存空闲空间管理提供对空闲盘块分配和回收的手段,常用的管理方法有空闲表法、空闲链表法、位示图法和成组链接法。此外,由于文件分配表可以记录每个磁盘块的状态,也可用于管理空闲磁盘块。

1.空闲表法

        空闲表法为磁盘上所有的空闲区建立一张空闲表,表项包括序号、该空闲区的第一个盘号、该区的空闲盘块数等信息,按起始盘块号递增顺序排列。空闲表法常用于连续文件。

        空闲盘区的分配与内存的动态分区分配类似,也是采用首次适应算法、最佳适应算法和最坏适应算法。分配时,顺序地检索空闲表表项,直至找到合适的空闲区,将其分配给用户(进程),并修改空闲表。回收时,把空闲区位置及其长度填入空闲区表,并合并邻接项。

        如表 4.9 所示,表中第一个空闲块号为 3,空闲块数目为 4 ,表示从 3 号磁盘块开始,3、4、5、6 号盘块都是空闲的。

        空闲表法优点:分配速度快,访问磁盘的 I/O 频率低。

2.空闲链表法

        空闲链表法是将所有空闲盘区链接在一起,形成一条空闲链。根据空闲链单位的不同,可分成两种形式:空闲盘块链和空闲盘区链。

(1)空闲盘块链

        空闲盘块链是指将磁盘上所有的空闲盘块链接起来形成的链表,其中指向第一个空闲盘块的指针保存在磁盘的特殊位置,同时也将其缓存在内存中,每一个盘块都有后继盘块的指针。

13.【2019】下列选项中,可用于文件系统管理空闲磁盘块的数据结构是( )。
I. 位图
II. 索引节点
III. 空闲磁盘块链
IV. 文件分配表(FAT)
A. 仅 I、II
B. 仅 I、III、IV
C. 仅 I、III
D. 仅 II、III、IV

13.【参考答案】B
【解析】常用的文件系统管理空闲磁盘块的方法包括空闲表法、空闲链表法、位示图法和成组链接法,I、III 正确。文件分配表的表项和磁盘块一一对应,可以用一个特殊数字(如 0),标记磁盘块为空闲,因此文件分配表也可以用于管理空闲磁盘块,IV 正确。索引节点是用于记录文件描述信息的数据结构,一个文件对应一个索引节点,因此索引节点不能用于管理空闲磁盘块,II 错误。

【提示】空闲盘块链可以看作是隐式链接在空闲块管理中的应用。        

        分配时,从链首开始依次摘下适当数目的空闲盘块分配给用户。回收时,将回收的盘块依次链接在空闲盘块链的末尾。

        优点:分配和回收盘块操作简单;便于文件动态增长和收缩。

        缺点:每次申请一块盘块都要读取空闲盘块并取得指针,申请多块需要多次读盘;由于它是以盘块为单位,相应的空闲盘块链可能会很长。

(2)空闲盘区链

        空闲盘区链是指将磁盘上所有的空闲盘区链接起来形成的链表,其中空闲盘区包括若干个相邻的盘块,每个盘区保存有下一个空闲盘区的指针和本盘区盘块数的信息。

【提示】空闲盘区链和空闲盘块链的区别仅仅是分配和回收的单位不同。

        分配盘区的方法与内存的动态分区分配类似,通常采用首次适应算法。回收时,要将回收的盘区与相邻接的空闲盘区合并。

        空闲盘区链的优缺点与空闲盘块链的优缺点相反。优点:分配和回收的效率较高,且空闲盘区链较短。缺点:分配与回收的过程比较复杂。

3.位示图法
        (1)位示图的概念

        位示图利用二进制的一位来表示磁盘中一个盘块的使用情况,磁盘上所有盘块(包括空闲和非空闲)都对应在位示图中。如图4.21所示,用若干字节构成一张位示图,每一位对应一个盘块,一般而言 “1” 表示已分配,“0” 则表示对应的盘块空闲。

13.【2019】下列选项中,可用于文件系统管理空闲磁盘块的数据结构是( )。
I. 位图
II. 索引节点
III. 空闲磁盘块链
IV. 文件分配表(FAT)
A. 仅 I、II
B. 仅 I、III、IV
C. 仅 I、III
D. 仅 II、III、IV

13.【参考答案】B
【解析】常用的文件系统管理空闲磁盘块的方法包括空闲表法、空闲链表法、位示图法和成组链接法,I、III 正确。文件分配表的表项和磁盘块一一对应,可以用一个特殊数字(如 0),标记磁盘块为空闲,因此文件分配表也可以用于管理空闲磁盘块,IV 正确。索引节点是用于记录文件描述信息的数据结构,一个文件对应一个索引节点,因此索引节点不能用于管理空闲磁盘块,II 错误。

5.位示图可用于( )。
A. 实现文件的保护和保密
B. 文件目录的查找
C. 磁盘空间的管理
D. 主存空间的共享

5.【参考答案】C
【解析】位示图是磁盘空闲空间管理的一种方式,其做法是为文件存储器建立一张位示图,通过位示图上的二进制位反映整个存储空间的分配情况。C 选择正确。

        通常可用 m×n 个位来构成位示图,并使 m×n 等于磁盘的总块数,n 为每行的位数。位示图也可描述为一个二维数组 bitmap [m][n]。

        【提示】位示图看似是布尔类型的二维数组,实际上是布尔类型的一维数组,只不过是用二维数组存储的一维数组。这有点像《数据结构》中用一维数组存储二维数组(矩阵),只不过这里刚好反了过来。为什么要用二维数组存储一维数组呢?这是因为大多数计算机中,内存也好硬盘也好,一次读取最少读出一个字节或者一个字,无法一次只读一个二进制位。而如果像 C 语言那样,用整个字节存储一个布尔值,在文件系统中又太过浪费。因此就成了现在的实现方法。

12.【2015】文件系统用位图法表示磁盘空间的分配情况,位图存于磁盘的 32~127 号块中,每个盘块占 1024 个字节,盘块和块内字节序均从 0 开始编号。假设要释放的盘块号为 409612,则位图中要修改的位所在的盘块号和块内字节序号分别是( )。
A. 81,1
B. 81,2
C. 82,1
D. 82,2

12.【参考答案】C
【解析】盘块号 = 起始块号 + 盘块号 / (1024×8) = 32+409612/(1024×8)=32+50=82,块内字节序号 = [盘块号 % (1024×8)] / 8 = [409612 % (1024×8)] / 8 =1。

        (2)盘块的分配与回收

        盘块的分配分三步,先对位示图进行顺序查找,找出一个或一组值为 “0” 的二进制位(“0” 表示空闲),然后将找到的二进制位的下标(行号和列号)转换为盘块号,最后修改位示图,将这些位置 1。

7.有一磁盘,共有 10 个柱面,每个柱面 20 个磁道,每个磁道分为 16 个扇区。采用位示图对其存储空间进行管理。如果字长是 16 个二进制位,那么位示图共需( )字。
A. 200
B. 128
C. 256
D. 512

7.【参考答案】A
【解析】位示图中,每 1 位表示一个扇区,共有 10×20×16=3200 个扇区,需要 3200 位大小的位示图表示,由于字长是 16 个二进制位,共需 3200/16=200 个字,A 选项正确。

        盘块的回收分两步,先将要回收盘块的盘块号转换成位示图中的序号,再修改位示图,将这些位置 0。

【提示】要注意题目中盘块号和块内字节是从 0 还是从 1 开始编号计算。

6.若用 8 个字(字长 32 位)组成的位示图管理内存,字号、位号、块号均从 0 开始算起,则块号为 100 的内存块对应的位示图位置为( )。
A. 字号为 3,位号为 5
B. 字号为 3,位号为 4
C. 字号为 4,位号为 4
D. 字号为 4,位号为 5

6.【参考答案】B
【解析】位示图中,0~31 在 0 号字,32~63 在 1 号字,64~95 在 2 号字,96~127 在 3 号字,所以块号 100 在 3 号字中,3 号字的 0 号位是 96,1 号位是 97,依此类推,块号 100 在 4 号位中。另解,块号为 100 的内存块对应的位示图字号为 100 DIV 32 = 3,位号为 100 MOD 32 = 4,即字号为 3,位号为 4。选择 B 选项。

【例 4.2】文件系统用位图法表示磁盘空间的分配情况,位图存于磁盘的 32~127 号块中,每个盘块占 1024 个字节,盘块和块内字节均从 0 开始编号。假设要释放的盘块号为 409612 ,则位图中要修改的位所在的盘块号和块内字节序号分别是( )。
A. 81,1
B. 81,2
C. 82,1
D. 82,2

计算盘块号
盘块号 = 起始块号 + 盘块号 / (1024×8) ,这里起始块号是 32 ,要释放的盘块号为 409612 ,则盘块号 = 32+409612/(1024×8)=32+50=82 。

计算块内字节序号
块内字节序号 = [盘块号%(1024×8)]/8 ,即 [409612%(1024×8)]/8=1 。

所以答案选 C。

        (3)位示图的优缺点

        优点:(a) 位示图中,每个盘块是否空闲仅需用一个二进制位表示,占用空间少,可保存在内存中,方便读取。

        (b) 从位示图中很容易找到一个值或一组相邻接的空闲盘块。例如,要找到 5 个相邻接的空闲盘块,这只需在位示图中找出 5 个值连续为 “0” 的位即可。

        缺点:对于大磁盘而言位示图依然很长,当磁盘只剩很少的空闲块时,查找的效率很低。因此,大多数使用位示图的文件系统都有一个辅助数据结构,用于汇总位示图子区域的内容。

4.成组链接法

        成组链接法是 UNIX 系统中采用的一种方法,它是将空闲表法和空闲链表法相结合产生的一种空闲盘块管理方法,结合了两种方法的优点,克服了两者均有的表太长的缺点。

3.成组链接法是用于( )。
A. 文件的逻辑组织
B. 文件的物理组织
C. 文件存储器空闲空间的组织
D. 文件的目录组织

3.【参考答案】C
【解析】成组链接法是 UNIX 系统中常见的管理空闲空间的方法,它可用于文件存储器空闲空间的组织,选择 C 选项。

        (1)空闲盘块的组织

        在成组链接法中,将空闲块分成若干组,每 100 个空闲块为一组,每组的第一空闲块记录了下一组空闲盘块号和空闲块总数。第一组称为空闲盘块号栈,又称专用块,分配和回收时采用栈的方式取出和存入盘块,其中除空闲块计数的第一行是栈底,最后一行是栈顶。

4.关于文件存储空间的管理方式,( )需要使用空闲盘块号栈。
A. 空闲表法
B. 空闲链表法
C. 位示图法
D. 成组链接法

4.【参考答案】D
【解析】在成组链接法中,将空闲块分成若干组,每 100 个空闲块为一组,每组的第一空闲块登记了下一组空闲盘块号和空闲块总数。第一组称为空闲盘块号栈。选择 D 选项。

        如图4.22,假定文件系统启用时共有可用空闲块 337 块,编号从 23 至 359,每 100 块划分成一组。第一组 60 - 23 号盘块记录在磁盘专用块中,第一块 60 号盘块中记录下一组 100 个空闲盘块号 160 - 61,下一组的第一块 160 号中记录再下一组 100 个空闲盘块号 260 - 161,依此类推,在最后一组中,即 360 号盘块中的第一项是 0,为结束标志(注:最后一组的盘块数应为 99,不是 100,因为这是指可供使用的空闲盘块数)。

        (2) 空闲盘块的分配与回收

        操作系统启动时,将磁盘专用块复制到主存系统工作区中,然后进行对空闲盘块的分配和回收。

        分配空闲盘块时,先把专用块中的空闲块计数减 1,从专用块的栈顶取出一个空闲盘块的指针,将与之对应的盘块分配给用户。当空闲块计数减 1 后等于 0 时,专用块中仅剩 1 个盘块号 i,把盘块 i 中保存的下一组空闲盘块号经缓冲区复制到专用块中,再把盘块 i 分配出去。

        【举例】根据图 4.22,分配时,首先分配 23 号盘块,并将空闲块计数减 1,然后分配 24 号盘块…… 直到分配到 60 号盘块,将 60 号盘块所指的块复制到专用块,再分配 60 号盘块。

        回收空闲盘块时,把块号记录在专用块的栈顶,将专用块的空闲块计数加 1。当专用块的空闲块计数为 100 时,把专用块中的内容经缓冲区复制到要回收的盘块 i 中,然后将盘块号 i 写入专用块中的第一个位置,置专用块的空闲块计数为 1。

4.3.3 虚拟文件系统

1. 虚拟文件系统的概念

        虚拟文件系统(Virtual File System, VFS)实质上是一种存在于内存中、支持多种具体文件系统的运行环境,它向用户进程提供了一个简单的,统一的文件系统接口。
        现代计算机通常会支持多种不同类型的文件系统,为了支持多种文件系统,将多种文件系统统一成一个有序的结构,UNIX 提出了虚拟文件系统这一概念,其关键思想就是抽象出所有文件系统都共有的部分,并且将这部分代码单独放在一层,通过调用底层的实际文件系统来具体管理数据。
虚拟文件系统的功能包括:
        (1) 记录所挂载的文件系统类型。
        (2) 建立设备与文件系统之间的联系。
        (3) 实现面向文件的通用操作。
        (4) 涉及特定文件系统的操作时,映射到具体文件系统中。

2. 虚拟文件系统的结构

        VFS 包含两个不同的接口:上层提供给用户进程的接口和下层提供给实际文件系统的接口。
        上层提供给用户的接口使得用户可以直接使用标准 UNIX 文件系统调用来操作文件,无需考虑具体文件系统的特性和物理存储介质;下层提供给实际文件系统的接口用以进行具体文件系统的转换,实现各种文件系统的细节。如图 4.24,用户进程通过 VFS 提供的统一调用函数 open () 可以打开不同文件系统的文件。


        VFS 是面向对象的方案,VFS 的对象简单实现为 C 语言的包含数据和函数指针的结构,其中函数指针指向操作这些数据的文件系统的实现函数。VFS 主要的 4 个对象如下:

(1)超级块 (superblock) 对象:表示一个已挂载的特定文件系统。超级块存储了描述特定文件系统的信息。超级块对象通常对应于磁盘上特定扇区的文件系统超级块或文件系统控制块。超级块中包含的信息包括:文件系统所挂载的设备、基本块的大小、文件系统类型、打开文件链表等。

(2)索引节点 (inode) 对象:表示一个特定的文件。索引节点存放具体文件的一般信息(不包括文件名和文件内容)。每个索引节点对象都有一个索引节点号,唯一标识文件系统中的指定文件。

(3)目录项 (dentry) 对象:表示一个特定的目录项。目录项对象存放目录项与对应文件进行链接的信息,包含一个指向索引节点的指针和超级块,还包括一个指向父目录的指针和指向子目录的指针。目录项对象为访问文件和目录提供了方便。

(4)文件 (file) 对象:表示一个进程打开的一个文件。文件对象在系统调用 open () 时创建,在系统调用 close () 时销毁。文件对象中的信息包括:与该文件相关联的目录项对象、包含该文件的文件系统、指向文件操作表的指针、文件对象使用计数、用户 ID、用户组 ID 和指向下一个文件操作位置的指针等。

8.虚拟文件系统 VFS 中的对象类型不包括( )。
A. 超级块(superblock)对象
B. 索引节点(inode)对象
C. 数据(data)对象
D. 文件(file)对象

8.【参考答案】C
【解析】为实现虚拟文件系统,UNIX 抽象了四种对象类型:超级块对象、索引节点对象、目录项对象、文件对象,其中不包括数据对象,选择 C 选项。

VFS 使用三个缓存来提升性能:

(1)索引节点缓存:每个目录和文件都由一个 VFS 索引节点表示,访问目录或文件会访问其索引节点,因此索引节点高速缓存中存储最近访问过的索引节点,可加快访问速度。

(2)目录缓存:目录缓存中存储完整的目录名称和其索引节点号之间的映射,可加快列出目录的过程。

(3)缓冲区高速缓存:缓冲区高速缓存中存放文件的具体数据,当需要相同的数据时,可从高速缓存中读取,而不是磁盘。

3. 虚拟文件系统的工作过程

        当系统启动时,根文件系统在 VFS 中注册,当装载其他文件系统时,它们也必须在 VFS 中注册。文件系统注册需要向 VFS 提供一个包含 VFS 所需要的函数地址的列表,这样 VFS 就知道如何执行此文件系统的功能。
        【拓展】对于像 FAT 和 NTFS 这类非 UNIX 风格的文件系统,必须经过封装,提供符合 VFS 概念的接口。例如:某文件系统不支持索引节点概念,它也必须在主存中装配索引节点结构体,如同其本身包含索引节点一样。


        如图 4.25 所示,图中展示了用户进程发起调用,到文件系统在磁盘上的操作。当进程发起一个面向文件的系统调用时,内核调用 VFS 中的一个函数。该函数处理完与具体文件系统无关的操作后,调用目标文件系统中的相应函数。接下来由目标文件系统对磁盘进行 I/O 操作。


例如,在 Linux 中读一个文件:int ret = read (fd, buf, len),如图 4.26 所示,过程简要如下:
(1) 在用户空间调用 read () 系统调用;
(2) 进入 VFS 层,调用 sys_read () 函数;
(3) sys_read () 函数找到具体文件系统提供的读操作函数,进行读文件处理,并返回给用户。

4.3.4 文件系统挂载 (mounting)

        正如文件在使用前必须要打开一样,文件系统在用于系统的进程之前必须先挂载,也称安装。挂载(mounting)是指由操作系统使一个存储设备上的文件和目录可供用户通过计算机的文件系统访问的一个过程。挂载机制使不同类型的文件系统可以挂载在系统的文件树的任何位置。
        在 Linux 系统中 “一切皆文件”,即所有内容都是以文件的形式保存和管理的,硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构)。当在 Linux 系统中使用这些硬件设备时,只有将 Linux 本身的文件目录与硬件设备的文件目录合二为一,硬件设备才能为用户所用。合二为一的过程称为 “挂载”。
        【拓展】不止是硬件设备目录挂载到根目录上合二为一称作挂载。在一个文件系统中挂载另一个文件系统(甚至来自其他用户或网络的文件系统)也非常常见。
        挂载的过程很简单,操作系统需要知道设备的名称和挂载点(mount point)(附加文件系统在原来文件结构中的位置),有的还需要提供文件系统类型 。挂载点通常是空目录。在 Linux 系统中通过 mount 命令进行挂载。
        【举例】在 Linux 系统上,包含用户主目录的文件系统可能挂载到 /home,访问该文件系统的目录结构只需在目录名称之前加上 /home,如 /home/tom。
        Linux 系统通过 umount 命令进行文件系统的卸载。卸载时首先检查文件系统是否可卸载,当文件系统正在被使用时不可卸载。
        Linux 的文件系统和磁盘并不绑定,文件系统是一个虚拟的概念,没有介质、容量和读写规则,只有在具体的文件系统挂载的时候,某个挂载点才和介质建立联系,然而此时对于文件系统来讲仍然没有容量的概念,容量仅是挂载于此目录的磁盘设备的属性,如果磁盘空间满了,仍然可以通过在此磁盘的一个目录上挂载一个新的磁盘上的文件系统来解决。

4.3.5 习题精编

1.从用户的角度看,操作系统中引入文件系统主要是实现( )。
A. 数据存储
B. 按名存取
C. 数据保护
D. 数据共享

1.【参考答案】B
【解析】文件系统的主要目的是实现按名存取,B 选项正确。

2.以下说法正确的是( )。
A. 一个文件系统可存放的文件数量受限于文件控制块的数量
B. 一个文件系统的容量一定等于承载该文件系统的磁盘容量
C. 一个文件系统中单个文件的大小只受磁盘剩余空间大小的限制
D. 一个文件系统不能将数据放置在多个磁盘上

2.【参考答案】A
【解析】A 选项正确,文件控制块存放文件的存取控制信息,每个文件都有一个文件控制块,因此一个文件系统可以存放的文件数量受限于文件控制块的数量;B 选项错误,还受限于 FCB 的数量,以及对文件地址的表达方式,例如用 16 位表达文件地址,则文件系统的寻址空间只有 2^16 个盘块,若磁盘容量超出 2^16 个盘块,多余的盘块不可寻址;C 选项错误,还受文件分配方式的限制,例如采用连续分配,而磁盘剩余空间不存在多个连续盘块,文件只能比磁盘剩余空间小;D 选项错误,文件系统可以将数据放置在多个磁盘上。

3.成组链接法是用于( )。
A. 文件的逻辑组织
B. 文件的物理组织
C. 文件存储器空闲空间的组织
D. 文件的目录组织

3.【参考答案】C
【解析】成组链接法是 UNIX 系统中常见的管理空闲空间的方法,它可用于文件存储器空闲空间的组织,选择 C 选项。

4.关于文件存储空间的管理方式,( )需要使用空闲盘块号栈。
A. 空闲表法
B. 空闲链表法
C. 位示图法
D. 成组链接法

4.【参考答案】D
【解析】在成组链接法中,将空闲块分成若干组,每 100 个空闲块为一组,每组的第一空闲块登记了下一组空闲盘块号和空闲块总数。第一组称为空闲盘块号栈。选择 D 选项。

5.位示图可用于( )。
A. 实现文件的保护和保密
B. 文件目录的查找
C. 磁盘空间的管理
D. 主存空间的共享

5.【参考答案】C
【解析】位示图是磁盘空闲空间管理的一种方式,其做法是为文件存储器建立一张位示图,通过位示图上的二进制位反映整个存储空间的分配情况。C 选择正确。

6.若用 8 个字(字长 32 位)组成的位示图管理内存,字号、位号、块号均从 0 开始算起,则块号为 100 的内存块对应的位示图位置为( )。
A. 字号为 3,位号为 5
B. 字号为 3,位号为 4
C. 字号为 4,位号为 4
D. 字号为 4,位号为 5

6.【参考答案】B
【解析】位示图中,0~31 在 0 号字,32~63 在 1 号字,64~95 在 2 号字,96~127 在 3 号字,所以块号 100 在 3 号字中,3 号字的 0 号位是 96,1 号位是 97,依此类推,块号 100 在 4 号位中。另解,块号为 100 的内存块对应的位示图字号为 100 DIV 32 = 3,位号为 100 MOD 32 = 4,即字号为 3,位号为 4。选择 B 选项。

7.有一磁盘,共有 10 个柱面,每个柱面 20 个磁道,每个磁道分为 16 个扇区。采用位示图对其存储空间进行管理。如果字长是 16 个二进制位,那么位示图共需( )字。
A. 200
B. 128
C. 256
D. 512

7.【参考答案】A
【解析】位示图中,每 1 位表示一个扇区,共有 10×20×16=3200 个扇区,需要 3200 位大小的位示图表示,由于字长是 16 个二进制位,共需 3200/16=200 个字,A 选项正确。

8.虚拟文件系统 VFS 中的对象类型不包括( )。
A. 超级块(superblock)对象
B. 索引节点(inode)对象
C. 数据(data)对象
D. 文件(file)对象

8.【参考答案】C
【解析】为实现虚拟文件系统,UNIX 抽象了四种对象类型:超级块对象、索引节点对象、目录项对象、文件对象,其中不包括数据对象,选择 C 选项。

9.某操作系统的外存空间共有 512 块磁盘块,若用字长为 32 位的位示图管理磁盘空间,0 表示磁盘块空闲。请回答下列问题。
(1) 位示图需多少个字?
(2) 第 i 字第 j 位对应的块号是多少(假定块号、字号和位号都从 0 开始)?第 b 块对应的字号和位号是多少?
(3) 说明分配和回收一个盘块的工作流程。

9.【参考答案】
(1) 位示图需 512÷32=16 个字。
(2) 第 i 字第 j 位对应的块号 b=ni+j,第 b 块对应的字号 i=b/n,位号 j=b%n。
(3) 分配:先对位示图进行顺序查找,找出一个值为 0 的二进制位,然后将找到的二进制位的下标(行号和列号)转换为盘块号,最后修改位示图,将该位置 1;
回收:先将要回收的盘块号转换成为位示图中的行号和列号,再修改位示图,将该位置 0。

10.某系统采用成组链接法管理磁盘的空闲空间,目前盘块的链接情况处于图 4.27 所示的状态,先由进程 A 释放物理块 181、135、192,再由进程 B 中申请 4 个物理块。试分别画图说明进程 A 释放物理块后和进程 B 申请物理块后的盘块链接情况。

10.【参考答案】
进程 A 释放物理块 181、135、192 的过程为:(1) 由 S.free 知目前栈中有 99 个物理块,进程 A 释放物理块 181# 后,栈中的块数为 100,将 181 记录在 S.free [99] 中;(2) 进程 A 继续释放 135# 物理块,此时栈满,将栈中的 100 个盘块号记录在 135# 物理块中,然后将 135 记录在栈中,此时栈大小为 1;(3) 继续释放 192# 物理块,将其记录在栈中,此时栈大小为 2。进程 A 释放物理块后的盘块链接情况如图 4.28 所示。


进程 B 申请物理块的过程为:(1) 第一次申请,将 S.free 减 1,从栈顶取出 192# 物理块;(2) 申请第二块时,将 135# 物理块的内容,即 100 个盘块号复制到栈中,再将 135# 物理块分配给进程 B,此时 S.free 值为 100,即栈大小为 100;(3) 申请第三块和第四块时,依次分配栈顶的 181# 物理块和 98# 物理块。进程 B 申请物理块后的盘块链接情况如图 4.29 所示。

4.3.6 真题演练

11.【2014】现有一个容量为 10GB 的磁盘分区,磁盘空间以簇(Cluster)为单位进行分配,簇的大小为 4KB,若采用位示图管理该分区的空闲空间,即用一位(bit)标识一个簇是否被分配,则存放该位示图所需簇的个数为( )。
A. 80
B. 320
C. 80K
D. 320K

11.【参考答案】A
【解析】簇的总数为 10GB/4KB=2.5M。用一位标识一个簇是否被分配,整个磁盘需要 2.5M 位,即 2.5M/8=320KB,将 320KB 的数据存储,需要 320KB/4KB=80 个簇。

12.【2015】文件系统用位图法表示磁盘空间的分配情况,位图存于磁盘的 32~127 号块中,每个盘块占 1024 个字节,盘块和块内字节序均从 0 开始编号。假设要释放的盘块号为 409612,则位图中要修改的位所在的盘块号和块内字节序号分别是( )。
A. 81,1
B. 81,2
C. 82,1
D. 82,2

12.【参考答案】C
【解析】盘块号 = 起始块号 + 盘块号 / (1024×8) = 32+409612/(1024×8)=32+50=82,块内字节序号 = [盘块号 % (1024×8)] / 8 = [409612 % (1024×8)] / 8 =1。

13.【2019】下列选项中,可用于文件系统管理空闲磁盘块的数据结构是( )。
I. 位图
II. 索引节点
III. 空闲磁盘块链
IV. 文件分配表(FAT)
A. 仅 I、II
B. 仅 I、III、IV
C. 仅 I、III
D. 仅 II、III、IV

13.【参考答案】B
【解析】常用的文件系统管理空闲磁盘块的方法包括空闲表法、空闲链表法、位示图法和成组链接法,I、III 正确。文件分配表的表项和磁盘块一一对应,可以用一个特殊数字(如 0),标记磁盘块为空闲,因此文件分配表也可以用于管理空闲磁盘块,IV 正确。索引节点是用于记录文件描述信息的数据结构,一个文件对应一个索引节点,因此索引节点不能用于管理空闲磁盘块,II 错误。

4.4 本章重难点解析

4.4.1 易错点与补充知识点

1.文件控制块、索引节点、文件分配表等文件系统中数据结构的作用

1.文件控制块(FCB):是操作系统为每个文件建立的唯一数据结构,用于管理、控制和存取文件,其中包含了全部文件属性。

2.索引节点(inode):是一种记录了文件描述信息的数据结构,是 UNIX 系统为了方便查找文件设置的,这样在文件控制块中就只包含文件名和指向索引节点的指针两部分。

3.文件分配表(FAT):在分配文件的物理空间时使用,即显式链接分配时使用,其中存放的是同一个文件中每个盘块指向下一个盘块的指针。

4.用户打开文件表:是一个用来记录用户进程当前打开的所有文件的数据结构,其存储在 PCB 中,又称文件描述符表,表项为文件描述符和指向系统打开文件表的指针。

5.系统打开文件表:是一个维护所有进程打开文件的系统级描述符表,称为打开文件表,表项中描述了一个打开文件的所有信息。

6.访问控制表:记录每个用户的名称及其允许的访问类型,每个文件和目录设置一张。

2.文件控制块、索引节点和目录的关系

        为了方便对文件进行管理,操作系统为每个文件建立了文件控制块,其中包含文件的全部属性。文件控制块的有序集合就称为目录,目录项就是一个个的文件控制块。在查找文件时,只需用到文件名,因此 UNIX 系统将文件控制块中的除了文件名的其他信息放到另一个数据结构中,即索引节点,文件控制块中只存放文件名和指向索引节点的指针。文件控制块、索引节点和目录的关系如图 4.30 所示。


【提示】文件控制块和索引节点都可以理解为存放了文件描述信息的数据结构。

3.提升文件访问速度的方法

        1.预先读取:请求读取页面时,将一些之后的页面一起读取并缓存,这些页面可能会在之后被请求,可节省大量时间。

        2.延迟写:延迟写是将数据写入缓冲区,并在缓存首部设置延迟写标志,然后将此缓冲区放入空闲缓冲区链表的尾部。当有进程申请空闲缓冲区而得到该缓冲区时,才将该缓冲区内容写入磁盘,从而减少了不必要的访问磁盘操作。

        3.采用磁盘高速缓存:将文件内容放入磁盘高速缓存,访问高速缓存比访问磁盘快。

4.4.2 计算总结与重难题剖析

混合索引分配的计算
混合索引分配如图 4.31 所示,是整个章节考频最高的知识点,且常考计算题,考生一定要对此部分重点掌握。

设混合索引分配方式中,直接地址项数为 a,一次间址项数为 b,二次间址项数为 c,盘块大小为 n,一个盘号即一个地址项占 m。
常考题型:

1.文件最大长度的计算

        此类题可以先计算总共可以表示多少个盘块数,最后乘上盘块大小。一个盘块可存放 n/m 个地址项,一次间址可表示 b×n/m 个地址项,二次间址可表示 c×(n/m)^2 个地址项,则混合索引分配方式可表达的最大文件长度为 


        【例 4.3】设文件索引节点中有 7 个地址项,其中 4 个地址项是直接地址索引,2 个地址项是一级间接地址索引,1 个地址项是二级间接地址索引,每个地址项大小为 4B。若磁盘索引块和磁盘数据块大小均为 256B,则可表示的单个文件最大长度是( )。
A. 33KB
B. 519KB
C. 1057KB
D. 16513KB
解:文件的 4 个直接地址索引可指向 4 个盘块,对于间接地址,一个数据块可放 256/4=64 个地址,则 2 个一级间接索引可指向 2×64=128 个盘块,1 个二级间接索引可指向 1×64×64=4096 个盘块。7 个地址项可指向 4+128+4096=4228 个盘块,可表示的数据大小为 4228×256B=4228×1/4KB=1057KB,选择 C 选项。

2.给出文件偏移量,求读取此偏移量的访盘次数

        此类题应首先计算每级地址项所能表示的文件大小,找到文件偏移量所在的盘块在哪级地址项。如在直接地址项所指的盘块中,则需访盘 1 次,在一级间址项所指的盘块中,需访盘 2 次,m 级索引需访盘 m + 1 次。
        【注意】这里描述的是索引节点在内存中的情况,若索引节点不在内存,需要先将索引节点放入内存(增加一次访盘次数),再进行查找。

        【例 4.4】设文件索引节点中有 7 个地址项,其中 4 个地址项是直接地址索引,2 个地址项是一级间接地址索引,1 个地址项是二级间接地址索引,每个地址项大小为 4B。若磁盘索引块和磁盘数据块大小均为 256B,则访问文件最后一个字节需访问磁盘多少次?(假设此时文件索引节点还未读入内存)
解:在访问 (256×4+64×256×2+64×64×256)B=1057KB 处数据时,需访问磁盘 1 + 3 次:
(1) 题目中已说明索引节点还未读入内存,根据 FCB 将索引节点读入内存,需要一次访盘。
(2) 根据顶级索引表中二级间接地址读取其指向的一级间接地址块。
(3) 根据第二步获取的一级间接地址块中最后一个地址读取其对应的二级索引块。
(4) 根据第三步获取的二级索引块找到数据所在的对应磁盘块并读取数据。
        【例 4.5】在文件的索引节点中存放直接索引指针 10 个,一级和二级索引指针各 1 个。磁盘块大小为 1KB,每个索引指针占 4 个字节。若某文件的索引节点已在内存中,则把该文件偏移量(按字节编址)为 1234 和 307400 处所在的磁盘块读入内存,需访问的磁盘块个数分别是( )。
A. 1,2
B. 1,3
C. 2,3
D. 2,4
解:10 个直接索引指针指向的数据大小为 10×1KB=10KB。磁盘块大小为 1KB,每个索引指针占 4 个字节,则一个磁盘块可存放 1KB/4B=256 个索引指针。一级索引指针指向的数据大小为 256×1KB=256KB,二级索引指针指向的数据大小为 256×256×1KB=2^16KB=64MB。
按字节编址,偏移量为 1234 即 1234B,由于 1234B<10KB,可知直接索引指针指向此磁盘块,由于文件的索引节点已在内存,只需访问要找的磁盘块即可,即访盘 1 次。
        偏移量为 307400 即 307400B,由于 10KB+256KB<307400B<10KB+256KB+64MB,可知此磁盘块在二级索引指针指向的磁盘块中,需要先访盘 2 次得到文件所在磁盘块地址,再访盘 1 次得到要找的磁盘块,共访盘 3 次。选择 B 选项。

4.5 章末总结

4.5.1 本章知识点提炼

        文件管理这章重点知识点较多,学起来会感觉非常抽象,但也是 408 考试大题的高频考点,需考生对各个知识点有清晰的认识,并建立知识点之间的联系,能够想象出文件系统的工作过程。

        对于一个文件,文件系统除了要保存其文件数据外,还要保存其相关的描述信息,即文件元数据,描述信息包括基本信息、使用信息和存取控制信息。这么多的信息就需要专门设计一个数据结构来记录,即文件控制块。而对于大量的文件,用户想要分类管理的话,简单的一级、二级目录显然是无法满足用户需要的,因此大多数操作系统都采用树形目录结构。(即每个目录文件下都有多个子文件,并且除了根目录,每个目录文件又是上一级目录文件的子文件)

        目录结构和文件逻辑结构都是面向用户的,而考试中往往考查的是操作系统内部的实现过程,下面以创建文件的过程为例,分析操作系统所要完成的工作:

1.首先创建文件需要先确定外存是否有足够的空闲空间,要实现该功能就需要对外存空间进行管理,标明哪些块已使用,哪些块是空闲的,有四种方式(空闲表法,空闲链表法,位示图法和成组链接法),常考的是位示图法。

2.知道了可以分配的外存块后就要确定文件存储的物理结构,即解决将文件以什么方式存储在外存上的问题,由此引出文件分配三种方式:连续分配、链接分配和索引分配。

3.最后根据文件要存的位置,在相应目录文件中添加目录项。而目录项有两种构成方式:

        1.由于 FCB 包含了文件的完整信息,可以直接将该文件 FCB 作为一个目录项,文件在内存中的位置就记录在 FCB 中。

        2.由于文件查找目录时只需要用文件名进行搜索,则要想让一个目录文件包含尽可能多的目录项,就可以将 FCB 拆为文件名和其他属性(这部分叫做索引节点),此时一个目录项里面就只有文件名和文件的索引节点号,这样每个目录项的大小就比 FCB 小许多,每个索引节点号对应一个索引节点,文件在内存中的位置就记录在索引节点中。
        FCB 或索引节点中所要记录的文件位置信息是根据文件的物理结构(分配方式)来确定的。

        建立文件后,默认对文件进行打开,这就要为文件分配用户打开文件表项和系统打开文件表项,最后返回文件描述符 fd,以后读、写和关闭文件都只需用文件描述符作为参数,而不是文件名。

        对于文件的保护方面,可以通过在访问控制表中进行设置,来限制谁可以访问该文件,也可以限制对文件的访问类型,还可以对文件设置口令和密码进行加密。

        对于文件的共享方面,可以通过都链接到同一个索引节点进行硬链接的共享,也可以新建一个符号链接实现软链接的共享。

        而要对文件进行管理,就需要合理地设计文件系统的结构,为了让用户和外存设备进行交互,将文件系统分成多个不同的层次,下层为上层提供服务,上层使用下层的功能。此外,虚拟文件系统和文件系统挂载提供了对同一台计算机使用多个不同文件系统的支持,用户可以通过一个统一的接口使用不同的文件系统管理文件。

4.5.2 思考题解析

1.什么是 “按名存取”?文件系统如何实现对文件的按名存取?

        按名存取指用户不必关心数据实际保存在哪个存储介质的什么位置上,只需记住这个文件的所属目录和文件名就能操作文件。文件系统实现按名存取的步骤为:根据用户提供的文件名,检索文件目录中该文件的文件控制块(FCB)或索引节点,然后根据 FCB 或索引节点中的文件物理地址,将文件读入内存。

2.什么是文件的逻辑结构和物理结构?它们之间是否存在制约关系?
        文件的逻辑结构是指从用户的角度出发所观察到的文件的组织形式,文件的物理结构是指系统将文件存储在外存上所形成的一种存储组织形式,用户不可见。理论上讲,文件的逻辑结构和物理结构之间没有显式的制约关系,但是如果物理结构选择不当,也会影响逻辑结构的查找效率,例如,对于顺序文件的物理存储情况,若采用隐式链接存储,逻辑相邻物理上不一定相邻,即使在逻辑结构层面可以实现直接查找,但是实际查找时仍需根据物理块依次查找。

3.目录的主要功能是什么?是怎样实现的?
        目录最基本的功能是实现按名存取和允许文件重名,目录的功能还有实现文件共享和加快对目录的检索速度。这些功能通过设计合理的目录结构实现。

4.文件共享有几种方式?如何实现?
        文件共享有两种方式:基于索引节点的共享方式,又称硬链接;利用符号链接的共享方式,又称软链接。硬链接通过将文件目录项的指针都指向同一个索引节点实现共享,软链接通过建立一类特殊的文件,即符号链接文件实现共享。

5.什么是文件系统?
        文件系统是操作系统中负责存取和管理信息的模块,它采用统一方法对系统和用户的信息进行存储、检索、更新、共享和保护,并为用户提供一整套行之有效的文件使用及操作方法。

6.为什么要进行外存空闲空间管理?有几种方法?
        为了为文件分配盘块,而分配盘块就必须知道磁盘上哪些盘块是可用的,因此需要对空闲盘块提供分配和回收的手段。常用的管理方法有空闲表法、空闲链表法、位示图法和成组链接法,此外,由于文件分配表可以记录每个磁盘块的状态,也可用于管理空闲磁盘块。

4.6 * 文件系统实战 ²⁰

4.6.1 本章内容梳理

        文件系统这章内容比较抽象,概念较多,读完文件系统一章,不少同学都一头雾水,这是因为文件系统一词同时包含了两种含义:
        (1) 一种存储、管理、控制、保护计算机系统中持久数据的软件模块;
        (2) 一种以文件为单位存储和组织计算机数据,便于用户访问和查找数据的方法;以及外存中按照这种方法组织存储的数据集合。

        而《操作系统》中与文件系统相关的主要有以下几部分内容:
        (1) 何谓文件:什么是文件、什么是目录、什么是 “按名存取”、文件能用来存储什么。大多数同学在日常生活中已经对文件和目录产生了大量的感性认识:文件就是照片、音乐……,目录就是文件夹。《操作系统》在这种认识的基础上规范了对文件和目录的描述、从更高的角度审视了文件和目录(文件是对设备的抽象)。408 考试对这一部分考察较少,但这一部分是理解文件系统的基础内容。
        (2) 外存管理:包括磁盘的组成结构(盘面、扇区、磁道)、磁盘调度算法(SCAN、CSCAN)等。这一部分主要在 I/O 管理一章讲述,跟文件其实没有什么关系;但这一部分也决定了文件系统设计的底层逻辑。
        (3) 硬盘上的文件系统:包括文件在硬盘上的存储方式(连续分配、链接分配、索引分配)、在硬盘上建立文件系统所需要的额外信息(超级块、位示图、文件分配表、索引节点表等)、索引节点、链接和目录文件(如果使用的文件系统支持这些概念的话)的组成等,对应上边的释义 (2)。这一部分是 “静态” 的,规定了硬盘上的二进制位如何对应到我们看到、用到的文件。在这一层看来,磁盘是一个巨大的二进制串,通过某种方法 “编码” 了一棵目录 - 文件树,每个文件还有不少属性。我们平时说的文件系统(FAT32、NTFS )指的就是这个,它决定了磁盘分区如何存储文件、能存储多大的文件、读写一个文件需要访问几次内存。这一部分是 408 考试的重中之重,选择题和综合题都常有出现。
        (4) 内存中的文件系统:主要讲述了操作系统如何读取硬盘文件,部分对应上面的释义 (1)。这一部分是 “动态” 的,是操作系统的一个子系统,讲的是操作系统如何使用硬盘上的文件系统,以及操作系统为应用程序提供了什么样的接口。408 考试中,这一部分考察较少。

        这些内容盘根错节,相互交叉耦合,所以初学者看来可能会有混乱之感。读到这里的同学现在可以按照这个提纲再回想一遍,本章前文中各节的内容应该归到哪一部分。

4.6.2 FAT 文件系统

        一般而言,机械硬盘的一个扇区大小是 512B,但 512B 对于文件系统来说太小,为了提高效率,文件系统引入了块(有些文件系统叫做 “簇”,这里统称为块)的概念,以块作为空间管理和磁盘读写的单位。一个块一般由连续的 2^n 个扇区组成,每个块有一个对应的块号,这样来看磁盘就成了由块组成的有序集合。除提高效率以外,块还可以屏蔽不同存储介质的差异、消除 “柱面号・盘面号・扇区号” 这种复杂的寻址过程。当然,块的缺点在于一个文件再小(即使是 0B )也要占据一整块的空间。

        FAT(File Allocation Table )文件系统是 MS - DOS 以及 Windows 操作系统使用的一种文件系统,其发展经历了 FAT12、FAT16、FAT32 和 exFAT 等阶段。FAT 文件系统中,一块的大小为 2^n 扇区,n 最小为 0(1 扇区,512B),最大为 6(64 扇区,32KB)。FAT 文件系统引入的数据结构不多,主要就是文件分配表 FAT 和目录文件。下面将以 FAT32 为例进行讲解。

1.整体布局
FAT 文件系统整体布局如图 4.32 所示。

最开始的部分称为保留区,保留区中最重要的部分就是位于 0 号扇区(第一个扇区)的 DBR(DOS Boot Record,DOS 引导记录)扇区。这个扇区记录了文件系统的元数据以及之后各个区域的位置,相当于其他文件系统中的超级块。

DBR 扇区记录了以下信息:

        ·每扇区字节数(512、1024、2048、4096 );

        ·每块扇区数(1 到 64,必须为 2 的若干次方,可以在格式化时指定 );

        ·保留区长度(通常为 32 );

        ·FAT 表个数(通常为 2 );

        ·文件系统大小;

        ·根目录起始块号(通常为 2 )和 FSINFO 所在扇区号(通常为 1 );

        ·其他内容,如操作系统引导代码、存储介质、版本号、存有 “FAT32” 的字符串等等。

        保留区还包括 DBR 扇区的备份等其他内容。

        保留区之后是 FAT 区,用来存储 FAT 表(文件分配表 )。这也是 FAT 文件系统最重要的部分,FAT 文件系统正是得名于此。FAT 表既用于记录大于一块的文件的存储位置,又用于记录空闲块和坏块的位置,其结构将在下一节中介绍。值得注意的是,FAT 区中一般包含两个 FAT 表,二者内容完全一致。在 FAT1 损坏后文件系统仍然可以使用 FAT2 来恢复。

        FAT 区之后就是数据区,数据区起始于 2 号块,而一般而言数据区的第一部分就是文件系统的根目录。
2. 数据结构详解
接下来介绍 FAT 表和目录文件的结构。

        FAT 表由一系列 FAT 表项组成,FAT32 文件系统的每个 FAT 表项占 4 字节;数据区的每一块都对应一个 FAT 表项,根目录(2 号块 )对应 2 号 FAT 表项,以此类推。表项会记录对应块的状态。0 号表项和 1 号表项不和任何块对应,一般会写入特定值。如果根目录不大于一块,则 2 号表项为结束标记(见下文 );如果根目录大于一块,则 2 号表项为下一块的块号。

FAT 表项的取值有以下几种情况:
(1) 空闲标记(0x00000000 ):对应块不是任何一个文件的组成部分,未被分配;
(2) 结束标记(0x0FFFFFFF ):对应块是某个文件的组成部分,且为文件的最后一块;
(3) 坏块标记(0x0FFFFFF7 ):对应块是坏块;
(4) 下一块(0x00000002 - 0x0FFFFFF6 ):对应块是某个文件的组成部分,且并非文件的最后一块,其值为下一块的块号。

        FAT 表既用于标注块的状态(占用、空闲、坏块),又用于标注大文件的物理存储结构。将大于一块的文件存储在多个不连续的物理块中,块对应的 FAT 表项存储下一块的地址,通过这种方式连成一个链表,将文件串联起来。文件的最后一块对应的 FAT 表项则设置为结束标记。

        FAT 文件系统中,目录也是一种特殊的文件。目录文件由一系列目录项组成,每个目录项占 32 字节,其中记录了以下信息:

        文件名(11 字节,同一目录下不能有重复文件名);

        目录项属性(1 字节,包括是否是目录、是否只读、是否隐藏等);

        创建时间(4 字节,精确到 0.1 秒);

        最后访问时间(2 字节,精确到日);

        最后修改时间(4 字节,精确到 2 秒);

        起始块号(2 字节);

        文件长度(4 字节)。

        根目录以外的目录(子目录)都会有两个特殊的目录项,分别是 “.” 和 “..”,分别指向自身和父目录(若父目录为根目录,则对应的起始块号设置为 0,这属于特殊情况)。另外,细心的同学可能会发现,文件名只有 11 字节,而不少文件的文件名都超过了 11 字节。FAT 文件系统为了支持长文件名,引入了 LFN(Long File Name)目录项,用多个目录项来存储一个文件的文件名。

        目录、FAT 表和硬盘结构的关系如图4.33所示。

3. FAT 文件系统的使用

        在 FAT 文件系统中创建一个文件时,首先要找到一个空闲块,若文件不大于一块,则直接将文件内容写入这个块中,并将这个块的 FAT 表项设置为结束标记;若文件大于一块,则需要找到多个空闲块,将文件内容写入这些块中,并将第一块的 FAT 表项设置为第二块的块号,第二块的 FAT 表项设置为第三块的块号,以此类推。最后,还要将文件元数据和起始块号写入文件对应的目录项中,如果目录没有空闲项(放满了),就增加目录的大小以容纳新的目录项。

        读取一个文件时,只需要从目录项中找到起始块号,读完一块后通过 FAT 表找到下一块,直读到结束标记为止。删除一个文件时,只需要将文件对应的目录项设置删除标记,再将文件的各个块的 FAT 表项设置为空闲标记即可。

        现在来计算 FAT 文件系统的一些性质。
        首先是分区大小的上限。原理上来说,分区大小的上限只受到 FAT 表项长度的制约,因为 FAT 表项要能够指向最大块号;假定扇区大小为 512B,块最大为 32KB,考虑到 FAT32 中 FAT 表项只有后 28 位是有效的(前四位直接忽略),这样计算的上限大约是 2^28×32KB=8TB(exFAT 的表项也是 32 位,但是 32 位全部有效)。不过实际上 DBR 扇区还有一个用于记录文件系统大小的字段,FAT32 中这个字段只有 32 位,因此分区大小的上限实际上是 2^32×512B=2TB。(而且,并不是所有 FAT32 文件系统驱动都正确实现了 2TB 的分区,因为 Windows XP 操作系统的硬盘格式化软件人为设置了格式化分区大小的上限为 32GB。)

        然后是文件大小的上限。原理上来说,FAT 文件系统中文件大小没有上限,分区有多大文件就能有多大,长度不够时用 FAT 表项串联即可。但实际上目录项中有一个用于记录文件长度的字段,FAT32 中这个字段只有 32 位,单位是字节,因此文件大小的上限实际上大约是 232B=4GB。之所以说是大约,是因为严格来说是 0 4GB−1B。

        最后是访问文件的效率。如果文件不大于一块,那么在已知文件起始块号的情况下,访问文件的任何位置都无需处理 FAT 表,只需访问一次硬盘,效率非常高。如果文件大于一块,那么在已知文件起始块号的情况下,访问文件的某一块需要在 FAT 表中跳转 (块数 - 1) 次(相当于访问链表的最后一个元素,时间复杂度为 O(n) ),然后访问硬盘一次。这也导致 FAT 极端偏向于小文件:大文件的链表很长,如果块大小为 512B,那么一个访问 4GB 文件的最后一块需要在 FAT 表中跳转 4GB/512B−1=2^23−1 次,约等于 8.3×106 次。即便这一操作全部在内存中进行,这也是很大的开销。

4. 评价

        FAT 文件系统是一个相当优秀的文件系统。它的设计简单、实现容易、小文件效率高、可移植性好、兼容性好。FAT 还通过备份两份 FAT 表以及在 FAT 表中记录坏块的方式提高了可靠性。直至今日,FAT 文件系统仍然是最常用的文件系统之一,游戏主机 Nintendo Switch 中存储卡的默认格式就是 FAT 文件系统。

        但是,FAT 文件系统的缺点也很明显。首先就是大文件效率低。其次,FAT 文件系统存在碎片化问题,这里碎片的含义和存储管理一章不同,指的是同一个文件的各个块不一定是连续的。如果磁盘有足够的空闲空间,那么文件系统可以将文件的各个块分配在磁盘上连续的位置,在 FAT 表中体现为上一个块直接指向下一个块,这样就有利于提高文件的读写速度。然而,在一段时间使用后,磁盘上的空闲空间会变得零散,这时文件系统就不得不将文件的各个块分配在磁盘上不连续的位置,这会导致文件的读写效率降低(这一点可以参考第五章磁盘调度算法来看)。为解决这一问题,Windows XP 中就提供了一个小工具用于整理磁盘碎片。除此之外,FAT32 设计太早,没有考虑到现在的大容量硬盘和大文件的需求,也没有考虑到文件保护和共享的需求(不支持文件权限、不支持硬链接 )。

4.6.3 基于 inode 的文件系统

        另一类常见的文件系统是基于 inode 的文件系统,包括 UFS(Unix File System)和基于 UFS 的 ext 系列文件系统等。下面内容以 ext 文件系统(特别是 ext2)为例,但并不会侧重于 ext 的细节,而是着重介绍基于 inode 的文件系统的一些共性特点。

1. 整体布局

        ext 中,最开始的部分是保留区,长度为两个扇区。保留区用于存储引导代码,若不需要则可以置零。保留区之后是若干块组,每个块组包含若干块。每个块组的结构基本相同:都包含了超级块、块组描述符表、块位示图、inode 位示图、inode 表和数据区。块组为位示图等数据结构提供了一种合理的切分方式,增加了文件系统能够支持的最大分区大小;还能提高文件系统的局部性,提升效率;超级块的多份备份也能提高文件系统的可靠性。

        块组中,最开始的部分是超级块,长度为 1024B(两个扇区)。超级块记录了文件系统的元数据,包括块大小、总块数、每组块数、inode 数、空闲块数、空闲 inode 数等。紧接着是块组描述符表,用于描述各个块组中块位示图、inode 位示图、inode 表的位置,以及各个块组中空闲块、空闲 inode 和目录的数量。每个块组中超级块和块组描述符表都是相同的,存储多次是为了提高可靠性,但如果每次修改都要修改多份就会导致效率较低。因此 Linux 默认启用了 “稀疏超级块” 选项,启用后只会在某些特定块组中备份这两者。

        跟在块组描述符表后的是块位示图和 inode 位示图,分别用于记录当前块组中块和 inode 的使用情况。位示图中每个 bit 对应一个块或 inode,0 表示空闲,1 表示已使用。ext 中,每块有多少 bit,每个块组就会有多少块,因此块位示图恰好占用一块。而 inode 数不大于块数,因此 inode 位示图也只占用一块。

        紧随其后的是 inode 表,用于存储 inode,每个 inode 占用 128B。FAT 文件系统将文件元数据和起始地址全部存储在目录文件中,文件第一块之后的地址存储在 FAT 表中;而 ext 则将文件名以外的元数据和文件地址都存储在称为 inode 的数据结构中,每个文件(或目录)对应一个 inode,目录文件只存储文件名和 inode 号。inode 表后就是真正的数据区。

        至此,我们来总结一下:FAT 文件系统中,FAT 表同时起到了空闲区域管理和记录文件物理地址的作用;而 ext 文件系统中,位示图起到了空闲区域管理的作用,inode 表起到了记录文件物理地址的作用。

2. 数据结构详解

接下来介绍 inode 和目录文件的结构。

        inode 的结构如图 4.35 所示,主要记录了两部分信息:文件元数据和文件地址。文件元数据包括文件类型、文件权限、所有者信息、文件尺寸、创建 / 修改 / 访问时间等,还有一个重要的字段是链接数,表示有多少个目录项指向这个 inode。ext 中,文件地址包括 12 个直接块指针、1 个一级间接块指针、1 个二级间接块指针和 1 个三级间接块指针。

        ext 文件系统中,目录同样视为一种特殊的文件,和普通文件的差别在于 inode 中文件类型字段的不同。目录文件的数据区中存储的是目录项,包含了文件名、名字长度、inode 号等信息。不同于 FAT 文件系统,目录项的长度取决于文件名的长度,而不是固定的若干字节。因此,目录中存储目录项的个数并不确定,后一条目录项的起始地址也需要根据前一条目录项的长度来计算。每个子目录的头两个目录项分别是 “.” 和 “..”。

3. ext 文件系统的使用

        在 ext 文件系统中创建文件时,首先要找到一个空闲 inode。操作系统会优先在文件父目录所在的块组中分配 inode,以此确保一个目录中所有文件的信息都在同一块组中。然后按照直接块、一级间接块、二级间接块、三级间接块的顺序安排文件内容,在位示图中找到足够多的空闲块,将文件内容写入这些块中,并将位示图中对应位置设为 1,更新组描述符和超级块中的数据。操作系统会优先在同一块组中分配块,但如果同一块组中没有足够空间,那么也会在其他块组中分配块。最后,还要将文件元数据和起始块号写入文件对应的目录项中。创建目录时,操作系统则会优先在空闲空间较多的块组中分配 inode 和块,从而平衡各个块组的空闲空间,减少碎片。

        删除文件时,操作系统会将文件对应的 inode 的链接数减一,如果链接数为零,则将 inode 对应的块全部释放,并将 inode 位示图中对应位置设为 0。读取文件时,操作系统会计算要读取的块位于直接块中还是间接块中,根据目录项中 inode 号找到 inode,再根据 inode 中的文件地址找到文件内容。

        ext 文件系统还提供了硬链接和软链接的功能。创建硬链接时,操作系统为硬链接分配一个新的目录项并指向同一个 inode,inode 中的链接数加一。硬链接建立后,用户将无法判断一个文件到底源文件还是硬链接;换言之,普通文件也可以看作是文件唯一的硬链接。所有硬链接没有全部删除前,文件不会被真正删除。软链接则是一种特殊的文件,文件中存储的是源文件的路径;如果完整路径的长度小于 60 字节,那么路径可以直接存储于 inode 中。

        现在来计算 ext 文件系统的一些性质,我们假设块大小为 L,块指针长度为 32 位。
        首先是分区大小的上限。理论上来说,和 FAT 文件系统相似,分区大小同样受限于块指针长度,因此分区大小上限为 232L。
        然后是单个文件大小的上限。理论上来说,文件大小只受限于各级指针能够索引到的块的数量。12 个直接块指针对应 12 块,长 12L;一级块指针对应 L/4B 个块,长 (L/4B)×L;与此相似,二级块指针和三级块指针共对应 ((L/4B)2+(L/4B)^3)×L;因此单个文件大小的上限为 (12+(L/4B)+(L/4B)^2+(L/4B)^3)×L。块大小为 4KB 的 ext 文件系统中,单个文件大小的上限略大于 4TB。
        最后是访问文件的效率。可以看出,取得 inode 后,访问任意一块最多需要访问 4 次硬盘。换言之,ext 文件系统的访问效率与文件大小无关,是 O(1) 的。

        【总结】ext 文件系统相比于 FAT 文件系统有很多优点。首先,ext 文件系统对中等大小文件和大文件的支持都好于 FAT 文件系统;其次,ext 文件系统支持文件权限、硬链接、软链接等功能;最后,ext 文件系统碎片更少,数据局部性更强,效率更高。时至今日,ext 文件系统从第二版到第四版,加入了日志、压缩、巨型文件支持等功能;其他文件系统如 ZFS、Btrfs 等不断出现,加入了写时复制、快照等功能。但是,ext 文件系统的设计思想仍然是现代文件系统的基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丰锋ff

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值