第四章 文件管理

4.1 文件

4.1.1 文件的基本概念

  • 文件是指由创建者所定义的、具有文件名的一组相关元素的集合,是以硬盘为载体的存储在计算机上的信息集合
  • 是文件系统中最大的数据单位
  • 在用户进行的输入,输出中,则以文件为基本单位

4.1.2 文件控制块和索引节点

文件控制块 FCB

文件控制块 (File Control Block, FCB) 是用来存放控制文件需要的各种信息的数据结构,以实现按名存取。
FCB 的有序集合称为文件目录,一个 FCB 就是一个文件目录项

索引节点

索引结点包含除了文件名之外的文件描述信息

当找到文件名对应的目录项时,才需要将索引结点调入内存,索引结点中记录了文件的各种信息,包括文件在外存中的存放位置,根据“存放位置”即可找到文件。

存放在外存中的索引结点称为“磁盘索引结点”
当索引结点放入内存后称为“内存索引结点”
相比之下内存索引结点中需要增加一些信息,比如:文件是否被修改、此时有几个进程正在访问该文件等。

目的:将文件名和文件描述分开加快文件检索速度,减少文件目录项⻓度索引结点和文件是一对多的关系

假设一个 FCB为64B,盘块大小是1KB,则每个盘块中可以存放16个FCB(FCB必须连续存放),若一个文件目录共有640个FCB,则查找文件平均需要启动磁盘20次。而在UNIX系统中,一个目录项仅占 16B,其中 14B是文件名,2B是索引节点号。在 1KB的盘块中可存放 64个目录项。这样,可使查找文件的平均启动磁盘次数减少到原来的1/4,大大节省了系统开销。

4.1.3文件的操作

创建文件(create 系统调用)

进行 create 系统调用时,需要提供的几个主要参数 :

  1. 所需外存大小(如:一个盘块)
  2. 文件存放路径
  3. 文件名
    操作系统在处理 create 调用时做了以下两件事 :
  4. 在外存中找到文件所需的空间(外存空闲空间管理)
  5. 根据文件存放路径找到该目录对应的目录文件,在目录中创建该文件对应的目录项,目录项包含了文件名、文件在外存存放位置等信息

删除文件(delete 系统调用)

进行 delete 系统调用时,需要提供的几个主要参数 :

  1. 文件存放路径
  2. 文件名
    操作系统在处理 delete 调用时做了以下两件事 :
  3. 根据文件存放路径找到该目录对应的目录文件,从目录找到文件名对应的目录项
  4. 根据目录项记录的文件在外存中存放位置、文件大小等信息,回收文件占用的磁盘块 (外存空闲空间管理)
  5. 从目录中删除文件对应的目录项

打开文件(open系统调用)

  • 打开文件表
    系统检索到指定文件的目录项后,将该目录项从外存复制到内存中的打开文件表的一个表目中,并将该表目的 索引号 (也称文件描述符) 返回给用户。
    当用户再次对该文件发出操作请求时,可通过文件描述符在打开文件表中查找到文件信息,从而节省了大量的检索开销。

  • [*] 打开文件时并不会把文件数据直接读入内存

  • [*] 对于访问打开文件表的索引号,UNIX称之为文件描述符,而Windows称之为文件句柄

  • [*] 只要文件未被关闭(完成了文件打开open () 系统调用),所有文件操作都是通过文件描述符符 (不是文件名) 来进行。

进行 open 系统调用时,需要提供的几个主要参数 :

  1. 文件存放路径
  2. 文件名
  3. 要对文件的操作类型(如:r 只读,rw读写等)
    操作系统在处理 open 调用时做了以下两件事 :
  4. 根据文件存放路径找到该目录对应的目录文件,从目录找到文件名对应的目录项,并检查该用户是否有指定的操作权限
  5. 将目录项复制到内存中的“打开文件表”中。并将对应表目的编号返回给用户。之后用户使用打开文件表的编号来指明要操作的文件。
    assets/第四章 文件管理/file-20241218160811047.png

关闭文件(close调用)

assets/第四章 文件管理/file-20241218161037078.png
进程使用完文件后,要“关闭文件”
操作系统在处理 Close 系统调用时,主要做了几件事:

  1. 将进程的打开文件表相应表项删除
  2. 回收分配给该文件的内存空间等资源
  3. 系统打开文件表的打开计数器 count 减 1,若 count = 0, 则删除对应表项。

读文件(read系统调用)

编号 文件名 读写指针 访问权限 ...
1 test. txt ... 读写

操作系统在处理 read 系统调用时,会从读指针指向的外存中,将用户指定大小的数据读入用户指定的内存区域中。

  1. 需要指明是哪个文件(在支持“打开文件”操作的系统中,只需要提供文件在打开文件表中的索引号即可)
  2. 还需要指明要读入多少数据(如:读入 1KB)
  3. 指明读入的数据要放在内存中的什么位置。

写文件(write系统调用)

编号 文件名 读写指针 访问权限 ...
1 test. txt ... 读写

操作系统在处理 write 系统调用时,会从用户指定的内存区域中,将指定大小的数据写回写指针指向的外存。

  1. 需要指明是哪个文件(在支持“打开文件”操作的系统中,只需要提供文件在打开文件表中的索引号即可)
  2. 还需要指明要写出多少数据(如:写出 1KB)
  3. 写回外存的数据放在内存中的什么位置

4.1.4 文件保护

口令保护

为文件设置一个“口令"(如:abc112233),用户请求访问该文件时必须供“口令"

口令一般存放在文件对应的 FCB 或索引结点中。用户访问文件前需要先输入“口令”,操作系统会将用户提供的口令与FCB中存储的口令进行对比,如果正确,则允许该用户访问文件

优点:
保存口令的空间开销不多,验证口令的时间开销也很小。
缺点:
正确的口令存放在系统内部,不够安全。

加密保护

使用某个“密码”对文件进行加密,在访问文件时需要提供正确的“密码”才能对文件进行正确的解密。assets/第四章 文件管理/file-20241218185043286.png
优点:
保密性强,不需要在系统中存储密码
缺点:
编码/译码,或者说加密/解密要花费一定时间。

访问控制

在每个文件的FCB(或索引结点)中增加一个访问控制列表(Access-Control List, ACL),该表中记录了各个用户可以对该文件执行哪些操作。

  • 精简的访问列表
    在每个文件的FCB(或索引结点)中增加一个访问控制列表(Access-Control List, ACL),该表中记录了各个用户可以对该文件执行哪些操作。
    以“组”为单位,标记各“组”用户可以对文件执行哪些操作。如:分为系统管理员、文件主、文件主的伙伴、其他用户几个分组。
    当某用户想要访问文件时,系统会检查该用户所属的分组是否有相应的访问权限。
    assets/第四章 文件管理/file-20241218185009748.png

4.1.5 文件的逻辑结构

按文件是否有结构分类

无结构文件

文件内部的数据就是系列二进制流或字符流组成。又称“流式文件”。如:Windows 操作系统中的 .txt 文件。

有结构文件

由一组相似的记录组成,又称“记录式文件”。每条记录又若干个数据项组成,如:数据库表文件。一般来说,每条记录有一个数据项可作为关键字(作为识别不同记录的ID)

根据各条记录的长度(占用的存储空间)是否相等分为

  • 定长记录
  • 可变长记录

按记录组织形式分为 :

  • 顺序文件
  • 索引文件
  • 索引顺序文件
顺序文件

文件中的记录一个接一个地顺序排列(逻辑上),记录可以是定长的或可变长的。各个记录在物理上可以顺序存储或链式存储。

  • 串结构 : 记录之间的顺序与关键字无关
  • 顺序结构 : 记录之间的顺序按关键字排序
  • 链式存储 : 无法实现随机存取
  • 顺序存储
    • 可变长记录 : 无法实现随机存取, 每次只能从第一个记录依次往后查
    • 定长记录
      • 可实现随机存取,记录长度为 L,则第 i 个记录存放的相对位置是 i×L
      • 若采用串结构,无法快速找到关键字对应的记录
      • 若采用顺序结构,可以快速找到关键字对应的记录(折半查找)
    • 注:一般来说,考试题目中所说的“顺序文件指的是物理上顺序存储的顺序文件。之后的讲解中提到的顺序文件也默认如此。可见,顺序文件的缺点是增加/删除一个记录比较困难(如果是串结构则相对简单)
索引文件

对于可变长文件,要找到第 i 个记录每次只能从第一个记录依次往后查,但是很多应用场景必须使用可变长记录,可以用索引文件解决

  • 建立一张索引表,每个记录对应一个表项,包含指向记录的指针(即逻辑起始地址)和记录长度assets/第四章 文件管理/file-20241214200923142.png
  • assets/第四章 文件管理/file-20241216164938922.png
  • 索引表本身是定长记录的顺序文件,因此索引文件可支持随机存取,可以快速找到第 i 个记录对应的索引项。
  • 每当要增加/删除一个记录时,需要对索引表进行修改。
  • 由于索引文件有很快的检索速度,因此主要用于对信息处理的及时性要求比较高的场合。
  • 解决了顺序文件不方便增/删记录的问题,同时让不定长记录的文件实现了随机存取。但索引表可能占很多空间
索引顺序文件

索引顺序文件中,同样会为文件建立一张索引表,但不同的是:并不是每个记录对应一个索引表项,而是一组记录对应一个索引表项。

若一个顺序文件有10000个记录,则根据关键字检索文件,只能从头开始顺序查找(这里指的并不是定长记录、顺序结构的顺序文件),平均须查找 5000个记录
若采用索引顺序文件结构,可把 10000 个记录分为 10000=100 组,每组 100个记录。则需要先顺序查找索引表找到分组(共100个分组,因此索引表长度为100,平均需要查 50 次),找到分组后,再在分组中顺序查找记录(每个分组100个记录,因此平均需要查 50 次)。可见,采用索引顺序文件结构后,平均查找次数减少为 50+50 = 100 次。

为了进一步提高检索效率,可以为顺序文件建立多级索引表。例如,对于一个含 106 个记录的文件,可先为该文件建立一张低级索引表,每 100 个记录为一组,故低级索引表中共有 10000 个表项(即 10000个定长记录),再把这 10000 个定长记录分组,每组100个,为其建立顶级索引表,故顶级索引表中共有 100 个表。

Tips: 要为 N 个记录的文件建立 K 级索引,则最优的分组是每组 N1/(K+1) 个记录。检索一个记录的平均查找次数是 (N1/(K+1)/2)×(K+1)

4.1.6 文件的物理结构(文件分配方式)

类似于内存分页,磁盘中的存储单元也会被分为一个个“块/磁盘块/物理块”。很多操作系统中,磁盘块的大小与内存块、页面的大小相同

内存与磁盘之间的数据交换(即读/写操作、磁盘I/O)都是以“块”为单位进行的。即每次读或每次写出一块

同样的,在外存管理中,为了方便对文件数据的管理,文件的逻辑地址空间也被分为了一个一个的文件“块”。于是文件的逻辑地址也可以表示为(逻辑块号,块内地址)的形式

连续分配

连续分配方式要求每个文件在磁盘上占有一组连续的块

用户给出要访问的逻辑块号,操作系统找到该文件对应的目录项(FCB)…物理块号= 起始块号+ 逻辑块号,当然,还需要检查用户提供的逻辑块号是否合法(逻辑块号≥长度就不合法)

文件目录中记录存放的起始块号和长度

文件名 ... 起始块号 长度
aaa ... 4 3
bbb ... 10 4
  • 缺点
    • 物理上采用连续分配的文件不方便拓展。
    • 物理上采用连续分配,存储空间利用率低,会产生难以利用的磁盘碎片(外部碎片)可以用紧凑来处理碎片,但是需要耗费很大的时间代价
  • 优点
    • 连续分配支持顺序访问和直接访问(即随机访问)
    • 读取某个磁盘块时,需要移动磁头。访问的两个磁盘块相隔越远,移动磁头所需时间就越长。因此,连续分配的文件在顺序读/写时速度最快

链式分配

链接分配采取离散分配的方式,可以为文件分配离散的磁盘块。分为隐式链接和显式链接两种。
考试题目中遇到未指明隐式/显式的“链接分配”,默认指的是隐式链接的链接分配

隐式链接

目录项中含有文件第一块的指针 (盘块号) 和最后一块的指针。
每个文件对应一个磁盘块的链表,磁盘块分布在磁盘的任何地方。

除了文件的最后一个磁盘块之外,每个磁盘块中都会保存指向下一个盘块的指针,这些指针对用户是透明的

文件名 ... 起始块号 结束块号
aaa ... 9 16

assets/第四章 文件管理/file-20241215192832358.png

从目录项中找到起始块号(即 0 号块),将 0 号逻辑块读入内存,由此知道 1 号逻辑块存放的物理块号,于是读入 1 号逻辑块,再找到 2 号逻辑块的存放位置……以此类推。因此,读入 i 号逻辑块,总共需要 i + 1 次磁盘 I/O 操作

  • 缺点
    • 只支持顺序访问,不支持随机访问,查找效率低
    • 指向下一个盘块的指针也需要耗费少量的存储空间
    • 稳定性问题,文件盘块中的任何一个指针出问题,都会导致文件数据的丢失。
  • 优点
    • 很方便文件拓展
    • 所有的空闲磁盘块都可以被利用,不会有碎片问题,外存利用率高

显式链接

显式链接是指将用于链接文件各物理块的指针,显式地存放在内存的文件分配表 (FAT) 中,该表在整个磁盘中仅设置一张,开机时,将FAT读入内存,并常驻内存。

FAT 的各个表项在物理上连续存储,且每一个表项长度相同,因此“物理块号”字段可以是隐含的。assets/第四章 文件管理/QQ_1734262915076 2.png

用户给出要访问的逻辑块号 i,操作系统找到该文件对应的目录项(FCB)从目录项中找到起始块号
若 i > 0,则查询内存中的文件分配表 FAT,往后找到 i 号逻辑块对应的物理块号。逻辑块号转换成物理块号的过程不需要读磁盘操作。

FAT 的表项与全部磁盘块一一对应,并且可以用一个特殊的数字-1 表示文件的最后一块,可以用 -2 表示这个磁盘块是空闲的 (当然也可指定为 -3, -4)。因此,FAT 还标记了空闲的磁盘块,操作系统可以通过 FAT 对磁盘空闲空间进行管理。当某进程请求系统分配一个磁盘块时,系统只需从 FAT 中找到 -2 的表项,并将对应的磁盘块分配给该进程即可。

  • 缺点
    • 文件分配表的需要占用一定的存储空间。
  • 优点
    • 很方便文件拓展,不会有碎片问题,外存利用率高,支持随机访问也支持顺序访问。
    • 相比于隐式链接来说,地址转换时不需要访问磁盘,因此文件的访问效率更高。

索引分配

索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块(索引表的功能类似于内存管理中的页表——建立逻辑页面到物理页之间的映射关系)。

索引表存放的磁盘块称为索引块
文件数据存放的磁盘块称为数据块

显式链接的链式分配中,文件分配表 FAT 是一个磁盘对应一张
索引分配方式中,索引表是一个文件对应一张。

索引表中的“逻辑块号”可以是隐含的
用户给出要访问的逻辑块号 i,操作系统找到该文件对应的目录项(FCB), 从目录项中可知索引表存放位置,将索引表从外存读入内存,并查找索引表即可只 i 号逻辑块在外存中的存放位置。
·assets/第四章 文件管理/file-20241215195820705.png

  • 缺点
    • 索引表需要占用一定的存储空间
    • 访问数据块前要先读入索引块
    • 若采用链接方案,查找索引块时可能需要很多次读磁盘操作
  • 优点
    • 索引分配方式可以支持随机访问
    • 文件拓展也很容易实现(只需要给文件分配一个空闲块,并增加一个索引表项即可)
链接方案

如果索引表太大,一个索引块装不下,那么可以将多个索引块链接起来存放。(效率低下)
assets/第四章 文件管理/file-20241215201236565.png

多层索引

建立多层索引(原理类似于多级页表)。
使第一层索引块指向第二层的索引块。还可根据文件大小的要求再建立第三层、第四层索引块。
若采用多层索引,则各层索引表大小不能超过一个磁盘块
采用 K 层索引结构,且顶级索引表未调入内存,则访问一个数据块只需要 K + 1 次读磁盘操作
assets/第四章 文件管理/file-20241215201459837.png

混合索引

为了能够较全面地照顾到小型、中型、大型和特大型文件,可采用混合索引分配方式。

多种索引分配方式的结合
例如,一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表) 。
assets/第四章 文件管理/file-20241215201627121.png

重要考点
  1. 要会根据多层索引、混合索引的结构计算出文件的最大长度(Key:各级索引表最大不能超过一个块);
  2. 要能自己分析访问某个数据块所需要的读磁盘次数(Key:FCB 中会存有指向顶级索引块的指针,因此可以根据 FCB 读入顶级索引块。每次读入下一级的索引块都需要一次读磁盘操作。另外,要注意题目条件——顶级索引块是否已调入内存)
  3. “文件的某种逻辑结构支持随机存取/随机访问”是指:采用这种逻辑结构的文件,可以根据记录号直接算出该记录对应的逻辑地址(逻辑块号,块内地址)。

4.2 目录

4.2.1 目录的基本概念

  • 目录是一种数据结构,用于标识系统中的文件及其物理地址,供检索时使用
  • FCB 的有序集合称为文件目录,一个 FCB 就是一个文件目录项
  • 目录在用户(应用程序)所需要的文件名和文件之间提供一种映射,所以目录管理要实现“按名存取”

4.2.2 目录结构

单级目录结构

在整个文件系统中只建立一张目录表,每个文件占一个目录项,不允许文件重名

当建立一个新文件时,必须先检索所有目录项,以确保没有“重名”的情况,然后在该目录中增设一项,将新文件的属性信息填入该项

单级目录结构实现了“按名存取”,但是存在查找速度慢、文件不允许重名、不便于文件共享等缺点,而且对于多用户的操作系统显然是不适用的

两级目录结构

将文件目录分成主文件目录 (MasterFile Directory, MFD) 和用户文件目录 (User File Directory, UFD) 两级
assets/第四章 文件管理/file-20241215152718448.png
主文件目录项记录用户名及相应用户文件目录所在的存储位置
用户文件目录项记录该用户所有文件的 FCB

允许不同用户的文件重名,当某用户欲对其文件进行访问时,只需搜索该用户对应的 UFD, 这既解决了不同用户文件的“重名”问题,又在一定程度上保证了文件的安全。

但是两级目录结构缺乏灵活性,不能对文件分类。

树形目录结构

不同目录下的文件可以重名,可以对文件进行分类,不方便文件共享

从根目录出发的路径称为绝对路径
从当前目录出发的路径称为相对路径

当用户要访问某个文件时,用文件的路径名标识文件,文件路径名是个字符串,由从根目录出发到所找文件通路上所有目录名与数据文件名用分隔符“/”链接而成
由于一个进程在运行时,其所访问的文件大多局限于某个范围,当层次较多时,每次从根目录查询会浪费时间,于是可为每个进程设置一个当前目录(又称工作目录)
图4.14是Linux操作系统的目录结构,“/dev/hda”就是一个绝对路径。若当前目录为“/bin”,则“./ls”就是一个相对路径,其中符号“.”表示当前工作目录。
assets/第四章 文件管理/file-20241215153803297.png

无环图目录结构

树形目录结构能便于实现文件分类,但不便于实现文件共享,为此在树形目录结构的基础上增加一些指向同一节点的有向边,使整个目录成为一个有向无环图

可以不同文件名指向同一个文件,甚至指向同一个目录(共享目录下所有内容)

可为每个共享节点设置一个共享计数器,每当图中增加对该节点的共享链时,计数器加 1;每当某用户提出删除该节点时,计数器减 1。仅当共享计数器为0时,才真正删除该节点,否则仅删除请求用户的共享链。

共享文件不等同于复制文件,在共享文件中,由于各用户指向的是同一个文件,因此只要其中一个用户修改了文件数据,那么所有用户都可以看见文件数据变化
assets/第四章 文件管理/file-20241215160437188.png

4.2.5 文件共享

  • 复制与共享
    • 多个用户共享同一个文件,意味着系统中只有“一份”文件数据。并且只要某个用户修改了该文件的数据,其他用户也可以看到文件数据的变化。
    • 如果是多个用户都“复制”了同一个文件,那么系统中会有“好几份”文件数据。其中一个用户修改了自己的那份文件数据,对其他用户的文件数据并没有影响

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

assets/第四章 文件管理/file-20241218170745835.png
索引节点 中设置一个链接计数变量 count,用于表示链接到本索引结点上的用户目录项数。
若 count > 0,说明还有别的用户要使用该文件,暂时不能把文件数据删除,否则会导致指针悬空。
若某个用户决定“删除”该文件,则只是要把用户目录中与该文件对应的目录项删除,且索引结点的count值减 1,当 count = 0 时系统负责删除文件。

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

在一个 Link 型文件中记录共享文件的存放路径(类似于 Windows 系统中的快捷方式)

操作系统根据路径一层层查找目录,最终找到共享文件

即使软连接指向的共享文件已经被删除,Link 型文件依然存在,只是通过 Link 型文件中的路径去查找共享文件会失败(找不到对应目录项)

由于软连接的方式访问共享文件时要查询多级目录,会有多次磁盘 I/O,因此软连接访问共享文件的速度比硬链接更慢

4.3 文件系统

4.3.1 文件系统结构

  • 咸鱼视频
    assets/第四章 文件管理/file-20241219160908889.png
    assets/第四章 文件管理/file-20241219160933027.png
  • 王道书上
    • I/O 控制层
      包括设备驱动程序和中断处理程序,在内存和磁盘系统之间传输信息。设备驱动程序将输入的命令翻译成底层硬件的特定指令,硬件控制器利用这些指令使/O 设备与系统交互。设备驱动程序告诉I/O 控制器对设备的什么位置采取什么动作。
    • 基本文件系统
      向对应的设备驱动程序发送通用命令,以读取和写入磁盘的物理块。每个物理块由磁盘地址标识。该层也管理内存缓冲区,并保存各种文件系统、目录和数据块的缓存。在进行磁盘块传输前,分配合适的缓冲区,并对缓冲区进行管理。管理它们对于系统性能的优化至关重要。
    • 文件组织模块
      组织文件及其逻辑块和物理块。文件组织模块可以将文件的逻辑块地址转换为物理块地址,每个文件的逻辑块从0到N编号,它与数据的物理块不匹配,因此需要通过转换来定位。文件组织模块还包括空闲空间管理器,以跟踪未分配的块,根据需求提供给文件组织模块。
    • 逻辑文件系统
      用于管理文件系统中的元数据信息。元数据包括文件系统的所有结构,而不包括实际数据 (或文件内容)。逻辑文件系统管理目录结构,以便根据给定文件名为文件组织模块提供所需要的信息。它通过文件控制块来维护文件结构。逻辑文件系统还负责文件保护。
      assets/第四章 文件管理/file-20241219162719783.png

4.3.2 文件系统布局

文件系统在磁盘中的结构

补充
assets/第四章 文件管理/file-20241219164922007.png

文件系统在内存中的结构

  • 内存中的安装表 (mount table), 包含每个已安装文件系统分区的有关信息。
  • 内存中的目录结构的缓存,包含最近访问目录的信息。
  • 整个系统的打开文件表,包含每个打开文件的 FCB副本、打开计数及其他信息。
  • 每个进程的打开文件表,包含进程打开文件的文件描述符 (Windows 称之为文件句柄) 和指向整个系统的打开文件表中对应表项的指针。
    assets/第四章 文件管理/file-20241219182341521.png

4.3.3 外存空闲空间管理

^70bfc1

包含文件系统的分区通常称为。卷可以是磁盘的一部分,也可以是整个磁盘,还可以是多个磁盘组成。
在一个卷中,存放文件数据的空间 (文件区) 和 FCB 的空间 (目录区) 是分离的。
卷在提供文件服务前,必须由对应的文件程序进行初始化,划分好目录区和文件区,建立空闲空间管理表格及存放卷信息的超级块

  • 目录区主要存放文件目录信息(FCB)、用于磁盘存储空间管理的信息
  • 文件区用于存放文件数据

空闲表法

适用于“连续分配方式”,与内存管理中的动态分区分配很类似,为一个文件分配连续的存储空间
同样可采用首次适应、最佳适应、最坏适应等算法来决定要为文件分配哪个区间。
与内存分配类似,分配时要注意表项的合并问题。
assets/第四章 文件管理/file-20241217194006457.png

  • 优点
    • 具有较高的分配速度,可减少访问磁盘的I/O频率(通过有效地追踪哪些资源是空闲的)。
    • 对于较小的文件 (1~5个盘块), 可以采用连续分配方式为文件分配几个相邻的盘块。

空闲链表法

assets/第四章 文件管理/file-20241217194327519.png

空闲盘块法

空闲盘块中存储着下一个空闲盘块的指针,操作系统保存着链头、链尾指针

  • 分配
    若某文件申请 K 个盘块,则从链头开始依次摘下 K个盘块分配,并修改空闲链的链头指针。
  • 回收
    回收的盘块依次挂到链尾,并修改空闲链的链针。

适用于离散分配的物理结构。

  • 优点
    分配和回收一个盘块的过程非常简单。
  • 缺点
    在为一个文件分配盘块时可能要重复操作多次,效率较低;
    又因它是以盘块为单位的,空闲盘块链会很长。

空闲盘区法

连续的空闲盘块组成一个空闲盘区,空闲盘区中的第一个盘块内记录了盘区的长度、下一个盘区的指针,操作系统保存着链头、链尾指针。

  • 分配
    若某文件申请 K 个盘块,则可以采用首次适应、最佳适应等算法,从链头开始检索,按照算法规则找到一个大小符合要求的空闲盘区,分配给文件。
    若没有合适的连续空闲块,也可以将不同盘区的盘块同时分配给一个文件,注意分配后可能要修改相应的链指针、盘区大小等数据。
  • 回收
    若回收区和某个空闲盘区相邻,则需要将回收区合并到空闲盘区中。
    若回收区没有和任何空闲区相邻,将回收区作为单独的一个空闲盘区挂到链尾

离散分配、连续分配都适用。为一个文件分配多个盘块时效率更高

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

位示图法

assets/第四章 文件管理/file-20241217195816322.png

  • 分配
    • 顺序扫描位示图,找到 K 个相邻或不相邻的“0”;
    • 根据字号、位号算出对应的盘块号,将相应盘块分配给文件;
    • 将相应位设置为“1”。
  • 回收
    • 根据回收的盘块号计算字号、位号
    • 将相应二进制位设为“0”
  • 优点
    很容易在位示图中找到一个或一组相邻接的空闲盘块。
    由于位示图很小,占用空间少,因此可将它保存在内存中,从而节省许多磁盘启动的开销。
  • 缺点位
    示图大小会随着磁盘容量的增加而增大,因此常用于小型计算机。

成组链接法

空闲表法、空闲链表法不适用于大型文件系统,因为空闲表或空闲链表可能过大。UNIX系统中采用了成组链接法对磁盘空闲块进行管理。

文件卷的目录区中专门用一个磁盘块作为“超级块”,当系统启动时需要将超级块读入内存。并且要保证内存与外存中的“超级块”数据一致。

结构形态(为了简化说明,视频中盘块很少)

posted @   zhujio  阅读(90)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示