操作系统复习总结4

操作系统复习总结,仅供笔者复习使用,参考教材:

  • 《操作系统原理》 - 何静媛编著. 西安电子科技大学出版社
  • 《操作系统考研复习指导》2024年 - 王道论坛组编. 电子工业出版社

本文主要内容为:文件管理;

计算机系统概述 部分见 操作系统复习总结1
进程与线程 部分见 操作系统复习总结2
内存管理 部分见 操作系统复习总结3
文件管理 部分见 操作系统复习总结4
输入输出管理 部分见 操作系统复习总结5

1. 文件系统基础

1.1 文件

在系统运行时,计算机以进程为基本单位进行资源的调度和分配;而在用户进行的输入、输出中,则以文件为基本单位。大多数应用程序的输入和输出也都是通过文件来实现的,以便信息的长期存储及将来的访问。

  • 文件:以硬盘为载体的存储在计算机上的信息集合,可以是文本文档、图片、程序等;
  • 文件系统:当用户将文件用于程序的输入、输出时,用于访问、修改和保存文件等,实现对文件的维护管理的系统;
  • 文件结构:在操作系统中,通常将程序和数据组织成文件。文件可以是数字、字符或二进制代码,基本访问单元可以是字节或记录。文件可以长期存储在硬盘中,允许可控制的进程间共享访问,能够被组织成复杂的结构。文件结构自底向上结构如下:
    • 数据项:文件系统中最低级的数据组织形式,可分为以下两种类型:
      • 基本数据项:用于描述一个对象的某种属性的一个值,是数据中的最小逻辑单位;
      • 组合数据项:由多个基本数据项组成;
    • 记录:一组相关的数据项的集合,用于描述一个对象在某方面的属性;
    • 文件:是指由创建者所定义的、具有文件名的一组相关元素的集合,可分为以下两种类型:
      • 有结构文件:文件由若干个相似的记录组成,如一个班的学生记录;
      • 无结构文件:可视为一个字符流,比如一个二进制文件或字符文件;

1.2 文件控制块

与进程管理一样,为便于文件管理,在操作系统中引入了文件控制块的数据结构。操作系统通过文件控制块来维护文件元数据。

  • 文件的属性(元数据):除了文件数据之外的与文件相关的信息,如所有者、创建时间等附加信息,称为文件属性或文件 元数据。文件属性在不同系统中差别很大,但通常都包括名称、类型、创建者、所有者、位置、大小、保护、创建时间、最后修改和最后存取时间等属性;
  • 文件控制块 (FCB):每个文件对应一个文件控制块,用来存放控制文件需要的各种信息,以实现 “按名存取”。为了创建一个新文件,系统将分配一个 FCB 并存放在文件目录中,称为目录项;
    在这里插入图片描述
  • 文件目录:FCB 的有序集合称为文件目录,一个 FCB 就是一个文件目录项。FCB 和文件目录一般都存放在磁盘上,只有在需要时才加载至内存。文件目录可能存放有数据文件或者子目录文件;
  • 索引结点:在检索目录时,除了文件名,其他描述信息不会用到。于是,有的系统(如UNIX)便采用了文件名和文件描述信息分开的方法,使文件描述信息单独形成一个称为索引结点的数据结构,简称 i 结点。在文件目录中的每个目录项仅由文件名和指向该文件所对应的 i 结点的指针构成;

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

1.3 文件的操作

当用户对一个文件实施操作时,每次都要从检索目录开始。对于给定的文件名,先搜索文件目录以查找文件位置,再执行相应的文件操作。

  • 文件的基本操作:操作系统提供系统调用,对文件进行创建、写、读、重定位、删除和截断等操作;

    • 创建文件:有两个必要步骤,一是为新文件分配必要的外存空间;二是在文件目录中为之创建一个目录项,目录项记录了新文件名、在外存中的地址等信息;
    • 写文件:对于给定文件名,搜索文件目录以查找文件位置。系统为待写文件维护一个写位置的指针;
    • 读文件:对于给定文件名,搜索文件目录以查找文件位置。系统为待读文件维护一个读位置的指针;
    • 重新定位文件:也称文件定位,搜索目录以找到适当的条目,并将当前文件位置指针重新定位到给定值。重新定位文件不涉及读、写操作;
    • 删除文件:为了删除文件,先从目录中检索指定文件名的目录项,然后释放该文件所占的存储空间,并删除目录条目;
    • 截断文件:允许文件其他属性不变,将文件的大小调整为指定的长度。在一些情况下,截断文件可以用来清除文件中的数据,将其长度置为 0 并释放其空间即可;

    上述 6 个基本操作可以组合起来执行其他文件操作。例如,文件的复制可以由创建新文件、从旧文件读出并写入新文件构成。

  • 打开文件表:为了避免多次重复检索目录打开同一文件,多数操作系统要求在文件使用之前通过系统调用 open 显式打开。操作系统维护一个包含所有打开文件信息的表,称为打开文件表;

  • 文件的打开和关闭:系统调用 open 操作根据文件名搜索目录,将该 文件的目录项从外存复制到内存打开文件表的一个表项中,并将该表项的编号(也称索引)返回给用户。当用户再次向系统发出文件操作请求时,可通过索引在打开文件表中查到文件信息,从而节省再次搜索目录的开销。当文件不再使用时,可利用系统调用 close 关闭它,操作系统将会从打开文件表中删除这一条目;

  在多个不同进程可以同时打开文件的操作系统中,通常采用两级打开文件表:整个系统的表和每个进程的表,整个系统的打开文件表包含 FCB 的副本及其他信息;每个进程的打开文件表根据它打开的所有文件,包含指向系统表中适当条目的指针。
  一旦有进程打开了一个文件,系统表就包含该文件的条目。当另一个进程执行调用 open 时,只不过是在该进程的文件打开表中增加一个条目,指向系统表的相应条目即可。通常,系统打开文件表为每个文件关联一个打开计数器 (Open Count),以记录多少进程打开了该文件。每个关闭操作 close 使 count 递减,当打开计数器为 0 时,表示该文件不再被使用,并且可从系统打开文件表中删除相应条目。
在这里插入图片描述

  文件名不必是打开文件表的一部分,因为一旦完成对 FCB 在磁盘上的定位,系统就不再使用文件名。对于访问打开文件表的索引,UNIX 称之为 文件描述符,而 Windows 称之为 文件句柄。因此,只要文件未被关闭,所有文件操作就通过打开文件表来进行。

1.4 文件保护

为了防止文件共享可能会导致文件被破坏或未经核准的用户修改文件,文件系统必须控制用户对文件的存取,即解决对文件的读、写、执行的许可问题。为此,必须在文件系统中建立相应的文件保护机制。文件保护通过 口令保护加密保护访问控制 等方式实现。其中,口令和加密是为了防止用户文件被他人存取或窃取,并没有控制用户对文件的访问类型,而访问控制则用于控制用户对文件的访问方式。

  • 口令保护:用户在创建文件时提供一个口令,系统为其建立 FCB 时附上相应口令,同时告诉允许共享该文件的其他用户,用户请求访问时必须提供相应的口令。这种方法时间和空间的开销不多,缺点是口令直接存在系统内部,不够安全;

  • 加密保护:用户对文件进行加密,文件被访问时需要使用密钥。这种方法保密性强,节省了存储空间,不过编码和译码要花费一定的时间;

  • 访问类型:对文件的保护还可以从限制对文件的访问类型中出发,可加以控制的访问类型如下:

    • 读:从文件中读;
    • 写:向文件中写;
    • 执行:将文件装入内存并执行;
    • 添加:将新信息添加到文件结尾部分;
    • 删除:删除文件,释放空间;
    • 列表清单:列出文件名和文件属性;
  • 访问控制:根据用户身份进行控制,为每个文件和目录增加一个 访问控制列表 (Access-Control List, ACL),以规定每个用户名及其所允许的访问类型。访问控制使用精简的访问列表,有拥有者、组和其他三种用户类型:

    • 拥有者:创建文件的用户;
    • 组:一组需要共享文件且具有类似访问的用户;
    • 其他:系统内的所有其他用户;

    这样,只需用三个域即可列出访问表中这三类用户的访问权限。文件主在创建文件时,说明创建者用户名及所在的组名,系统在创建文件时也将文件主的名字、所属组名列在该文件的 FCB 中。用户访问该文件时,若用户是文件主,按照文件主所拥有的权限访问文件;若用户和文件主在同一个用户组,则按照同组权限访问,否则只能按其他用户权限访问;

1.5 文件的逻辑结构

文件的逻辑结构是从用户观点出发看到的文件的组织形式;文件的物理结构是从实现观点出发看到的文件在外存上的存储组织形式。文件的逻辑结构与存储介质特性无关,它实际上是指在文件的内部,数据逻辑上是如何组织起来的。按逻辑结构,文件可划分为 无结构文件有结构文件 两大类。

  • 无结构文件(流式文件):无结构文件是最简单的文件组织形式,将数据按顺序组织成记录并积累、保存,它是有序相关信息项的集合,以字节(Byte)为单位;

  由于无结构文件没有结构,因而对记录的访问只能通过穷举搜索的方式,因此这种文件形式对大多数应用不适用。但字符流的无结构文件管理简单,用户可以方便地对其进行操作。所以,那些对基本信息单位操作不多的文件较适于采用字符流的无结构方式,如源程序文件、目标代码文件等。

  • 有结构文件(记录式文件):按记录的组织形式可以分为顺序文件、索引文件、索引顺序文件和散列文件四种。在对记录进行批量操作时,顺序文件的效率是所有逻辑文件中最高的,索引文件和索引顺序文件都提高了存取的速度,但因为配置索引表而增加了存储空间;
    • 顺序文件:文件中的记录一个接一个地顺序排列,记录通常是定长的,可以顺序存储或以链表形式存储。顺序文件有串结构和顺序结构两种结构,前者的各项记录的顺序与关键字无关,按存入时间的先后进行排列;后者的所有记录按关键字顺序排列,检索效率高。对于顺序存储设备(如磁带),只有顺序文件才能被存储并能有效地工作;
    • 索引文件:建立一张索引表,为主文件的每个记录在索引表中分别设置一个表项,包含指向变长记录的指针(即逻辑起始地址)和记录长度,索引表按关键字排序,因此其本身也是一个定长记录的顺序文件。这样就把对变长记录顺序文件的检索转变为对定长记录索引文件的随机检索,从而加快了记录的检索速度;
      在这里插入图片描述
    • 索引顺序文件:顺序文件和索引文件的结合。索引顺序文件将顺序文件中的所有记录分为若干 ,为顺序文件建立一张索引表,在索引表中为每组中的第一条记录建立一个索引项,其中含有该记录的关键字值和指向该记录的指针。索引表中每个组的指针指向每组的第一条记录的关键字值。主文件中记录分组排列,同一个组中的关键字可以无序,但组与组之间的关键字必须有序。查找一条记录时,首先通过 索引表 找到其所在的组,然后在该组中使用 顺序 查找,就能很快地找到记录;
      在这里插入图片描述
    • 散列文件:给定记录的键值或通过散列函数转换的键值直接决定记录的物理地址。这种映射结构不同于顺序文件或索引文件,没有顺序的特性。散列文件有很高的存取速度,但是会引起冲突;

1.6 文件的物理结构

文件的逻辑结构是从用户观点出发看到的文件的组织形式;文件的物理结构是从实现观点出发看到的文件在外存上的存储组织形式。文件的物理结构就是研究文件的实现,即文件数据在物理存储设备上是如何分布和组织的。

本节主要介绍文件的分配方式,即对磁盘非空闲块的管理。常用的磁盘空间分配方法有三种:连续分配、链接分配和索引分配。

  • 连续分配:每个文件在磁盘上占有 一组连续的块,磁盘地址定义了磁盘上的一个线性排序,这种排序使作业访问磁盘时需要的寻道数和寻道时间最小。采用连续分配时,逻辑文件中的记录也顺序存储在相邻接的块中。一个文件的目录项中 “文件物理地址” 字段应包括第一块的地址和该文件所分配区域的长度;
    在这里插入图片描述

  • 链接分配:采用离散分配的方式,消除了磁盘的外部碎片,提高了磁盘的利用率。链接分配可以动态地为文件分配盘块,无须事先知道文件的大小,并且对文件的插入、删除和修改也非常方便。链接分配又分为隐式链接和显式链接两种形式:

    • 隐式链接:目录项中含有文件第一块的指针和最后一块的指针,每个文件对应一个磁盘块的链表。隐式链接分配下,一个文件的磁盘块分布在磁盘的任何地方,除最后一个盘块外,其余每个盘块都含有指向文件下一个盘块的指针。但隐式链接只适合顺序访问,并且随机访问效率很低;
      在这里插入图片描述
    • 显式链接:把用于链接文件各物理块的指针,从每个物理块的末尾中提取出来,显式地存放在内存的一张链接表中。该表在整个磁盘中仅设置一张,称为 文件分配表 (File Allocation Table, FAT),对应一个文件。FAT 的每个表项中存放链接指针,即下一个盘块号。文件的第一个盘块号记录在文件目录项 “物理地址” 字段中,后续的盘块可通过查 FAT 找到;
      在这里插入图片描述
  • 索引分配:将每个文件所有的盘块号都集中放在一起构成索引块,每个文件都有一个索引块。一个索引块是一个磁盘块地址的数组,索引块的第 i 个条目指向文件的第 i 个块;
    在这里插入图片描述

  • 混合索引分配:为了能够较全面地照顾到小型、中型、大型和特大型文件,可采用混合索引分配方式。对于小文件,为了提高对众多小文件的访问速度,最好能将它们的每个盘块地址直接放入 FCB,即为直接寻址。对于中型文件,可以采用单级索引方式,需要先从 FCB 中找到该文件的索引表,从中获得该文件的盘块地址,即为一次间址。对于大型或特大型文件,可以采用两级和三级索引分配方式;
    在这里插入图片描述

2. 目录

前面介绍了文件的逻辑结构和物理结构,本节将介绍目录的实现。文件目录是一种数据结构,用于标识系统中的文件及其物理地址,供检索时使用。通常,一个文件目录也被视为一个文件。

2.1 目录

前面已经说过,文件目录是 FCB 的有序集合,一个 FCB 就是一个文件目录项。FCB 和文件目录一般都存放在磁盘上,只有在需要时才加载至内存。文件目录可能存放有数据文件或者子目录文件。

从用户的角度看,目录在应用程序所需要的文件名和文件之间提供一种映射,所以目录管理要实现 “按名存取"。目录存取的效率直接影响到系统的性能,所以要提高对目录的检索速度。在多用户系统中,应允许多个用户共享一个文件,因此目录还需要提供用于控制访问文件的信息。此外,应允许不同用户对不同文件采用相同的名字,以便于用户按自己的习惯给文件命名,目录管理通过树形结构来解决和实现。

2.2 目录结构

  • 单极目录结构:在整个文件系统中只建立一张目录表,每个文件占一个目录项:
    在这里插入图片描述
    当访问一个文件时,先按文件名在该目录中查找到相应的 FCB,经合法性检查后再执行相应的操作;当建立一个新文件时,必须先检索所有目录项,以确保没有 “重名” 的情况,才能在该目录中增设新文件的 FCB;当删除一个文件时,先从该目录中找到该文件的目录项,回收该文件所占用的存储空间,然后清除该目录项;

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

  • 两级目录结构:将文件目录分成主文件目录 (MasterFile Directory, MFD) 和用户文件目录 (User File Directory, UFD) 两级:
    在这里插入图片描述
    主文件目录项记录用户名及相应用户文件目录所在的存储位置;用户文件目录项记录该用户文件的 FCB 信息。当某用户想要访问某文件时,只需搜索该用户对应的 UFD,这既解决了不同用户文件的 “重名” 问题,又在一定程度上保证了文件的安全;

  两级目录结构提高了检索的速度,解决了多用户之间的文件重名问题,文件系统可以在目录上实现访问限制。但是两级目录结构缺乏灵活性,不能对文件分类。

  • 树形目录结构:将两级目录结构加以推广,就形成了树形目录结构:
    在这里插入图片描述
    当用户要访问某个文件时,用文件的路径名标识文件,文件路径名是个字符串,由从根目录出发到所找文件通路上所有目录名与数据文件名用分隔符 “/” 链接而成。从根目录出发的路径称为绝对路径。当层次较多时,每次从根目录查询会浪费时间,于是加入了当前目录(又称工作目录),进程对各文件的访问都是相对于当前目录进行的。当用户要访问某个文件时,使用相对路径标识文件,相对路径由从当前目录出发到所找文件通路上所有目录名与数据文件名用分隔符 “/” 链接而成;

  树形目录结构可以明显地提高对目录的检索速度和文件系统的性能,并且可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。在树形目录中,不同性质、不同用户的文件,可以分别呈现在系统目录树的不同层次或不同子树中,很容易地赋予不同的存取权限。但是,在树形目录中查找一个文件,需要按路径名逐级访问中间结点,增加了磁盘访问次数,这无疑会影响查询速度。目前,大多数操作系统如 UNIX、Linux 和 Windows 系统都采用了树形文件目录。

  • 无环图目录结构:为了实现文件共享,在树形目录结构的基础上增加了一些指向同一结点的有向边,使整个目录成为一个有向无环图:
    在这里插入图片描述
    当某用户要求删除一个共享结点时,若系统只是简单地将它删除,则当另一共享用户需要访问时,会因无法找到这个文件而发生错误。为此,可为每个共享结点设置一个共享计数器,每当图中增加对该结点的共享链时,计数器加 1;每当某用户提出删除该结点时,计数器减 1。仅当共享计数器为 0 时,才真正删除该结点,否则仅删除请求用户的共享链;

  无环图目录结构方便地实现了文件的共享,但使得系统的管理变得更加复杂。

2.3 目录的操作

  • 搜索文件:当用户使用一个文件时,需要搜索目录,以找到该文件的对应目录项;
  • 创建文件:当创建一个新文件时,需要在目录中增加一个目录项;
  • 删除文件:当删除一个文件时,需要在目录中删除相应的目录项;
  • 创建目录:在树形目录结构中,用户可创建自己的用户文件目录,并可再创建子目录;
  • 删除目录:有两种方式:
    • 不删除非空目录:删除时要先删除目录中的所有文件,并递归地删除子目录;
    • 可删除非空目录:目录中的文件和子目录同时被删除;
  • 移动目录:将文件或子目录在不同的父目录之间移动,文件的路径名也会随之改变;
  • 显示目录:用户可以请求显示目录的内容,如显示该用户目录中的所有文件及属性;
  • 修改目录:某些文件属性保存在目录中,因而这些属性的变化需要改变相应的目录项;

2.4 目录的实现

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

  • 线性列表:采用文件名和数据块指针的链表来表示目录,其中每个节点表示一个目录项或文件项,通过指针建立层级关系;

  线性列表的优点在于实现简单,但查找比较费时。

  • 树:使用树数据结构来表示目录结构,每个节点代表一个目录,子节点表示其子目录或文件;

  树适合表示层级结构,并且通常用于文件系统等复杂的目录实现。

  • 哈希表:使用文件名检索哈希可以得到一个指向线性列表中元素的指针;

  哈希表对于大型文件系统可以提供快速的访问,查找非常迅速,插入和删除也较简单;但通常不适合直接表示层级关系,并且需要一些措施来避免冲突。

目录查询是通过在磁盘上反复搜索完成的,需要不断地进行 I/O 操作,开销较大。所以为了减少 IO 操作,操作系统会把当前使用的文件目录复制到内存,以后要使用该文件时就只需在内存中操作,因此降低了磁盘操作次数,提高了系统速度。

2.5 文件共享

文件共享使多个用户共享同一个文件,系统中只需保留该文件的一个副本。若系统不能提供共享功能,则每个需要该文件的用户都要有各自的副本,会造成对存储空间的极大浪费。现代常用的文件共享方法有 基于索引结点的共亭方式利用符号链实现文件共享

  • 基于索引结点的共亭方式:也叫硬链接,适用于树形目录结构。当有两个或多个用户要共享一个子目录或文件时,将共享文件或子目录的索引结点链接到两个或多个用户的目录中:
    在这里插入图片描述
    在这种共享方式中,诸如文件的物理地址及其他的 文件属性等信息,不再放在目录项中,而放在索引结点中。在文件目录中只设置文件名及指向相应索引结点的指针。在索引结点中还应有一个链接计数 count,用于表示链接到本索引结点上的用户目录项的数目;

  用户 A 创建一个新文件时,他便是该文件的所有者,此时将 count 置为 1。用户 B 要共享此文件时,在 B 的目录中增加一个目录项,并设置一个指针指向该文件的索引结点即可。此时,文件主仍然是用户 A,count=2。如果用户 A 不再需要此文件,也不能直接将其删除,因为若删除了该文件,也必然删除了该文件的索引结点,这样便会使用户 B 的指针悬空,而 B 可能正在此文件上执行写操作,此时将半途而废。因此用户 A 只是将该文件的 count 减 1,然后删除自己目录中的相应目录项。用户 B 仍可以使用该文件。当 count =0 时,表示没有用户使用该文件,才会删除该文件:
在这里插入图片描述

  • 利用符号链实现文件共享:也叫软链接。为使用户 B 能共享用户 A 的一个文件 F,可以由系统创建一个 LINK 类型的新文件,也取名为 F,并将该文件写入用户 B 的目录中,以实现用户 B 的目录与文件 F 的链接。在新文件中只含被链接文件 F 的路径名。当用户 B 要访问被链接的文件 F 且正要读 LINK 类新文件时,操作系统查看到要读的文件是 LINK 类型,则根据该文件中的路径名去找到文件F,然后对它进行读,从而实现用户 B 对文件 F 的共享;

  在利用符号链方式实现文件共享时,只有文件主才拥有指向其索引结点的指针。而共享该文件的其他用户只有该文件的路径名,并不拥有指向其索引结点的指针。这样,也就不会发生在文件主删除一共享文件后留下一悬空指针的情况。当文件主把一个共享文件删除后,若其他用户又试图通过符号链去访问它时,则会访问失败,于是将符号链删除,此时不会产生任何影响。

文件共享,“软” “硬” 兼施。硬链接就是多个指针指向一个索引结点,保证只要还有一个指针指向索引结点,索引结点就不能删除;软链接就是把到达共享文件的路径记录下来,当要访问文件时,根据路径寻找文件。可见,硬链接的查找速度要比软链接的快。

3. 文件系统

3.1 文件系统结构

文件系统提供高效和便捷的磁盘访问,以便允许存储、定位、提取数据。文件系统有两个不同的设计问题:定义文件系统的用户接口创建算法和数据结构,前者涉及定义文件及其属性、所允许的文件操作、如何组织文件的目录结构等;后者涉及映射逻辑文件系统到物理外存设备。现代操作系统有多种文件系统类型,因此文件系统的层次结构也不尽相同。
在这里插入图片描述

  • IO 控制:包括设备驱动程序和中断处理程序,在内存和磁盘系统之间传输信息。设备驱动程序将输入的命令翻译成底层硬件的特定指令,硬件控制器利用这些指令使 IO 设备与系统交互。设备驱动程序告诉 IO 控制器对设备的什么位置采取什么动作;
  • 基本文件系统:向对应的设备驱动程序发送通用命令,以读取和写入磁盘的物理块。该层也管理内存缓冲区,并保存各种文件系统、目录和数据块的缓存。在进行磁盘块传输前,分配合适的缓冲区,并对缓冲区进行管理;
  • 文件组织模块:组织文件及其逻辑块和物理块,可以将逻辑块地址转换成物理块地址,每个文件的逻辑块从 0 到 N 编号,它与数据的物理块不匹配,因此需要通过转换来定位。文件组织模块还包括空闲空间管理器,以跟踪未分配的块,根据需求提供给文件组织模块;
  • 逻辑文件系统:用于管理元数据信息。元数据包括文件系统的所有结构,而不包括实际数据。逻辑文件系统管理目录结构,以便根据给定文件名称为文件组织模块提供所需要的信息。它通过文件控制块来维护文件结构,还负责文件保护;

3.2 文件系统布局

  • 文件系统在磁盘中的结构:磁盘划分为多个分区,每个分区中有一个独立的文件系统。文件系统可能包括如下信息:启动存储在那里的操作系统的方式、总的块数、空闲块的数量和位置、目录结构以及各个具体文件等;
    在这里插入图片描述

    • 主引导记录 (Master Boot Record, MBR):位于磁盘的 0 号扇区,存储启动引导程序用来引导计算机。当计算机启动时,BIOS 读入并执行 MBR。MBR 做的第一件事是确定活动分区,读入它的第一块,即引导块;
    • 分区表:MBR 后面就是分区表,该表给出每个分区的起始和结束地址。分区表中有一个分区表项被标记为 活动分区,指示了包含引导程序的分区;
    • 引导块 (boot block):MBR 执行引导块中的程序后,该程序负责启动该分区中的操作系统。为统一起见,每个分区都从一个引导块开始,即使它不含有一个可启动的操作系统,也不排除以后会在该分区安装一个操作系统;
    • 超级块 (super block):包含文件系统的所有关键信息,在计算机启动时,或者在该文件系统首次使用时,超级块会被读入内存。超级块中的典型信息包括分区的块的数量、块的大小、空闲块的数量和指针、空闲的 FCB 数量和 FCB 指针等;
    • 空闲空间管理:文件系统中空闲块的信息可以使用位示图或指针链接的形式给出;
  • 文件系统在内存中的结构:内存中的信息用于管理文件系统并通过缓存来提高性能,这些数据在安装文件系统时被加载,在文件系统操作期间被更新,在卸载时被丢弃;

    • 内存中的安装表:包含每个已安装文件系统分区的有关信息;
    • 内存中的目录结构的缓存:包含最近访问目录的信息。对安装分区的目录,它可以包括一个指向分区表的指针;
    • 整个系统的打开文件表:包含每个打开文件的 FCB 副本及其他信息;
    • 每个进程的打开文件表:包含一个指向整个系统的打开文件表中的适当条目的指针,以及其他信息;

3.3 外存空闲空间管理

应用程序经常在硬盘上进行文件的创建与删除操作,因此文件系统需要对磁盘空间进行管理。当用户存储文件时,文件系统需要为其分配磁盘空间。本节介绍几种常见的外存空闲空间管理方法。

  • 位示图法:在外存上建立一张 位示图 (Bitmap),记录文件在磁盘上的空间使用情况。位示图的每一位仅对应磁盘上的一个物理块,利用二进制的一位来表示磁盘中一个盘块是否已分配。通常,可用 m×n 个位来构成位示图,m×n 等于磁盘的总块数;
    在这里插入图片描述

  • 空闲块列表:系统为外存上的所有空闲区域建立一个空闲块列表,其中空闲块列表的每个表项对应一个由多个空闲块构成的空闲区,它包括空闲块个数和第一个空闲块号等信息;
    在这里插入图片描述
    空闲文件列表适用于文件的连续分配方式,它与内存的动态分配方式相似,同样是采用首次适应算法、最佳适应算法等;

  • 空闲链表法:将磁盘上的所有空闲块串成一条链。在每个空闲块上除含有用于指示下一个空闲块的指针外,还指明空闲块的大小信息。空闲块链接方法因系统而异,比较典型的空闲链表法可分为两种方式:空闲块链与成组链接法;

    • 空闲块链:节点是单个空闲块; 在这里插入图片描述
    • 成组链接法:将空闲块分成若干组,每 100 个空闲块为一组,每组的第一个空闲块登记了下一组空闲块的物理盘块号和空闲块总数。如果一组的第一个空闲块号等于 0,则意味着该组是最后一组,即无下一个空闲块;
      在这里插入图片描述

3.4 虚拟文件系统

虚拟文件系统 (VFS) 为用户程序提供了文件系统操作的统一接口,屏蔽了不同文件系统的差异和操作细节。用户程序可以通过 VFS 提供的统一调用函数来操作不同文件系统的文件,而无须考虑具体的文件系统和实际的存储介质。
在这里插入图片描述

  虚拟文件系统采用了面向对象的思想,它抽象出一个通用的文件系统模型,定义了通用文件系统都支持的接口。新的文件系统只要支持并实现这些接口,即可安装和使用。以 Linux 中调用 write() 操作为例,它在 VFS中 通过 sys_write() 函数处理,sys_write() 找到具体文件系统,将控制权交给该文件系统,最后由具体文件系统与物理介质交互并写入数据。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值