您的位置:首页 > 其它

操作系统十一文件系统实现

2012-12-19 21:21 316 查看

1.文件系统结构

磁盘有两个特点使其称为存储的方便介质

可以原地重写

可以直接访问磁盘的任意一块信息。文件的切换只需移动磁头并等待磁盘的转到。。

内存与磁盘之间的IO转移是以块为单位的。每块为一个或多个扇区。扇区大小通常为512B

文件系统本身又许多不同的层组成。每层利用较低层的功能来为更高层服务。

设备 ->IO控制 -> 基本文件系统 -> 文件组织系统 -> 逻辑文件系统 -> 应用程序

IO控制为最底层,由设备驱动程序和中断处理程序组成,实现内存和磁盘之间的信息传输。设备驱动程序可以作为翻译器,其输入由高层命令组成

基本文件系统只需向合适的设备驱动程序发送一般命令就可以对磁盘上的物理块进行读写。

文件组织模块知道文件及其逻辑块和物理块。

最后,逻辑文件系统管理元数据。元数据包括文件系统的所有结构数据,而不包括实际文件内容。

采用分层结构实现文件系统能够最大限度的减少重复的代码

绝大多数操作系统支持多个文件系统。如Windows支持FAT、FAT32和NTFS,还有CD-ROM、DVD、和软盘文件系统。linux支持超过40种不同的文件系统,但标准的linux文件系统是可扩展文件系统,它最常用的版本是ext2和ext3。UNIX支持UNIX文件系统(UFS)

2.文件系统实现

2.1.概述

实现文件系统要使用多个磁盘和内存结构

(每个卷的)引导控制块 包括系统从该卷引导操作系统所需的信息

(每个卷的)控制块 包括卷或分区的详细信息

目录文件用来组织文件

FCB包括很多该文件的详细信息

内存内信息用于文件系统管理并通过缓存来提高性能

安装表 包括安装卷的信息

目录结构缓存 包括近期访问过的目录信息

系统范围内的打开文件表 包括每个打开文件的FCB副本和其他信息

单个进程的打开文件表 包括一个指向系统范围内已打开文件表中合适条目的指针和其他信息

为了创建一个新文件,应用程序调用逻辑文件系统。逻辑文件系统知道目录结构形式。

2.2分区与安装

一个磁盘可以分成多个分区,或者一个卷可以横跨多个磁盘上的数个分区。

分区可以有也可以无文件系统。UNIX空间可以使用生分区(无文件系统),因为他不使用文件系统而是使用自己的磁盘格式。同样,有的数据库使用生磁盘,格式化他来满足其特定需求。类此的,生磁盘可以包括一个微型数据库,以储存RAID配置信息。

引导信息保存在各个分区内,有自己的格式。引导信息除了包括如何启动一个特定操作系统外,还可有其他指令,如双引导时引导哪个操作系统。引导信息通常作为一组有序块,并作为镜像文件读入内存。磁盘有多个分区,每个分区包含不同类型的 文件系统和不同的操作系统。

根分区包括操作系统内核或其他系统文件,引导时装入内存。

2.3虚拟文件系统

现代操作系统必须同时支持多个文件系统类型。但是操作系统如何才能把多个文件系统整合为一个目录结构。绝大多数操作系统使用面向对象技术来简化、组织和模块化实现不同文件系统类型通过同样的结构来实现。

文件系统实现包括三个主要的层次:

文件系统接口--->VFS接口------->文件系统类型------->磁盘或网络

VFS:它定义一个清晰的VFS接口,以使文件系统的通用操作和具体实现分开

它提供在网络上唯一标识一个文件的机制,因此他能区分本地文件和远程文件

3.目录

3.1线性列表

3.2哈希表

4.分配方法

如何有效的利用磁盘空间和快速的访问文件?常用的磁盘空间分配方法用三个:连续、链接和索引

4.1连续分配

连续分配要求每个文件在磁盘上占有一组连续的块。磁盘地址为磁盘定义了一个线性序列。用于访问连续分配文件所需的寻道数和最小,寻道时间也最小。

对一个连续分配文件的访问很容易。难的是为新文件找到空间。在8.3节中的动态分配存储,首次适合最好。

然而连续分配的另一个问题是如何确定一个文件需要多少空间。这要考虑文件的动态变化。

4.2链接分配

链接分配解决了连续分配的所有问题。采用链接分配,每个文件是磁盘块的链表;磁盘块分布在任何地方。目录包括文件第一块的指针和最后一块的指针。每块都有一个指向下一块的指针。

要创建新文件,可以简单地在目录中增加一个条目。每个目录条目都有一个指向文件首块的指针。该指针初始化为nil(链表结束指针值),以表示空文件,大小字段为0.

链接访问的缺点是只能有效的用于文件的顺序访问而不能有效的支持文件的直接访问。要找到文件的第i块,必须从文件的开始起,跟着指针,找到第i块。对指针的每次访问都需要读磁盘。

另一缺点是指针需要空间。每个文件需要比原来更多的空间。常用的解决方法是将多个块组成簇,按簇而不是块分配。这种方法的代价是增加了内部碎片。

另一问题是可靠性,文件由指针链接的,指针分布于整个磁盘,如果指针丢失或损坏,可能导致链接空闲空间或另一个文件。

一个采用链接分配方法的一个变种是文件分配表FAT。

4.3索引分配

链接分配解决了连续分配的外部碎片和大小声明问题,但是如果不用FAT,那么链接分配不能有效的支持直接访问。

索引分配把所有指针放在一起,即通过索引块解决了这个问题。

每个文件都有其索引块,这是一个磁盘块地址的数组。索引块的第i个条目指向文件的第i个块。目录条目包括索引块的地址。要读第i块,通过索引块的第i个条目的指针来查找和读入所需的块。这类似于8.4节的分页方案。

当创建文件时,索引块的所有指针都设为nil。当首次写入第i块是,先从空闲空间管理器中得到一块,再将其地址写到索引块的第i 个条目。

索引块究竟应有多大?每个文件必须有一个索引块,因此索引块应尽可能小。但太小,索引块不能为大文件存储足够多的指针。处理该问题的机制是:

链接方案 为处理大文件,可以将多个索引块链接起来

多层索引

组合方案

索引分配与链接分配子啊性能方面有所欠缺。数据块可能分布于整个分区上。

4.4性能

5.空闲空间管理

为记录磁盘空闲空间,系统维护一个空闲空间链表,它记录了所有空闲磁盘空间,创建文件时, 搜索空闲空间链表以得到所需空间。接着空间会从链表中删除。空闲空间链表虽然称之为链表,但实现时不一定表现为 链表。

5.1位向量

通常空闲空间表现为位图或位向量。块空闲,其位为1,块已分配,其位为0。这种方法的主要优点是查找磁盘上的第一个空闲块和n个连续空闲块相对简单、高效。

硬件特性简化了软件功能,不过除非所有位向量保存在内存中,否则位向量的效率并不高。

5.2链表

另一种方法是将所有空闲磁盘块用链表链接起来,并将指向第一块空闲块的指针保存在磁盘的特殊位置,同时也缓存在内存中。

5.3组

对空闲链表的一个改进是将n个空闲块的地址存在第一个空闲块中。这些块中的前n-1个确实为空,而最后一块包含另外n个空闲块的地址,如此继续。大量空闲块的地址可以很快找到。

5.4计数

通常,有多个连续块需要同时分配或释放,尤其是在使用连续分配和采用簇是更是如此。因此,不记录n个空闲块的地址,而是可以记录第一块的地址和紧跟在其后的连续的空闲块的数量n,这样,空闲空间表的每个条目包括磁盘地址和数量。

6.效率和性能

6.1效率

磁盘空间的有效使用取决于磁盘分配和目录管理方法。例如,UNIX索引节点(inode)预先分配在卷上,预先分配索引节点改善了文件系统的性能,这是因为UNIX所采用的算法的降低了寻道时间。

6.2性能

有的系统用一块独立的内存用作缓冲缓存,还有的系统采用页面缓存来缓存文件数据。页面缓存采用虚拟内存技术,将文件数据作为页而不是面向文件系统的块来缓存。

7.恢复

文件和目录保存在内存和磁盘上。需要保护数据使其不丢失和不一致。

7.1一致性检查

部分目录信息保存在内存或缓存里,如果计算机崩溃,缓存和缓存、IO操作、打开文件的目录的修改都会消失。这种事件会导致文件系统处于不一致状态:有的文件真实状态与目录结构记录的不一样。

一致性检查程序将目录结构数据与磁盘数据块相比较,并试图纠正发现的不一致。空闲算法和空间管理算法决定了检测程序能发现什么类型的问题以及如何成功处理问题。

7.2备份和恢复

8.基于日志结构的文件系统

文件系统数据结构如目录结构、空闲指针、FCB指针可能因系统崩溃而不一致,采用修改这些结构来解决不一致问题,但一致性可能无法修补。而且一致性检查也浪费时间。因此,采用基于日志的恢复技术以更新文件系统元数据不失为一种好方法。

9.NFS

网络文件系统已很普及。NFS是通过局域网访问远程文件的软件系统的实现和规范。NFS是ONC+的一部分。

9.1概述

网络文件系统NFS将一组互联工作站作为具有独立文件系统的机器组合。它允许根据显式请求共享文件系统。共享基于客户机-服务器关系。远程文件系统的共享只影响客户机而不是其他机器。

为使一台机器M显式请求访问远程目录,M的一个客户端必须执行mount将远程目录安装到本地文件系统的目录上。

9.2安装协议

安装协议在客户机和服务器之间建立初始逻辑连接

9.3NFS协议

NFC提供了一组远程调用协议RPC以提供远程文件操作

搜索目录内的文件

读一组目录条目

操作链接和目录

访问文件属性

读和写文件

只有在远程目录的句柄建立了之后,才可以进行这些操作。

9.4路径名转换

NFS中的路径名转换包括把路径名解析成独立的目录条目或组成部分。

9.5远程操作

NFS坚持远程服务形式,实际上采用了缓冲和缓存技术来提高性能。普通UNIX文件操作系统调用和NFS协议RPC之间,几乎有一个一对一的对应关系,因此远程文件操作可直接转换成相应的RPC。事实上,文件块和文件属性是由RPC获取的并缓存咋本地。远程操作将使用缓存数据并受一致性的限制。

10.小结

物理磁盘可分区,以控制介质的使用和允许在同一磁盘上支持多个不同的文件系统。这些文件安装在逻辑文件系统结构上,然后才可以使用。

文件系统通常按层结构实现:底层处理存储设备的物理属性、高层处理符号文件名、中间层处理逻辑文件概念映射到物理设备属性。

网络文件系统,如NFS使用客户机-服务器方法允许用户访问远程机器上的目录和文件。客户机上的系统调用转换成网络协议,再转换成服务器的文件系统操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: