当前位置: 首页 > news >正文

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

第 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.什么是 “按名存取”?文件系统如何实现对文件的按名存取?

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

4.1.1 文件的基本概念

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

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

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 就是一个文件目录项。目录也是以文件的形式存储,称为目录文件。如表 4.3 为一个可能的目录文件示例。

3. 索引节点

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

        【提示】 文件控制块和索引节点不同,一般文件控制块包括文件的全部属性,而索引节点包括除了文件名的全部属性。但在 UNIX 系统中,文件控制块中仅包括文件名和指向索引节点的指针两部分,其中,文件名占 14B,索引节点指针占 2B。
        索引节点的引入可提高文件的查找速度。例如,假设某文件系统磁盘块大小为 1KB,每个文件目录项占 64B,此时每个盘块仅能存放 16 个目录项。若某目录下有 64 个目录项,则该目录占用四个盘块,查找时采用顺序查找,查找一次目录需平均访盘 2 次;若采用索引节点,设索引节点大小 16B,每个盘块能存放 64 个目录项,此时只占用一个盘块,查找一次目录只需访盘 1 次。
        【举例】 假设有一个老图书馆里面有一本登记簿,上面每一页记录一本书的信息和存放位置,通过书名检索目录可以得到书籍信息所在的页码,再通过书籍信息页可以找到书籍位置。登记簿的目录就可以看作文件控制块,书籍信息页可以看作索引节点。
        索引节点的优点:可以有效提升文件检索的速度,方便文件共享。
        索引节点的两个状态:一般情况下,索引节点存储在磁盘上,这种状态下的索引节点称为磁盘索引节点;当文件被打开时,该文件对应的磁盘索引节点会被复制并装入内存,这种状态下的索引节点称为内存索引节点。内存索引节点不但拥有磁盘索引节点记录的所有信息,还增加了部分内容。

(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 的作用是删除某一个硬链接,全部硬链接删除时操作系统才会回收文件所占用的空间。

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

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

        (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,说明还有其他进程正在使用此文件,直接返回,否则将内存索引节点复制到相应的磁盘索引节点中,释放此内存索引节点。
        【提示】 关闭文件以及读、写文件之前需要先打开文件,获取文件描述符,关闭和读、写文件使用文件描述符而不是文件路径名作为参数。
        【拓展】 系统打开文件表中文件打开计数和索引节点中的引用计数不同,前者反映多少进程通过同一个读写指针共享文件,后者反映多少进程共享文件。实际做题时,可以看情况考虑,一般不加区分。

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

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),其原理为:为每个文件和目录配置一个访问控制表,表中记录每个用户的名称及其允许的访问类型,如读取、写入、执行等。当用户请求访问特定文件时,操作系统会首先检查访问控制表中当前用户的访问权限。如果该用户属于可访问的,则允许访问;否则会发生保护冲突,并且用户被拒绝访问。
        访问控制表的优点是可以对每个单一用户设定其所允许的访问类型,能够进行复杂的访问方法。缺点是系统用户量大、控制功能多导致维护困难,长度不可预计。
采用精简的访问列表可以解决访问控制表的问题。精简的访问列表中采用三种用户类型:

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

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

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


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

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

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

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

4.1.5 文件的逻辑结构

        文件的逻辑结构是指从用户的角度出发所观察到的文件的组织形式,它独立于文件的物理特性。从用户的角度而言,文件的逻辑记录是进行存取操作的基本单位。
文件的逻辑结构按是否有结构,可以分为两大类:一是无结构文件,这是指由字符流 / 字节流构成的文件,故又称流式文件;二是有结构文件,这是指由记录构成的文件,故又称记录式文件。按文件的组织方式,有结构文件又可以分为顺序文件、索引文件和索引顺序文件。

1.无结构文件(流式文件)
        无结构文件中的内容是一串字符流 / 字节流,又称流式文件,其长度以字节为单位,通过读、写指针来指出下一个要访问的字符。
        在系统中运行的大量源程序、可执行文件、库函数等,所采用的就是无结构的文件形式。事实上,有许多应用不要求文件内再区分记录,强制分割源程序文件为若干记录只会带来操作复杂、开销加大等缺点,因而,为了简化系统,大多数现代操作系统如 Linux 系统只提供流式文件,即使是有结构文件,也被视为流式文件,系统不对文件进行格式处理和解释,对文件内容的具体解释方式由应用程序决定。

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

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

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

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

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

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

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


        如图 4.3 所示,索引文件是指除了文件本身外,另建立一张索引表,索引表和主文件一起构成的文件。其中索引表记录文件中每一条记录的指针和记录的长度,按关键字排序,因此其本身也是一个定长记录的顺序文件。
        索引文件的优点:把对变长记录顺序文件的顺序查找转变为对定长记录索引文件的随机查找,从而加快查找速度。
        索引文件的缺点:由于需要配置索引表,且每个记录都要有一个索引项,增加了存储开销。
        【举例】 索引文件通常用于对信息的及时性要求比较严格、且很少会对所有数据进行处理的应用程序中,例如航空公司的订票系统和商品库存控制系统。

(3) 索引顺序文件

        由于顺序文件不能随机查找,而索引文件中建立索引表的开销较大,因此提出了索引顺序文件的概念。索引顺序文件中,对文件记录进行分组,然后为每组的第一条记录在索引表中建立一个索引项。其中,分组的组间关键字必须有序,组内关键字可以是无序的。
        查找索引顺序文件时,首先根据用户提供的关键字以及某种算法(如折半查找)查找索引表,找到记录所在的组,再进行组内顺序查找。如图 4.4 所示,文件中包含姓名和其他属性,姓名为关键字,按姓名首字母进行分组,将每组第一个姓名和其位置指针放入索引表。查找时,先通过索引表找到所在的组,再在组内顺序查找。
【提示】 索引顺序文件的查找相当于数据结构中的分块查找。
        索引顺序文件分组的最好情况是,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 小节介绍。
        文件分配方式指的是文件物理空间的分配,即如何为文件分配磁盘块。常用的文件分配方法有三种:连续分配、链接分配和索引分配。

1.连续分配
        连续分配为每个文件分配一组相邻的磁盘块,文件中的逻辑记录顺序和物理记录顺序完全一致,由此所形成的文件结构称为顺序文件结构。
        【提示】 连续分配方式和数据结构中的顺序表物理结构类似,两者的增删改查等操作具有很强的相似性,可以对比学习。
        文件的连续分配可用首块磁盘地址和文件所占盘块数来定义。文件的目录项中记录该文件第一个记录所在的盘块号和文件长度。如果文件占 n 块,并从位置 b 开始,则文件将占有块 b, b + 1, b + 2, …, b + n - 1,如果要访问文件的第 i 块,可以直接访问块 b + i - 1。因此,连续分配支持顺序访问和随机访问。
        【提示】 顺序访问是指对记录进行依次查找,直到找到其所在地址进行访问;随机访问又称直接访问,指程序按任意顺序访问记录。
        如图 4.5 所示,假定记录和盘块的大小相同。文件 abc 的第一个盘块号是 2,文件长度为 3,因此在盘块号为 2、3、4 的三个盘块中存放文件 abc 的数据。


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

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

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

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

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

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

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

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

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

        (3) 创建文件时无需说明文件的大小,文件可以动态增长。
根据指针位置的不同,链接分配可分为隐式链接和显式链接两种形式。

①隐式链接

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

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

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

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

②显式链接

        为了解决隐式链接访问速率慢的问题,提出了显式链接。显式链接相当于把隐式链接中每个盘块末尾的、指向下一个盘块的指针提取出来,存放在一张链接表中,该表称为文件分配表(File Allocation Table, FAT),一个磁盘中仅设置一张,存放在磁盘固定位置。FAT 所有文件共用,开机时将其从磁盘读入内存并常驻内存,因此查找 FAT 的过程是在内存中进行的。
        【提示】 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) 不会产生外部碎片。
索引分配的缺点如下:

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

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

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

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

        (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。
        【提示】 混合索引分配为全国统考重要考点,考生务必熟练掌握。

4. 文件分配方式比较

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

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 选项。

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 个记录~,采用链接存储结构,每个记录及链接指针占用一个磁盘块,主存储器中的磁盘缓冲区的大小与磁盘块的大小相等。为了在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 系统中,目录就是文件夹。

相关文章:

  • 小型气象站应用之鱼塘养殖方案
  • 中国30米年度土地覆盖数据集及其动态变化(1985-2022年)
  • 【AI论文】EnerVerse-AC:用行动条件来构想具身环境
  • 【滑动窗口】LeetCode 1658题解 | 将 x 减到 0 的最小操作数
  • 如何利用技术手段提升小学数学练习效率
  • 【001】Cython功能及入门
  • 2025.05.17淘天机考笔试真题第三题
  • Scratch游戏 | 3D极速坡道
  • ModuleNotFoundError: No module named ‘SDToolbox‘
  • 基于Yolov8+PyQT的老人摔倒识别系统源码
  • 重排序模型解读:gte-multilingual-reranker-base 首个GTE系列重排模型诞生
  • 【网络编程】十一、四万字详解 TCP 协议
  • 2025.05.17淘天机考笔试真题第二题
  • profibusDP主站转profinet网关接ABB电机保护单元与1200plc通讯
  • 大额支付系统和小额支付系统的区别在哪呢?
  • Qt做的应用程序无法彻底关闭的问题解析
  • 如何通过交流沟通实现闭环思考模式不断实现自身强效赋能-250517
  • JavaScript基础-作用域链
  • 【和春笋一起学C++】(十四)指针与const
  • cadence安装license manager无法开启,显示并行配置不正确
  • 墨西哥海军一载两百余人帆船撞上纽约布鲁克林大桥,多人落水
  • 新城市志|GDP万亿城市,一季度如何挑大梁
  • 国际乒联主席索林:洛杉矶奥运会增设混团是里程碑事件
  • 用贝多芬八首钢琴三重奏纪念风雨并肩20年
  • 秦洪看盘|风格有所转变,热钱回流高弹性品种
  • 大环线呼之欲出,“金三角”跑起来了