### 2. 有结构文件
有结构文件是指由一个以上的记录构成的文件,所以也称记录式文件。各记录由相同或不同数量的数据项组成,根据各记录的长度是否相等,可分为定长记录和变长记录两种。
1)定长记录。文件中所有记录的长度都是相同的,各数据项都在记录中的相同位置,具有相同的长度。检索记录的速度快,方便用户对文件进行处理,广泛用于数据处理中。
2)变长记录。文件中各记录的长度不一定相同,原因可能是记录中所包含的数据项数量不同,也可能是数据项本身的长度不定。检索记录只能顺序查找,速度慢。
有结构文件按记录的组织形式可以分为顺序文件、索引文件、索引顺序文件。
#### (1)顺序文件
文件中的记录一个接一个地顺序排列,记录可以是定长记录或变长记录。顺序文件中记录的排列有两种结构:① 串结构,各记录之间的顺序与关键字无关,通常是按存入的先后时间进行排列,检索时必须从头开始顺序依次查找,比较费时;② 顺序结构,所有记录按关键字顺序排列,对于定长记录的顺序文件,检索时可采用折半查找,效率较高。
在对记录进行批量操作,即每次要读或写一大批记录时,顺序文件的效率是所有逻辑文件中
<!-- page: 269 -->
最高的。此外,对于顺序存储设备(如磁带),也只有顺序文件才能被存储并能有效地工作。在经常需要查找、修改、增加或删除单个记录的场合,顺序文件的性能较差。
## (2) 索引文件
对于定长记录的顺序文件,要查找第 $i$ 条记录,可直接根据下式计算得到第 $i$ 条记录相对于第1条记录的地址: $A_{i} = iL$ 。然而,对于变长记录的顺序文件,要查找第 $i$ 条记录,必须顺序地查找前 $i - 1$ 条记录,以获得相应记录的长度 $L$ ,进而按下式计算出第 $i$ 条记录的地址:
$$
A _ {i} = \sum_ {t = 0} ^ {t - 1} L _ {t} + 1
$$
变长记录的顺序文件只能顺序查找,效率较低。为此,可以建立一张索引表,为主文件的每个记录在索引表中分别设置一个索引表项,其中包含指向记录的指针和记录长度,索引表按关键字排序,因此其本身也是一个定长记录的顺序文件。索引文件示意图如图4.4所示。这样就将对变长记录顺序文件的顺序检索,转变成了对定长记录索引文件的随机检索,从而加快了记录的检索速度。
图4.4 索引文件示意图
索引文件需要配置索引表,且每个记录都要有一个索引项,因此增加了存储开销。
## (3) 索引顺序文件
索引顺序文件是顺序文件和索引文件的结合。最简单的索引顺序文件只使用了一级索引,先将变长记录顺序文件中的所有记录分为若干组,然后为文件建立一张索引表,并为每组中的第一个记录建立一个索引项,其中包含该记录的关键字和指向该记录的指针。
图4.5所示为索引顺序文件示意图,其中主文件包含姓名和其他数据项,姓名为关键字,记录按姓名的首字母分组,同一个组内的关键字可以无序,但是组与组之间的关键字必须有序。将每组的第一个记录的姓名及其逻辑地址放入索引表,索引表按姓名递增排列。检索时,首先查找索引表,找该记录所在的组,然后在该组中使用顺序查找,就能很快地找到记录。
图4.5 索引顺序文件示意图
对于含有 $N$ 条记录的顺序文件,查找某关键字的记录时,平均需要查找 $N / 2$ 次。在索引顺序
<!-- page: 270 -->
文件中,假设 $N$ 条记录分为 $\sqrt{N}$ 组,索引表中有 $\sqrt{N}$ 个表项,每组有 $\sqrt{N}$ 条记录,在查找某关键字的记录时,先顺序查找索引表,需要查找 $\sqrt{N}/2$ 次,然后在主文件对应的组中顺序查找,也需要查找 $\sqrt{N}/2$ 次,因此共需查找 $\sqrt{N}/2 + \sqrt{N}/2 = \sqrt{N}$ 次。显然,索引顺序文件提高了查找效率,若记录数很多,则可采用两级或多级索引。这种方式就是数据结构中的分块查找。
索引文件和索引顺序文件都提高了查找速度,但都因配置索引表而增加了存储空间。
(4)直接文件或敷列文件(Hash File)
给定记录的键值或通过散列函数转换的键值直接决定记录的物理地址。散列文件具有很高的存取速度,但是会引起冲突,即不同关键字的散列函数值可能相同。
复习了数据结构的读者读到这里时,会有这样的感觉:有结构文件逻辑上的组织,是为在文件中查找数据服务的(顺序查找、索引查找、索引顺序查找、哈希查找)。
## 4.1.5 文件的物理结构
前面说过,文件实际上是一种抽象数据类型,我们要研究它的逻辑结构、物理结构,以及关于它的一系列操作。文件的物理结构就是研究文件的实现,即文件数据在物理存储设备上是如何分布和组织的。同一个问题有两个方面的回答:一是文件的分配方式,讲的是对磁盘非空闲块的管理;二是文件存储空间管理,讲的是对磁盘空闲块的管理(详见4.3节)。
**数据通知** ▶ 不同物理结构的特点和比较(2009、2011、2013、2020)
文件分配对应于文件的物理结构,是指如何为文件分配磁盘块。常用的文件分配方法有三种:连续分配、链接分配和索引分配。注意与文件的逻辑结构区分,从历年的经验来看,这是很多读者容易搞混的地方(读者复习完数据结构后,可以类比线性表、顺序表和链表之间的关系)。
类似于内存分页,磁盘中的存储单元也被分为一个个的块,称为磁盘块,其大小通常与内存的页面大小相同。内存与磁盘之间的数据交换(磁盘I/O)都是以块为单位进行的。
### 1. 连续分配
**微量通知** ▶ 连续分配的应用和分析(2011、2012、2014)
连续分配方法要求每个文件在磁盘上占有一组连续的块(见图4.6)。磁盘地址定义了磁盘上的一个线性排序,这种排序使进程访问磁盘时需要的寻道数和寻道时间最小。
图4.6 连续分配
<!-- page: 271 -->
采用连续分配时,逻辑文件中的记录也顺序存储在相邻的物理块中。一个文件的目录项中应记录该文件的第一个磁盘块的块号和所占用的块数。若文件长 $n$ 块并从位置 $b$ 开始,则该文件将占有块 $b, b + 1, b + 2, \dots, b + n - 1$,要访问文件的第 $i$ 块,可直接访问块 $b + i - 1$。
连续分配的优点:①支持顺序访问和直接访问。②顺序访问容易且速度快,文件所占用的块可能位于一条或几条相邻的磁道上,磁头的移动距离最小。缺点:①要为一个文件分配连续的存储空间,与内存分配类似,为文件分配连续的存储空间会产生很多外部碎片。②必须事先知道文件的长度,也无法满足文件动态增长的要求,否则会覆盖物理上相邻的后续文件。③为保持文件的有序性,删除和插入记录时,需要对相邻的记录做物理上的移动。
## 2. 链接分配
链接分配是一种采用离散分配的方式。链式分配的优点:①消除了磁盘的外部碎片,提高了磁盘的利用率。②便于动态地为文件分配盘块,因此无须事先知道文件的大小。③文件的插入、删除和修改也非常方便。链接分配又可分为隐式链接和显式链接两种形式。
## (1)隐式链接
### 简易阅读
链接分配的应用和分析(2014)
隐式链接方式如图4.7所示。目录项中含有文件第一块的指针(盘块号)和最后一块的指针。每个文件对应一个磁盘块的链表,磁盘块分布在磁盘的任何地方。除文件的最后一个盘块外,每个盘块都存有指向文件下一个盘块的指针,这些指针对用户是透明的。
图4.7 隐式链接方式
隐式链接的缺点:①只支持顺序访问,若要访问文件的第 $i$ 块,则只能从第1块开始,通过盘块指针顺序查找到第 $i$ 块,随机访问效率很低。②稳定性问题,文件盘块中的任何一个指针出问题,都会导致文件数据的丢失。③指向下一个盘块的指针也要耗费一定的存储空间。
### 简易阅读
文件空间分配与簇的关系(2017、2018)
为了提高查找速度和减小指针所占用的存储空间,可以将几个盘块组成一个簇,按簇而不按块来分配,可以大幅地减少查找时间,也可以改善许多算法的磁盘访问时间。比如一簇为4块,这样,指针所占的磁盘空间比例也要小得多。这种方法的代价是增加了内部碎片。
<!-- page: 272 -->
## (2) 显式链接
显式链接是指将用于链接文件各物理块的指针,显式地存放在内存的一张链接表中,该表在整个文件系统中仅设置一张,称为文件分配表(File Allocation Table,FAT)。每个表项中存放指向下一个盘块的指针。文件目录中只需记录该文件的起始块号,后续块号可通过查FAT找到。例如,某磁盘共有100个盘块,存放了两个文件:文件“aaa”占三个块,依次是 $2\rightarrow 8\rightarrow 5$;文件“bbb”占两个块,依次是 $7\rightarrow 1$。其余盘块都是空闲块,该磁盘的文件分配表(FAT)如图4.8所示。
图4.8 磁盘的文件分配表
### 前瞅测绘
FAT的作用(2019)
不难看出,FAT的表项与全部磁盘块一一对应,并且可以用一个特殊的数字-1表示文件的最后一块,可以用-2表示这个磁盘块是空闲的(当然也可指定为 $-3, -4$)。因此,FAT还标记了空闲的磁盘块,操作系统可以通过FAT对磁盘空闲空间进行管理。当某进程请求系统分配一个磁盘块时,系统只需从FAT中找到-2的表项,并将对应的磁盘块分配给该进程即可。
显式链接的优点:①支持顺序访问,也支持直接访问,要访问第 $i$ 块,无须依次访问前 $i - 1$ 块;②FAT在系统启动时就被读入内存,检索记录是在内存中进行的,因此不仅显著提高了检索速度,还明显减少了访问磁盘的次数。缺点:FAT需要占用一定的内存空间。
## 3. 索引分配
### (1) 单级索引分配方式
#### 前瞅测绘
索引分配的应用和分析(2012)
事实上,在打开某个文件时,只需将该文件对应的盘块的编号调入内存即可,完全没有必要将整个FAT调入内存。为此,应该将每个文件所有的盘块号集中地放在一起,当访问到某个文件时,将该文件对应的盘块号一起调入内存即可,这就是索引分配的思想。它为每个文件分配一个索引块(表),将分配给该文件的所有盘块号都记录在该索引块中,如图4.9所示。
例如,假设盘块大小为 $4\mathrm{KB}$,每个盘块号占 $4\mathrm{B}$,则一个索引块中可存放1024个盘块号,若采用单级索引,则支持的最大文件为 $1024 \times 4\mathrm{KB} = 4\mathrm{MB}$。
索引分配的优点是支持直接访问,当要访问第 $i$ 块时,索引块的第 $i$ 个条目指向的便是文件的第 $i$ 个块。索引分配也不会产生外部碎片。缺点是索引块增加了额外的存储空间开销。
索引块的主要问题是,每个文件必须有一个索引块,当文件很小时,比如只有数个盘块,该方式仍为之分配一个索引块,此时索引块的利用率很低;当文件很大时,若其盘块号都需占用若干个索引块,此时可通过链指针将各索引块按序链接起来,但这种方法是低效的。
<!-- page: 273 -->
图4.9 索引分配
## (2) 多级索引分配方式
显然,当文件太大而索引块太多时,应该为这些索引块再建立一级索引,称为主索引,将第一个索引块的盘块号、第二个索引块的盘块号……填入该主索引表,这样,便形成了二级索引分配方式,其原理类似于内存管理中的多级页表,如图4.10所示。查找时,通过主索引查找第二级索引,再通过第二级索引查找所需数据块。若文件非常大,则还可使用三级、四级索引分配方式。
图4.10 二级索引分配
例如,假设盘块大小为4KB,每个盘块号占4B,一个索引块中可存放1024个盘块号,若采用两级索引,则支持的最大文件为 $1024 \times 1024 \times 4\mathrm{KB} = 4\mathrm{GB}$ 。
多级索引的优点:极大加快了对大型文件的查找速度。缺点:当访问一个盘块时,其所需启动磁盘的次数随着索引级数的增加而增多,即使是对数量众多的小文件也是如此。由此可见,若在文件系统中仅采用了多级索引组织方式,则并不能获得理想的效果。
## (3)混合索引分配方式
**前置通话** 混合索引分配的原理(2013)
为了能够较全面地照顾到小型、中型、大型和特大型文件,可采用混合索引分配方式。对于
<!-- page: 274 -->
小文件,为了提高对众多小文件的访问速度,最好能将它们的每个盘块地址直接放入FCB,这样就可以直接从FCB中获得该文件的盘块地址,即为直接寻址。对于中型文件,可以采用单级索引分配,需要先从FCB中找到该文件的索引表,从中获得该文件的盘块地址,即为一次间址。对于大型或特大型文件,可以采用两级和三级索引分配。UNIX系统采用的就是这种分配方式,在其索引节点中,共设有13个地址项,即iaddr(0)~iaddr(12),如图4.11所示。
图4.11 UNIX系统的inode结构示意图
**数据追溯** 混合索引分配的相关计算(2010、2015、2018、2022)
1)直接地址。为了提高对小文件的检索速度,在索引节点中可设置10个直接地址项,即用iaddr(0)~iaddr(9)来存放直接地址,即文件数据块的盘块号。假如每个盘块的大小为4KB,当文件不大于40KB时,便可直接从索引节点中读出该文件的全部盘块号。
2)一次间接地址。对于中、大型文件,只采用直接地址并不现实的。为此,可再利用索引节点中的地址项iaddr(10)来提供一次间接地址,即采用一级索引分配。一次间接地址中记录了文件的一次间址块号,一次间址块就是索引块,其中记录了文件数据块的盘块号。一次间址块中可以存放1024个盘块号,可以表示 $1\mathrm{K} \times 4\mathrm{KB} = 4\mathrm{MB}$ 大小的文件。因此,同时采用直接地址和一次间址,允许的文件最大长度为 $4\mathrm{MB} + 40\mathrm{KB}$ 。
**间接地址** 多级索引块的访问效率分析(2018、2022)
3)多次间接地址。当文件长度大于 $4\mathrm{MB} + 40\mathrm{KB}$ 时,还需利用地址项iaddr(11)来提供二次间接地址,即采用两级索引分配。二次间接地址中记录了文件的主索引块号,主索引块中记录了文件的一次间址块号。当地址项iaddr(11)作为二次间址块时,可以表示 $1\mathrm{K} \times 1\mathrm{K} \times 4\mathrm{KB} = 4\mathrm{GB}$ 大小的文件。因此,同时采用直接地址、一次间址和二次间址时,允许的文件最大长度为 $4\mathrm{GB} + 4\mathrm{MB} + 40\mathrm{KB}$ 。同理,同时采用直接地址、一次间址、二次间址和三次间址时,允许的文件最大长度为 $4\mathrm{TB} + 4\mathrm{GB} + 4\mathrm{MB} + 40\mathrm{KB}$ 。
## 4.1.6 文件保护
为了防止文件共享可能导致文件被破坏或未经核准的用户修改文件,文件系统必须控制用户对文件的存取,即解决对文件的读、写、执行的许可问题。为此,必须在文件系统中建立相应的
<!-- page: 275 -->
文件保护机制,可以通过口令保护、加密保护和访问控制等方式实现。其中,口令和加密是为了防止用户文件被他人存取或窃取,而访问控制则用于控制用户对文件的访问方式。
## 1. 访问类型
对文件的保护可从限制对文件的访问类型中出发。可加以控制的访问类型主要有以下几种。
- 读。从文件中读数据。
- 写。向文件中写数据。
- 执行。将文件装入内存并执行。
- 添加。将新信息添加到文件结尾部分。
- 删除。删除文件,释放空间。
- 列表清单。列出文件名和文件属性。
此外还可以对文件的重命名、复制、编辑等加以控制。这些高层的功能可以通过系统程序调用低层系统调用来实现。保护可以只在低层提供。例如,复制文件可利用一系列的读请求来完成,这样,具有读访问权限的用户同时也就具有了复制和打印权限。
## 2. 访问控制
解决访问控制最常用的方法是根据用户身份进行控制。而实现基于身份访问的最为普通的方法是,为每个文件和目录增加一个访问控制列表(Access-Control List,ACL),以规定每个用户名及其所允许的访问类型。这种方法的优点是可以使用复杂的访问方法,缺点是长度无法预计并且可能导致复杂的空间管理,使用精简的访问列表可以解决这个问题。
### 简易指标 > 文件访问控制表的结构(2017)
精简的访问控制列表可采用拥有者、组和其他三种用户类型。
1)拥有者。创建文件的用户。
2)组。一组需要共享文件且具有类似访问的用户。
3)其他。系统内的所有其他用户。
表4.1是一个访问控制列表的实例,每项占用一个二进制位,这样只需用 $3 \times 4$ 位的矩阵即可描述这三类用户的访问权限。创建文件时,系统将文件拥有者的名字、所属组名记录在该文件的FCB中。用户访问该文件时,若用户是文件主,按照文件主所拥有的权限访问文件;若用户和文件主在同一个用户组,则按照同组权限访问,否则只能按其他用户权限访问。
表 4.1 一个精简的访问控制列表
[tbl-132.md](tbl-132.md)
口令和密码是另外两种访问控制方法。
口令指用户在建立一个文件时提供一个口令,系统为其建立 FCB 时附上相应口令,同时告诉允许共享该文件的其他用户。用户请求访问时必须提供相应的口令。这种方法时间和空间的开销不多,缺点是口令直接存在系统内部,不够安全。
密码指用户对文件进行加密,文件被访问时需要使用密钥。这种方法保密性强,节省了存储空间,不过编码和译码要花费一定的时间。
口令和密码都是防止用户文件被他人存取或窃取,并没有控制用户对文件的访问类型。
<!-- page: 276 -->
对于多级目录结构而言,不仅需要保护单个文件,还需要保护子目录内的文件,即需要提供目录保护机制。目录操作与文件操作并不相同,因此需要不同的保护机制。
## 4.1.7 本节小结
本节开头提出的问题的参考答案如下。
1)什么是文件?
文件是以计算机硬盘为载体的存储在计算机上的信息集合,它的形式多样。
2)单个文件的逻辑结构和物理结构之间是否存在某些制约关系?
文件的逻辑结构是用户可见的结构,即从用户角度看到的文件的全貌。文件的物理结构是文件在存储器上的组织结构。它和文件的存取方法以及存储设备的特性等都有着密切的联系。单个文件的逻辑结构和物理结构之间虽无明显的制约或关联关系,但是,若物理结构选择不慎,则也很难体现出逻辑结构的特点,比如一个逻辑结构是顺序结构,而物理结构是隐式链接结构的文件,即使理论上可以很快找出某条记录的地址,而实际仍需在磁盘上一块一块地找。
学到这里时,读者应能有这样的体会:现代操作系统的思想中,处处能见到面向对象程序设计的影子。本节我们学习的一个新概念——文件,实质上就是一个抽象数据类型,也就是一种数据结构,若读者在复习操作系统之前已复习完数据结构,则遇到一种新的数据结构时,一定会有这样的意识:要认识它的逻辑结构、物理结构,以及对这种数据结构的操作。
## 4.1.8 本节习题精选
### 一、单项选择题
01. UNIX 操作系统中,输入/输出设备视为( )。
A. 普通文件
B. 目录文件
C. 索引文件
D. 转珠文件
02. 文件系统在创建一个文件时,为它建立一个( )。
A. 文件目录项
B. 目录文件
C. 逻辑结构
D. 逻辑空间
03. 打开文件操作的主要工作是( )。
A. 把指定文件的目录项复制到内存指定的区域
B. 把指定文件复制到内存指定的区域
C. 在指定文件所在的存储介质上找到指定文件的目录项
D. 在内存寻找指定的文件
04. 某用户程序发起 open() 系统调用,下列对该过程的描述中最准确的是( )。
A. open()调用必然导致文件 I/O
B. open()调用的参数含有需要打开的文件的文件名
C. open()调用完成后,系统打开文件表将增加一个表目
D. open()调用的参数的文件名不同时,必然会打开不同的文件实体
05. 关闭文件操作的主要工作是( )。
A. 将文件的最新信息从内存写回磁盘
B. 将文件当前的控制信息从内存写回磁盘
C. 将位示图从内存写回磁盘
D. 将超级块当前的信息从内存写回磁盘
06. 读文件操作的正确次序应该是( )。
I. 向设备驱动程序发出 I/O 请求,完成数据交换工作
II. 接存取控制说明检查访问的合法性
III. 根据目录项中该文件的逻辑和物理组织形式,将逻辑记录号转换成物理块号
<!-- page: 277 -->
IV. 接文件描述符在打开文件表中找到该文件的目录项
A. II、IV、III、I
B. IV、II、III、I
C. IV、III、II、I
D. II、IV、I、III
07. 目录文件存放的信息是( )。
A. 某一文件存放的数据信息
B. 某一文件的文件目录
C. 该目录中所有数据文件目录
D. 该目录中所有子目录和数据文件的目录
08. 当文件被打开时,需要将磁盘索引节点拷贝到内存的索引节点,下列属于内存索引节点中有两个磁盘索引节点中没有的内容是( )。
A. 访问计数值
B. 文件物理地址
C. 文件长度
D. 文件类型
09. FAT32 的文件目录项不包括( )。
A. 文件名
B. 文件访问权限说明
C. 文件控制块的物理位置
D. 文件所在的物理位置
10. 有些操作系统中将文件描述信息从目录项中分离出来,这样做的好处是( )。
A. 减少读文件时的 I/O 信息量
B. 减少写文件时的 I/O 信息量
C. 减少查找文件时的 I/O 信息量
D. 减少复制文件时的 I/O 信息量
11. 操作系统为保证未经文件拥有者授权,任何其他用户不能使用该文件,所提供的解决方法是( )。
A. 文件保护
B. 文件保密
C. 文件转储
D. 文件共享
12. 在文件系统中,以下不属于文件保护的方法是( )。
A. 口令
B. 存取控制
C. 用户权限表
D. 读/写之后使用关闭命令
13. 对一个文件的访问,常由( )共同限制。
A. 用户访问权限和文件属性
B. 用户访问权限和用户优先级
C. 优先级和文件属性
D. 文件属性和口令
14. 为了对文件系统中的文件进行安全管理,任何一个用户在进入系统时都必须进行注册,这一级安全管理是( )。
A. 系统级
B. 目录级
C. 用户级
D. 文件级
15. 下列选项中,( )不是为了提升文件系统性能的操作。
A. 目录项分解
B. 文件高速缓存
C. 磁盘调度算法
D. 异步 I/O
16. 下列说法中,( )属于文件的逻辑结构的范畴。
A. 连续文件
B. 系统文件
C. 链接文件
D. 流式文件
17. 文件的逻辑结构是为了方便( )而设计的。
A. 存储介质特性
B. 操作系统的管理方式
C. 主存容量
D. 用户
18. 下列关于逻辑结构为索引文件的索引表的叙述中,( )是正确的。
A. 索引表中每条记录的索引项可以有多个
B. 对索引文件存取时,必须先查找索引表
C. 索引表中含有索引文件的数据及其物理地址
D. 建立索引的目的之一是减少存储空间
19. 有一个顺序文件含有 10000 条记录,平均查找的记录数为 5000 个,采用索引顺序文件结构,则最好情况下平均只需约查找( )次记录。
A. 1000
B. 10000
C. 100
D. 500
<!-- page: 278 -->
20. 用磁带做文件存储介质时,文件只能组织成( )。
A. 顺序文件
B. 链接文件
C. 索引文件
D. 目录文件
21. 以下不适合随机存取的外存分配方式是( )。
A. 连续分配
B. 链接分配
C. 索引分配
D. 以上都适合
22. 在以下文件的物理结构中,不利于文件长度动态增长的是( )。
A. 连续结构
B. 链接结构
C. 索引结构
D. 散列结构
23. 若文件的物理结构采用连续分配,则FCB中有关文件的物理位置的信息应包括( )。
I. 首块地址
II. 文件长度
III. 索引表地址
A. 仅I
B. I、II
C. II、III
D. I、III
24. 在磁盘上,最容易导致存储碎片发生的物理文件结构是( )。
A. 隐式链接
B. 顺序存放
C. 索引存放
D. 显式链接
25. 物理文件的组织方式是由( )确定的。
A. 应用程序
B. 主存容量
C. 外存容量
D. 操作系统
26. 文件系统为每个文件创建一张( ),存放文件数据块的磁盘存放位置。
A. 打开文件表
B. 位图
C. 索引表
D. 空闲盘块链表
27. 下列有关文件组织管理的描述中,错误的是( )。
A. 记录是对文件进行存取操作的单位,一个文件中各记录的长度可以不等
B. 采用链接分配的文件,它的物理块必须连续排列
C. 创建一个文件时,可以分配连续的区域,也可以分配不连续的物理块
D. Hash 结构文件的优点是能够实现物理块的动态分配和回收
28. 逻辑文件存放到存储介质上时,采用的组织形式与( )有关。
A. 逻辑文件结构
B. 存储介质特性
C. 主存储器管理方式
D. 设备分配方式
29. 某 500 个盘块的文件的目录项已调入内存(若为索引分配,其索引块也在内存中)。若需要在文件中增加一块,下列分配方式中磁盘 I/O 次数最多的是( )。
A. 连续分配
B. 隐式链接分配
C. 显式链接分配
D. 索引分配
30. 设有一个记录文件,采用隐式链接分配方式,逻辑记录的固定长度为 100B,在磁盘上存储时采用记录或组分解技术。盘块长度为 512B。若该文件的目录项已经读入内存,则对第 22 个逻辑记录完成修改后,共启动了磁盘( )次。
A. 3
B. 4
C. 5
D. 6
31. 设某文件为链接文件,它由 5 个逻辑记录组成,每个逻辑记录的大小与磁盘块的大小相等,均为 512B,并依次存放在 50, 121, 75, 80, 63 号磁盘块上。若要存取文件的第 1569 逻辑字节处的信息,则应该访问( )号磁盘块。
A. 3
B. 80
C. 75
D. 63
32. 某文件共有 8 个记录 L1-L8,采用隐式链接分配,每个记录及链接指针占一个磁盘块,主存中的磁盘缓冲区的大小与磁盘块的大小相等。假设文件目录已读入内存。为了在 L5 和 L6 之间插入一个记录 Lx'(已在内存中),需要进行的磁盘操作有( )。
A. 4 次读盘和 2 次写盘
B. 5 次读盘和 1 次写盘
C. 5 次读盘和 2 次写盘
D. 4 次读盘和 1 次写盘
33. 某文件系统采用显示链接分配方式组织文件,磁盘块大小为 4KB,一个簇包含两个磁盘块,操作系统以簇为单位进行盘块分配。已知系统支持的最大文件长度为 512MB,若
<!-- page: 279 -->
FAT 的每个表项仅存放簇号,则 FAT 表占用的空间大约是( )。
A. 64KB
B. 128KB
C. 512KB
D. 1024KB
34. 某文件共有 3 个记录,每个记录占 1 个磁盘块,在 1 次读文件的操作中,为了读出最后 1 个记录,不得不读出其他 2 个记录。由此可知该文件所采用的物理结构是( )。
A. 连续分配
B. 索引分配
C. 链接分配
D. 连续分配或链接分配
35. 某文件存放在 100 个数据块中,假设管理文件所必需的文件控制块、索引块或索引信息都驻留在内存中。那么若( ),则不需要做任何磁盘 I/O 操作。
A. 采用连续分配,将最后一个数据块搬到文件头部
B. 采用单级索引分配,将最后一个数据块插入文件头部
C. 采用隐式链接分配,将最后一个数据块插入文件头部
D. 采用隐式链接分配,将第一个数据块插入文件尾部
36. 某文件有 100 个盘块(数据块),假设管理文件所必需的文件控制块、所有索引块都已调入内存。若需要在文件的第 45 个盘块后插入数据,则物理结构采用( )时开销最大。
A. 连续分配
B. 链接分配
C. 一级索引分配
D. 多级索引分配
37. 某文件系统使用类似于 Linux 的 inode 存储结构,文件块和磁盘块的大小都是 4KB,磁盘地址是 32 位,现在一个文件包含 10 个直接指针和 1 个一级间接指针,则这个文件所占用的磁盘块数量最多是( )块(不考虑索引块)。
A. 128
B. 512
C. 1024
D. 1034
38. 文件系统采用两级索引分配方式。若每个磁盘块的大小为 1KB,每个盘块号占 4B,则该系统中单个文件的最大长度是( )。
A. 64MB
B. 128MB
C. 32MB
D. 以上都错误
39. 某文件系统的物理结构采用三级索引分配方式,每个磁盘块的大小为 1024B,每个盘块索引号占用 4B,则该文件系统支持的最大文件的尺寸接近( )。
A. 8GB
B. 16GB
C. 32GB
D. 2TB
40. 下列各种操作系统内核相关的数据结构中,可以不用数组实现的是( )。
A. 文件分配表
B. 页表
C. 调度器的就绪队列
D. 中断向量表
41.【2009 统考真题】文件系统中,文件访问控制信息存储的合理位置是( )。
A. 文件控制块
B. 文件分配表
C. 用户口令表
D. 系统注册表
42.【2009 统考真题】下列文件物理结构中,适合随机访问且易于文件扩展的是( )。
A. 连续结构
B. 索引结构
C. 链式结构且磁盘块定长
D. 链式结构且磁盘块变长
43.【2010 统考真题】设文件索引节点中有 7 个地址项,其中 4 个地址项是直接地址索引,2 个地址项是一级间接地址索引,1 个地址项是二级间接地址索引,每个地址项大小为 4B,若磁盘索引块和磁盘数据块大小均为 256B,则可表示的单个文件最大长度是( )。
A. 33KB
B. 519KB
C. 1057KB
D. 16516KB
44.【2012 统考真题】若一个用户进程通过 read 系统调用读取一个磁盘文件中的数据,则下列关于此过程的叙述中,正确的是( )。
I. 若该文件的数据不在内存,则该进程进入睡眠等待状态
II. 请求 read 系统调用会导致 CPU 从用户态切换到核心态
III. read 系统调用的参数应包含文件的名称
A. 仅 I, II
B. 仅 I, III
C. 仅 II, III
D. I, II 和 III
<!-- page: 280 -->
45.【2013统考真题】用户在删除某文件的过程中,操作系统不可能执行的操作是( )。
A. 删除此文件所在的目录
B. 删除与此文件关联的目录项
C. 删除与此文件对应的文件控制块
D. 释放与此文件关联的内存缓冲区
46.【2013统考真题】若某文件系统索引节点(inode)中有直接地址项和间接地址项,则下列选项中,与单个文件长度无关的因素是( )。
A. 索引节点的总数
B. 间接地址索引的级数
C. 地址项的个数
D. 文件块大小
47.【2013统考真题】为支持CD-ROM中视频文件的快速随机播放,播放性能最好的文件数据块组织方式是( )。
A. 连续结构
B. 链式结构
C. 直接索引结构
D. 多级索引结构
48.【2014统考真题】在一个文件被用户进程首次打开的过程中,操作系统需做的是( )。
A. 将文件内容读到内存中
B. 将文件控制块读到内存中
C. 修改文件控制块中的读/写权限
D. 将文件的数据缓冲区首指针返回给用户进程
49.【2015统考真题】在文件的索引节点中存放直接索引指针10个,一级和二级索引指针各1个。磁盘块大小为1KB,每个索引指针占4B。若某文件的索引节点已在内存中,则把该文件偏移量(按字节编址)为1234和307400处所在的磁盘块读入内存,需访问的磁盘块个数分别是( )。
A. 1, 2
B. 1, 3
C. 2, 3
D. 2, 4
50.【2017统考真题】某文件系统中,针对每个文件,用户类别分为4类:安全管理员、文件主、文件主的伙伴、其他用户;访问权限分为5种:完全控制、执行、修改、读取、写入。若文件控制块中用二进制位串表示文件权限,为表示不同类别用户对一个文件的访问权限,则描述文件权限的位数至少应为( )。
A. 5
B. 9
C. 12
D. 20
51.【2017统考真题】某文件系统的簇和磁盘扇区大小分别为1KB和512B。若一个文件的大小为1026B,则系统分配给该文件的磁盘空间大小是( )。
A. 1026B
B. 1536B
C. 1538B
D. 2048B
52.【2020统考真题】某文件系统的目录项由文件名和索引节点号构成。若每个目录项长度为64字节,其中4字节存放索引节点号,60字节存放文件名。文件名由小写英文字母构成,则该文件系统能创建的文件数量的上限为( )。