介绍文件系统的实现与原理。
文件系统的基本概念
文件系统的基本要求
- 必须能够存储大量的信息。
- 在使用信息的进程终止时,信息必须保存下来。
- 多个进程可以并发地存取信息。
文件
文件命名
文件是一个抽象机制,它提供了一种把信息保存在磁盘上而且便于以后读取的方法。它必须这样来实现,使用户不必了解信息存储的方法、位置以及磁盘实际运作方式等细节。
文件结构
- 文件是一个无结构字节序列,Unix采用这种方式
- 文件是一个固定长度记录的序列,每条记录都有内部结构
- 文件由一棵记录树构成,每条记录长度不等。在记录的固定位置包含一个关键字域。记录树按关键字域进行排序,这便于对特定关键字进行快速查找。
文件类型
- 常规文件(regular file)中包含有用户信息。
- 是ASCII文件或者二进制文件。
- ASCII文件由多行文本组成。
- ASCII文件的最大优点是可以原样地显示和打印,也可以用通常的文本编辑器进行编辑。
- 二进制文件,无法直接查看,但对于使用它的程序而言,其具有一定的内部结构。
- 目录(directory)是管理文件系统结构的系统文件。
- 字符设备文件(character special file)和输入/输出有关,用于处理串行I/O设备。
- 块设备文件(block special file)则用于处理磁盘。
文件访问
- 顺序访问(sequential access)
- 进程可以从文件开始处顺序读取文件中所有字节或者记录,但不能够略过某些内容,也不能够非顺序读取。
- 顺序存取文件可以重绕,只要需要,可以多次读取该文件。
- 主要用于磁带
- 随机访问(random access)
- 可以非顺序地读取文件中的字节或记录,或者根据关键字而不是位置来存取记录
- 主要用于磁盘
文件属性
每个文件除了文件名和数据本身之外,操作系统还给文件赋以其他信息,比如,文件创建日期、文件长度等等。
目录
为了记录文件,文件系统通常需要用到目录,在许多系统中,目录本身也是文件。
- 一个目录通常包含多个目录项,每个目录项代表一个文件
- 目录项包含了文件名字、属性和文件数据存储地址等信息
- 目录项仅包含文件名字、以及一个指向另一个数据结构的指针
目录系统
- 每个系统的目录数目各不相同,最简单的设计方案是维护一个单独的目录,其中包含所有用户的全部文件
- 对于整个系统中使用单独一个目录管理所有文件的想法的改进是,每个用户拥有一个目录
- 这种设计消除了不同用户之间的文件名冲突,但仍然难以使那些有许多文件的用户感到满意(需要子目录)。
- 更进一步,需要的是一般的层次结构(即目录树)。
- 使用层次结构,每个用户可以拥有所需的多个目录,以便自然地组织他们的文件。
路径名
- 使用目录树来组织文件系统时,需要相应的方法指定文件名
- 每个文件都赋予一个绝对路径名(absolute path name),它由从根目录到文件的路径组成。
- 另一种文件名是相对路径名(relative path name)。它常和工作目录(也称作当前目录)的概念一起使用。用户可以指定一个目录作为当前的工作目录。这时,所有的路径名,如果不是从根目录开始,都是相对于工作目录的。
文件系统实现
文件系统布局
- 主引导记录(MBR):磁盘的扇区0,用于启动计算机。
- 在MBR未尾有一个分区表,里面记录了每个分区的起始地址和结束地址,其中有一个活动分区。
- 机器启动后,BIOS读入并执行MBR中的代码。
- MBR程序确定活动分区,并读入它的第一个磁盘块,即引导块,然后执行之。
- 引导块把保存在该分区中的操作系统装入内存并运行。
- 在类UNIX中,文件系统由超级块管理,它包含了关于文件系统的所有关键参数,当文件系统第一次被加载时,超级块的内容被装入内存。其后,是空闲空间管理,记录文件系统中的空闲物理块信息。之后是索引节点,每个索引节点对应于一个文件,记录了文件的属性信息及在磁盘上的存储地址。
文件实现
连续分配法
- 把每个文件作为连续数据块存储在磁盘上。例如,在具有1K大小块的磁盘上,50K的文件要分配50个连续的块。
优点
简单、容易实现,记录每个文件用到的磁盘块仅需记住一个数字即可,也就是第一块的磁盘地址。
性能较好,在一次操作中,就可以从磁盘上读出整个文件。
缺点
- 首先,除非在文件创建时就知道了文件的最大长度,否则这一方案是行不通的。
- 该分配方案会造成磁盘碎片
链表分配法
- 为每个文件构造磁盘块的链接表,每个块的第一个字用于指向下一块的指针,块的其他部分存放数据。
优点
- 每个磁盘块都可以被利用,不会因为磁盘碎片而浪费存储空间;目录项中只需记录一个整数(起始块号)
缺点
- 尽管顺序读取文件非常方便,但是随机存取却相当缓慢。
- 此外,因为指针占去了一些字节,每个磁盘块存储数据的字节数不再是2的幂。可能造成性能损失
文件分配表法(FAT)
- 如果取出每个磁盘块的指针字,把它放在内存的表或索引中,就可以消除链接表法的两个不足,即文件分配表法(FAT)
优点
- 整个磁盘块都可以存放数据;随机存取容易;目录项中只需记录一个整数(起始块号) 。MS-DOS就使用这种方法进行磁盘分配。
缺点
- 主要缺陷是必须把整个链表都存放在内存中,占用较多的存储空间。
索引节点法
给每个文件赋予一张称为i-node(索引节点)的数据结构,其中列出了文件属性和各块在磁盘上的地址。

目录实现
在读文件前,必须先打开文件。打开文件时,操作系统利用用户给出的路径名找到相应目录项,目录项中提供了查找文件磁盘块所需的信息
由于系统不同,这些信息可能是整个文件的磁盘地址(连续分配方案)、第一个块的块号(对于两种链接表分配方案)或者是i-节点号。
共享文件
提供文件共享的方法:利用多个目录中的不同文件名来描述同一共享文件(即文件别名,该方法的访问速度快,但会影响文件系统的树状结构,适用于经常访问的文件共享,同时存在一定的限制)。
硬链接
基于改进的多级目录结构,将目录内容分为两部分:文件名和索引结点。
前者包括文件名和索引结点编号,后者包括文件的其他内容(包括属主和访问权限)。
通过多个文件名链接(link)到同一个索引结点,可建立同一个文件的多个彼此平等的别名。别名的数目记录在索引结点的链接计数中,若其减至0,则文件被删除。
限制:不能指向另一个文件系统中的i-node。
软链接
一种特殊类型的文件,其内容是到另一个目录或文件路径名。建立符号链接文件(软链接),并不影响原文件,实际上它们各是一个文件。可以建立任意的别名关系,甚至原文件是在其他计算机上。
当一个文件被删除时,相应的所有链接都无效。
磁盘空间管理
存储n个字节的文件可以有两种策略:分配n个字节的连续磁盘空间,或者把文件分成许多个(并不一定要)连续的块。
几乎所有的文件系统都把文件分割成固定大小的块来存储,各块不必相邻。
块大小
书中P352给出了块大小与访问速率、磁盘空间利用率的关系,可以发现,性能与空间利用率是相互冲突的。

空闲块管理
- 使用磁盘块的链接表
- 磁盘块中包含尽可能多的空闲磁盘块号
- 使用位图
- n个块的磁盘需要n位位图。
- 在位图中,空闲块用1表示,分配块用0表示(或者反之)。
文件系统的可靠性
备份策略
- 物理转储
- 逻辑转储
文件系统的一致性
分为数据块和文件的一致性。

保护机制
- 采用机制与策略分离
- 使用参照监视器(reference monitor)

- 保护域
- 保护矩阵
- 访问控制列表(按列存储保护矩阵)
- 为权能表(capability list)或称C表(按行表存储保护矩阵)
- 秘密通道
- 述调节CPU使用强度
- 调节页面率、文件锁
- 申请和释放专用资源
参考资料
- Operating System:Design and Implementation,Third Edition
1833

被折叠的 条评论
为什么被折叠?



