Chapter5 - 文件管理

0x00 概述

文件系统(file system)是操作系统中专门负责对外存空间及文件进行管理的程序模块,把用户操作的抽象数据,映射成为在计算机物理设备上存放的具体数据,并提供数据访问的方法和结构。

  • 用户使用的抽象数据就是文件,通常的形式为流式文件(如源程序)和记录式文件(如数据库文件),这实际上是数据的一种逻辑结构

    • 用户建立文件时只需提供名称,然后给定具体内容即可。
  • 具体存放在外存上的二进制数据形式称为文件的物理组织,那是信息的最终存取形式。

文件管理的主要目标

  • 系统:提高存储空间的利用率和减少存取时间;
  • 用户:实现对文件的案名存取;

文件管理的需求

  • 用户视角(使用逻辑文件)

    • 用户关心文件中要使用的数据,不关心具体的存放形式(和位置)。
    • 关心的是文件系统所提供的对外的用户接口,包括文件如何命名、如何保护、如何访问(创建、打开、关闭、读、写等);
  • 操作系统视角(组织和管理物理文件)

    • 文件的描述和分类,关心的是如何来实现与文件有关的各个功能模块,包括如何来管理存储空间、文件系统的布局、文件的存储位置、磁盘实际运作方式(与设备管理的接口)等。

文件管理要解决的主要问题

  • 完成文件存储空间的管理;
  • 实现文件名到物理地址的转换;
  • 实现文件和目录的操作;
  • 提供文件共享能力和安全措施;
  • 提供友好的用户接口;

0x01 文件系统的概念

1. 文件

1)文件的概念

文件是指一组带标识(或符号名)的、在逻辑上有完整意义的信息项的序列。

  • 标识:即为文件名
  • 信息项:构成文件内容的基本单位(单个字节,或多个字节),各信息项之间具有顺序关系

文件是一种抽象机制,作为数据的存储和访问单位

  • 可以视为一个单独的连续的逻辑地址空间,其大小即为文件的大小,与进程的地址空间无关。

文件包括两部分内容

  • 文件体:文件本身的内容;
  • 文件说明(文件控制块):文件存储和管理的相关信息,如:文件名、文件类型、文件长度、文件内部标识、文件物理地址、存取权限、创建时间、访问时间等;

从基本构成单位(结构)的角度来看,文件目前主要被分成两种形式

  • 无结构文件(流式):文件被看做是命名了的字符串集合
  • 有结构文件(记录式):文件被看做是命名了的相关记录的集合。文件的组织被分为文件、记录和数据项三级。
    • 记录是一组相关数据项的集合,用于描述一个对象的各种属性,一条记录一般包含多个数据项。(一行)
    • 数据项是描述一个对象的相关字符的集合。(一列)

文件的本质是一组字节序列,源于用户程序对所要输入处理的原始数据和输出结果的“长期”(持久化)保存的需求,并按一定“格式”(规范)呈现。所有“需要长期保存”的文件都按某种组织形式存放(映射)到磁盘中。

  • 所有的IO设备(字符设备,块设备以及网络设备)都可以看作为字节序列的载体,因此,所有的IO设备也可以抽象为文件进行表达,包括磁盘、键盘、鼠标、显示器都可以看成是文件。
  • 所有的I/O设备都是文件这一抽象概念的具体表现,这就是现代OS中“一切皆文件”的含义。

2)文件的分类

程序所处理的数据的种类繁多:如数值数据、字符数据、二进制数据,以及以此为基础的具有各种组织形式的数据。

为方便使用,人们定义了各种类型的文件:

  • 性质和用途: 系统文件、库文件、用户文件

  • 数据形式:源文件、目标文件、可执行文件

  • 保护级别:只读文件、读写文件、执行文件、不保护文件

  • 逻辑结构:有结构文件、无结构文件

  • 物理结构:顺序文件、链接文件、索引文件

  • 保存时间:临时文件、永久文件

3)文件的操作

  • 对整个文件的操作:打开(open)文件、关闭(close)文件、创建(create)文件、撤销(destroy)文件、复制(copy)文件、文件更名(rename)、文件列表(list)。
  • 对文件记录的操作:检索(find)记录、修改(update)记录、插入(insert)记录、删除(delete)记录。

2. 目录

文件系统通过目录来组织管理文件。

1)目录的概念

目录是由文件说明索引组成的用于文件检索的特殊文件,目录的内容是文件访问和控制的信息(不包括文件内容):

文件目录的每个表目应包含:

  1. 文件的符号名
  2. 文件所在物理地址
  3. 文件结构信息
  4. 存取控制信息
  5. 管理信息

2)目录的层次结构

一个目录通常包含有许多目录项,每个目录项可以使一个文件或目录,这样就产生了目录的层次结构,或称为树状目录结构

  • 根节点称为根目录;
  • 一个目录是一个非终结结点;
  • 一个文件是一个终结结点;
单级文件目录
image-20200927102938389
  • 特点
    • 结构简单(只在早期的个人计算机上使用过);
    • 文件多时,目录检索时间长
    • 有命名冲突
      • 如多个文件有相同的文件名(不同用户的相同作用的文件)或一个文件有多个不同的文件名(不同用户对同一文件的命名);
    • 不便于实现共享
两级文件目录

在根目录(第一级目录)下,每个用户对应一个目录(第二级目录),在用户目录下是该用户的文件,而不再有下级目录。适用于多用户系统,各用户可有自己的专用目录。

image-20200927103131936
多级目录(层次目录)
  • 在较高的目录级,其目录表目为下一级目录名以及一个指向其目录的指针。

  • 在最后一级目录,这个指针指向文件的物理地址。

image-20200927103355078

特点

  • 层次清楚
    • 不同性质、不同用户的文件可以构成不同子树,便于管理;
    • 不同用户的文件可以被赋予不同的存取权限,有利于文件的保护;
    • 数目较多时,便于系统和用户将文件分散管理,使得文件和目录的层次结构较为清晰。适用于较大的文件系统管理;
  • 可解决文件重名问题
    • 文件在系统中的搜索路径时从根开始到文件名为止的各文件名组成,只要在同一目录下的文件名不发生重复就不会由文件重名而引发混乱;
  • 查找速度快
    • 可为每类文件建立一个子目录,由于对多级目录的查找每次只查找目录的一个子集,所以搜索速度快于一级和二级目录;
  • 目录级别太多时,会增加路径检索时间

3)目录的操作

有关目录的系统调用:

  • 创建(create)目录项
  • 删除(delete)目录项
  • 打开(opendir)目录项
  • 关闭(closedir)目录项
  • 读(readdir)目录项
  • 更名(rename)目录项
  • 链接(link)目录项
  • 撤销(unlink)目录项

在多级目录结构中,如何来指定需要访问的文件?

  • 绝对路径名:对于每一个文件或目录,可以用从根目录开始依次经由的各级目录名,再加上最终的文件名或目录名来表示(之间用分隔符隔开)一个文件或目录的绝对路径名是唯一的。
    • 例如:\spell\mail\copy\all
  • 相对路径: 结合当前路径进行使用。
    • 比如上个例子中, 如果当前目录为 /usr 那么 ast/mailbox 指的就是根目录下的 usr 文件夹中的 ast 文件中的 mailbox 文件
  • 当前目录:也叫工作目录,用户可以指定一个目录作为当前的工作目录;
  • 上一级目录: 使用 “..” 表示上一级目录, 读作dotdot。
    • 在根目录下 “..” 表示它本身,还是根目录。

3. 文件系统

1)文件系统的概念与功能

操作系统中与文件管理有关的那部分软件和被管理的文件以及实施管理所需要的数据结构总体

文件系统必须解决的几个主要问题

  • 如何有效的分配文件存储器的存储空间

  • 提供合适的存取方法

  • 命名的冲突和文件的共享

  • 文件系统的执行效率

    • 文件系统在操作系统接口中占的比例最大,用户使用操作系统的感觉在很大程度上取决于对文件系统的使用效果.
  • 提供与I/O的统一接口

2)文件系统的功能

  • 方便的文件访问:以符号名称作为文件标识,便于用户使用;
  • 并发文件访问和控制:在多道程序系统中支持对文件的并发访问和控制;
  • 统一的用户接口:为不同设备提供统一接口,方便用户操作和编程;
  • 多种文件访问权限:在多用户系统中的不同用户对同一文件会有不同的访问权限;
  • 执行效率:存储效率、检索性能、读写性能;
  • 差错恢复:能够验证文件的正确性,并具有一定的差错恢复能力;

3)文件系统模型

教材将文件系统的组成划分为五个部分

  • 文件组织和存取
  • 文件存取过程管理
  • 文件I/O管理
  • 外存管理
  • 系统故障恢复

详见教材P279。

image-20200927105132047

PPT中将文件系统模型分为了三个层次。

一、文件系统的接口(最接近用户的)

为了方便用户使用操作系统,文件系统通过向用户提供两种类型的接口

  • 命令行接口:这是指的是作为用户和文件系统的交互的接口。用户可以通过键盘终端键入命令,取得文件系统的服务。

  • 程序接口:这是作为用户程序何文件系统的接口。用户程序可以通过系统调用的形式来取得文件系统的服务。

二、对象操作管理的软件集合

这是文件管理系统的核心部分。文件系统的功能大多数是在这一层实现的,其中包括:

  • 对文件存储空间的管理;
  • 对文件目录的管理;
  • 用户将文件的逻辑地址转换为物理地址的机制;
  • 对文件读和写的管理;
  • 以及对文件的共享和保护的功能。
三、对象及其属性

文件系统管理的对象有

(1)文件,它作为文件管理的直接对象。

(2)目录,为了方便用户对文件的存取和检索,在文件系统中必须配置目录,每个目录项中,必须包含文件名及文件所在的物理地址(或指针)。对目录的组织和管理是方便用户何提高对文件存取速度的关键。

(3)磁盘存储空间。文件和目录必定占用存储空间,对这部分空间的高效管理,不仅能够提高外存的利用率,而且能够提高对文件的检索速度。

0x02 实现文件

1. 文件的组成和文件控制块

一个文件包含文件体和文件控制块(FCB)两部分。

  • 文件体是文件的正文部分,是用户需要保存和处理的有效信息;
  • 文件控制块用来保存一个文件的文件名、物理位置及其他有关的说明与控制信息。系统利用这些信息可以实现从逻辑记录到物理记录的转换以及其他许多操作。

文件控制块的所包含的信息:

  • 基本信息

    • 文件名:字符串,通常在不同系统中允许不同的最大长度。可以修改。
    • 物理位置;
    • 文件逻辑结构:有/无结构(记录文件,流式文件)
    • 文件物理结构:(如顺序,索引等)
  • 访问控制信息

    • 文件所有者(属主):通常是创建文件的用户,或者改变已有文件的属主;
    • 访问权限(控制各用户可使用的访问方式):如读、写、执行、删除等;
  • 使用信息

    • 创建时间,上一次修改时间,当前使用信息等

一个典型的FCB:

image-20200927154849972

2. 文件的结构

文件的逻辑结构是记录在用户或应用程序面前呈现的方式;文件的物理结构是文件管理系统内部采用的、与存储介质的物理特性相适应的形式。

1)文件的逻辑结构

常见的文件逻辑结构及其存取方法如下:

a. 顺序结构的定长记录

文件中的每个记录的长度都相等,用户把文件看成是由定长记录组成的序列,记录在文件内可从0开始依次编号。

  • 显然,通过对记录编号的计算可以立即得到某个记录在文件内的相对位置。

对此种结构的文件提供顺序存取(存取下一个记录)和直接存取(存取第n个记录)两种命令。

  1. 顺序存取只要把当前的逻辑字节地址加上记录长度就可得到下一个记录的逻辑字节地址。

  2. 直接存取第n个记录,其逻辑字节地址为:(n-1) x 记录长度。

b. 顺序结构的变长记录

文件中的每个记录的长度都由用户根据需要来确定,用户把文件看成是长度不同的记录序列,记录在文件内亦可从0开始依次编号。

  1. 顺序存取下一个记录
  2. 直接存取(索引表)
c. 带关键字的逻辑记录

由给定的一个主关键字的值可唯一确定一个记录,记录的编址不是按它们在文件中的位置,而是按逻辑记录中的某个数据项的内容进行编址。

  • 例如,学生表中,每个学生为一条记录,且可以根据“学号”唯一确定。

2)文件的物理结构

文件在存储介质上的存放方式,表示了一个文件在文件存储介质上的位置、链接和编目的方法。

主要解决两个问题:

  • 假设一个文件被划分成N块,这N块在磁盘上是怎么存放的?

  • 其地址(块号或簇号)在FCB中是怎样记录的?

主要结构:

  • 连续结构、串联结构、索引结构
a. 顺序结构——连续文件

根据记录中某一公共的属性,把一个逻辑上连续的记录分配到连续的物理块中,即用物理上的顺序存储来实现文件的逻辑次序。

  • 在这种情况下,物理顺序和逻辑顺序是一致的
image-20200927160753178

优点:

  • 结构简单,实现容易,不需要额外的空间开销
  • 支持顺序存取和随机存取,顺序存取速度快
  • 连续存取时速度较快

缺点:

  • 文件长度一经固定便不易改变;

  • 不利于文件的动态增加和修改

    • 因为对连续文件的任何修改,都要把整个文件重新复制一遍。

顺序结构通常适用于只读、只写、或变化不大的顺序访问的文件,多用于磁带设备。

b. 链表结构——串联文件

串联文件结构是按顺序由串联的块组成的,即文件的信息按存储介质的物理特性存于若干块中。

  • 链首指针存放在该文件目录中。文件的结尾块的指针为“∧”,表示文件至本块结束。

  • 每个物理块的最末一个字(或第一个字)作为链接字,它指出后继块的物理地址。

  • 对于记录式文件一块中可包含一个逻辑记录或多个逻辑记录,也可以若干物理块包含一个逻辑记录

image-20200927161755795

优点:

  • 空间利用率高;能较好的利用辅存空间。

  • 文件动态扩充和修改容易。

  • 顺序存取效率高

    类似于存储管理中的页式

缺点:

  • 随机存取效率太低,如果访问文件的最后的内容,实际上是要访问整个文件。

  • 可靠性问题,如指针出错;

  • 链接指针占用一定的空间

c. 索引结构——随机文件

在索引结构中,一个文件的信息存放在若干个不连续物理块中,系统为每个文件建立逻辑块号与物理块号的对照表,称为文件的索引表。文件由数据文件和索引表构成,这种文件称为索引文件或随机文件。

  • 索引表就是磁盘块地址数组,其中第i个目录指向文件的第i块
  • 索引表位置:文件目录中,文件的开头等。
    • 这里必须知道每个文件的索引表长度是不一样的,不能存放在FCB中,因此FCB中只记录索引表的地址
  • 索引表大小:固定大小,非固定大小
image-20200927162433798

访问索引文件需要两步操作:

  1. 查文件索引号,由逻辑块号查得物理块号
  2. 由此磁盘物理块号而获得所要求的信息

索引表的特点

  • 优点:

    • 保持了链接结构的优点,又回避了其缺点:
      • 即能顺序存取,又能随机存取
      • 满足了文件动态增长、插入删除的要求
      • 能充分利用外存空间
  • 缺点:

    • 索引表本身带来了系统开销,如:内外存空间,存取时间

索引表的组织

  • 直接索引
image-20200927163526641
  • 间接索引
    • 当文件过大时,需要使用间接索引域
    • 0~9为直接索引指针
image-20200927163652907
  • 二次间接索引
image-20200927163824514
  • 三级索引
image-20200927163855406

3)文件物理结构的比较

  • 连续文件:

    • 优点是不需要额外的空间开销,只要在文件目录中指出文件的大小和首块的块号即可,对顺序的访问效率很高,适应于顺序存取。
    • 缺点是动态地增长和缩小系统开销很大;文件创建时要求用户提供文件的大小;存储空间浪费较大。
  • 串联文件:

    • 克服了连续文件的不足之处,但文件的随机访问系统开销较大适用于顺序访问的文件。
    • DOS系统中改造了串联文件的结构,使其克服了串联文件的不足,但增加了系统的危险性。
  • 索引文件:

    • 既适应于顺序存访问,也适应于随机访问,是一种比较好的文件物理结构,但要有用于索引表的空间开销和文件索引的时间开销
    • UNIX系统是使用索引结构成功的例子

3. 文件的存取方法

文件的存取方法是指访问文件内容的一种次序。一般有顺序存取以及随机存取(直接存取)两种方法。

  • 顺序存取:进程可以从文件开始处顺序读取文件中所有字节或记录,但不能够跳过某些内容,也不能非顺序读取。当存储媒体是磁带时,顺序存取文件是十分方便的。
  • 随机存取:用磁盘存储文件后,可以非顺序地读取文件中的字节或者记录,或根据关键字而不是位置来存取记录。因为能够以任何顺序读取文件信息,故称为随机存取,也叫直接存取。

4. 文件共享机制

文件的共享,要求系统能提供某种手段,使存储空间内保存一份副本,而所有要共享该文件的用户可用相同的或不同的文件名来访问它。

1)链接法

基本思想:用一个目录中的表目直接指向另一个目录表目。这种链接不是直接指向文件,而是在两个文件之间建立一种等价关系

2)采用共享的目录组织

把文件目录(包括主目录)的表目分成两部分:

  • 一部分包括文件的结构信息、物理地址、存取控制和管理信息等文件说明,并用 系统赋予的唯一标识符来表示;
  • 另一部分包括符号名与对应的内部标识号。
image-20200927172727315

软链接 vs 硬链接

  • 什么是软链接和硬链接
    • 软连接可以理解成快捷方式
    • 硬连接相当于为源文件建立了一个副本
  • 删除源文件对软连接和硬连接的影响
    • 和windows一样,删除源文件,快捷方式也用不了。
    • 删除源文件,只是删除了源文件与相关物理内存的映射,而副本与其的映射尚未解除。
      • 这也能解释为什么改变源文件的内容,副本也会随之改变了。

具体参考软链接和硬链接到底有啥作用和区别

  • 2009年31题,考查软/硬链接建立的属性。
    • 建立符号链接(软链接)时,引用计数值直接复制;
    • 建立硬链接时,引用计数值加1。
    • 删除文件时,删除操作对于符号链接是不可见的,这并不影响文件系统,当以后再通过符号链接访问时,发现文件不存在,直接删除符号链接;
    • 但是对于硬链接则不可以直接删除,引用计数值减1,若值不为0,则不能删除此文件,因为还有其他硬链接指向此文件。

5. 文件系统的安全性和保护机制

为了正确的共享文件,必须采取保护措施,防止未经授权的用户使用其他用户文件。

1)建立副本

把同一个文件保存到多个存储介质上(同类或不同类),出故障时,可备用副本替换

  • 优点:方法简单

  • 缺点:设备费用和系统开销增大,适用于短小且极为重要的文件

2)定时转储和恢复

最常用的文件保护措施为“定时转储”,即把这些文件备份到可拆卸外部存储器(如磁带)上,以备系统发生故障或需要时恢复这些文件。

a. 文件的转储

常用的转储方法有两种:

  • 全量转储:把文件存储器中的所有文件,定期(如每周一次)复制到磁带上。
    • 优点:
      • 实现简单
      • 转储期间系统可以重新组织介质上的用户文件(例如把磁盘上不连续存放的文件重新构造成连续存放的文件)
    • 缺点:
      • 转储时系统必须停止向用户开放;
      • 很费机时,全部转储工作可能要花费数小时;
      • 当发生故障时,只能恢复上次转储的信息,而丢失了从上次转储以来的改变和增加的信息。
  • 增量转储:每隔一定时间,把所有被修改过的文件和新创建的文件转储到磁带上。
    • 通常系统会对这些文件打上标记,当用户退出系统时,系统会自动地将表传送给系统进程,由它转储这些文件。
b. 文件的恢复

文件被转储后,当系统出现故障或需要时,就可以用重新装入备份文件的方法来恢复系统或用户文件。

3)文件的存取控制

  • 文件保护机制

    • 防止未被核准的用户存取文件;
    • 防止一个用户冒充另一个用户来存取;
    • 防止核准用户(包括文件主)误用文件;
  • 存取权限验证步骤

    • 审定用户的权限;
    • 比较用户的权限与本次存取要求是否一致;
    • 将存取要求和被访问文件的保密性比较,看是否有冲突
  • 存取控制的实现方案

    • 存取控制矩阵
    • 存取控制表
    • 用户权限表
    • 口令

6. 文件的一致性检查

两类一致性

  • 磁盘块的一致性:每个磁盘块设置两个计数器,一个记录在文件中出现的次数,另一个记录在空闲块中出现的次数,最终检查两个计数器是否存在不一致问题。

  • 文件的一致性:每个文件设置两个计数器,一个记录其i节点被引用的次数,另一个记录文件目录中引用它的次数,最终检查两个计数器是否存在不一致问题。

image-20200927174223322

7. 文件的并发访问控制

  • 文件并发访问控制的目的是提供多个进程并发访问同一文件的机制。

  • 访问文件之前,必须先打开文件:如果文件的目录内容不在内存,则将其从外存读入,否则,仍使用已在内存的目录内容。这样,多个进程访问同一个文件都使用内存中同一个目录内容,保证了文件系统的一致性。

  • 文件锁定(file lock):可以协调对文件指定区域的互斥访问

  • 利用进程间通信,协调对文件的访问

0x03 实现目录

目录的主要功能:

  • 根据用户给出的ASCII形式的文件名(路径名),迅速地定位到相应的文件控制块。

目录的实现需解决以下三个问题:

  1. 目录项的内容;
  2. 长文件名问题;
  3. 目录的搜索方法。

1. 目录项的内容

不同的系统采用不同的实现方法,一般分为两类:

  • 直接法:目录项=文件名+FCB(属性信息、在外存上的存放位置)。如MS-DOS/Windows;

  • 间接法:目录项=文件名+FCB的地址(索引号)。如Unix(inode);

不管是何种方法,给定一个文件名,即可返回相应的FCB

image-20200927164525404

2. 长文件名

在现代OS中,一般都支持更长的、可变长度的文件名。实现方法有:

  • 方法1:在目录项中,将文件名的长度固定为255个字符
    • 缺点:浪费空间,很少文件用很长的名字;
  • 方法2:每个目录项的长度可变,分为三部分:目录项长度、文件的属性信息(此两项长度固定)、文件名(长度可变)。
    • 缺点:文件被删除后,该目录项所占用的空间不太好回收利用;
  • 方法3:目录项本身的长度固定,把长度可变的文件名统一放在目录文件的末尾
image-20200927164752650

3. 符号文件目录的查询技术

  • 顺序查寻法:

    依次扫描符号文件目录中的表目,将表目中的名字字段与查找的符号名NAME进行比较(只在表目不多时适用)。

  • Hash方法:

    即 “散列法”或成“杂凑法”,是一种构造符号表、查询符号表常用的技术。其基本思想是:利用一个易于实现的变换函数(即Hash函数),把每个符号名唯一的变换成符号表中的表目索引

0x04 文件存储器存储空间的管理

详见磁盘空间管理

  • 空白文件目录
  • 空白物理块链
  • 位示图

0x05 文件系统的性能问题

在设计文件系统时应尽可能减少磁盘访问次数

  • 提高文件系统性能的方法:目录项(FCB)分解、当前目录、磁盘碎片整理、块高速缓存、磁盘调度、提前读取、合理分配磁盘空间、信息的优化分布、RAID技术等。

块高速缓存

1)基本思想

块高速缓存(BLOCK CACHE)又称为文件缓存、磁盘高速缓存、缓冲区高速缓存,是指在内存中为磁盘块设置的一个缓冲区,保存了磁盘中某些块的副本

当对文件系统进行操作的时候:

  • 检查所有的读请求,看所需块是否在块高速缓冲中
  • 如果在,则可直接进行读操作;否则,先将数据块读入块高速缓存,再拷贝到所需的地方。
  • 由于访问的局部性原理,当一数据块被读入块高速缓存以满足一个IO请求时,和可能将来还会再次访问到这一数据块

2)组织方式

在块高速缓存中有若干个数据块,首先将这些块使用一个双向链表组织起来,当要访问这个链的时候就将其从此链中拿出来,然后挂接到链尾,而我们对于某个文件使用的块要检查其是否在高速缓存中,所以这里又使用块号进行散列以提高检查速度。

image-20200927175109861

3)块高速缓存的管理

  • 块高速缓存的置换

    • 此缓存的空间不会很大,当其满时我们需要对其进行置换。对于以后可能会再次使用的块我们将其放在链尾,而对于使用概率很小的块可能就需要将其剔除。
  • 块高速缓存的写入策略

    • 在文件系统中,我们需要考虑该块是否会影响文件系统的一致性(高速缓存中的数据与相应磁盘块中的数据是否一致)

0x05 *基于日志结构的文件系统

为了提高磁盘的IO速度,需要提高写数据的速度,然而,磁盘的性能主要受到磁头的移动所带来的开销。

1)LFS:基本思路

  • 将磁盘看作一个日志系统:log。
  • 日志log是一个数据结构,写操作就是对日志进行追加(append)操作,“文件”总是顺序地添加到磁盘上。
  • inode:与Unix的inode一样,包含文件的物理块指针
  • inode map:一个存放inode节点在磁盘上位置的表

2)LFS:读写操作

  • 每个写操作都会在内存的segment缓冲区加入新的数据,当segment写满后,其中数据会被一次性写入磁盘中
  • 读操作与Unix文件系统基本相同,只是在寻找inode时需要用到缓存在内存中的inode map

3)LFS:失效恢复

  • 检查点和向前滚动:Checkpoint ,roll-forward
  • 恢复的速度很快
    • 不需要fsck程序检查整个磁盘
    • 恢复最后一个检查点及其之后的数据
    • 最后一个检查点之后的数据可能部分丢失

4)LFS:清理

LFS的主要问题就是清理: cleaning,其目的是为了提供连续的空闲磁盘空间

  • 清理进程对segment进行清理,也就是把没有填充满的segment进行紧缩,从而腾出更多的空闲空间

  • 清理进程对磁盘中的segment进行选择的依据是:

    • 利用率: 清理一个segment是否能够有效提高磁盘的利用率
    • 生命周期: 一个segment是否很快就会被改变
  • 清理进程会区分segment的冷热程度(被访问的频度):

    • 对于冷的segment,其利用率达到75%时会被清理;
    • 对于热的segment,其利用率达到15%时即被清理。

5)LFS:小结

  • 利用缓存处理读操作,通过向日志中添加大的数据段来处理写操作
  • 大幅提高了磁盘性能:写、创建文件、删除文件等
  • 缺点:需要清理进程来产生空闲磁盘空间,带来附加CPU开销。

0x06 Linux 文件系统

考点积累

知识点积累

  • UNIX把所有I/O设备作为特殊文件(设备文件),对I/O设备操作模仿为对普通文件的存取,这样将文件与I/O设备尽可能统一起来。
  • 链接结构不具有直接读写文件的任意一个记录的能力。
  • 索引文件大体上由索引区数据区构成,其中索引区一般按关键字的顺序存放。
  • 系统级安全广利的主要任务是防止未经核准的用户进入文件系统文件级安全管理的主要任务是控制用户对文件的访问
  • 按用户对文件的存取权限将用户分为若干组,同时规定每一组用户对文件的访问权限。这样,所有用户组存取权限的集合称为该文件的存取控制表
  • 在文件系统中是利用目录来管理文件的,为了允许不同用户使用相同的文件名,通常在文件系统中采用二级目录