操作系统读书笔记(五)——文件系统

本文是基于《操作系统概念》第七版的读书笔记,重点讲解了文件系统,包括文件概念、文件访问方法、目录结构、文件共享与保护、文件系统实现、磁盘空间分配和空闲空间管理等方面,探讨了各种文件访问方式、目录结构类型以及磁盘调度算法,并讨论了磁盘管理和交换空间在操作系统中的作用。
摘要由CSDN通过智能技术生成

注: 这是对 [Abraham Silberschatz. 操作系统概念 第七版. 高等教育出版社, 2010.1] 一书的概述性阅读笔记

      同时也是对学校操作系统课程部份作业的整理,本系列到此完结

 

CH9-11 文件系统

 

1.文件概念

因为内存通常太小,以及无法永久保存数据和程序,计算机提供磁盘等外存设备以保存信息,文件系统则提供了在物理存储设备上存取程序和数据的机制。为了在不同介质上方便的存取和交换信息,操作系统提供了信息存储的统一逻辑接口,并通过抽象存储设备的各种属性定义了逻辑存储单元(文件)。

文件是记录在外存上的相关信息的具有名称的集合,是逻辑外存的最小分配单元,其数据格式和信息通常由创建者来定义。

文件通常包含名称、标识符、类型、位置、大小、保护、日期时间和用户标识等属性。

操作系统需要提供相关的系统调用以实现文件操作,其中包括:创建文件,写文件,读文件,在文件内重定位,删除文件,截短文件等,在对文件读写时,操作系统需要首先显示式或隐式地打开文件,每个打开文件都会具有文件指针、文件打开计数器、文件磁盘位置、访问权限等相关信息。

在设计文件系统时需要考虑系统对文件类型的识别和支持,大部分系统采用扩展名来标识文件类型以正确地识别和使用文件。文件具有特定的内部结构,文件类型可用于标识这种内部结构,操作系统需要能够支持一个或多个文件结构以便正确地装入和运行程序以及组织信息。

 

2.文件访问方法

文件中的信息可按多种方式进行访问,有的系统支持多种访问方式。

顺序访问:文件信息按顺序,一个记录接一个记录进行访问。顺序访问基于文件的磁带模型,不仅适用于顺序访问设备,也适用于随机访问设备。

直接访问:文件由固定长度的逻辑记录组成,程序能够按照任意顺序进行快速读写,直接访问方式能够立即访问大量信息,这种方式通常被数据库使用。

其他访问方式建立在直接访问方式上,通常涉及创建文件索引,在查找文件中记录时首先搜索索引,根据索引指针直接访问文件。

 

3.目录结构

一个系统可以包含多个文件系统,且文件系统可以有不同类型。计算机的文件系统可以非常大,对于庞大的数据,使用目录结构进行组织管理。目录可视作符号表,它将文件名称转换成目录条目。目录可按多种方式进行组织,需要能够插入条目,删除条目,搜索给定条目,列出所有目录条目。目录逻辑结构常用方案如下:

单层结构目录:所有文件都包含在同一目录中,这种结构易于理解和支持,但由于文件名的唯一性,当单层结构目录中文件数量较多时文件命名将变得麻烦。

双层结构目录:每个用户拥有独立的用户文件目录(UFD),每个UFD具有相似的结构但只列出单个用户的文件,不同用户可拥有同名文件。这种结构有效地对用户进行隔离,但在某用户需要访问其他用户的文件时较为复杂。

树状结构目录:树状结构具有根目录,允许用户创建自己的子目录,每个文件具有唯一的路径名,目录包括一组文件和子目录,所有层级的目录具有同样的内部格式,用户可以通过绝对路径或相对路径来访问其他用户的文件。


无环图目录:树状结构禁止共享文件和目录,无环图允许目录含有共享子目录和文件,同一文件或子目录可出现在2个不同目录中,这种共享文件/目录不同于文件复制,一个用户对文件/目录做出的修改对其他用户可见。共享子目录或文件可通过建立链接或在共享目录中重复文件信息实现,这种结构更加灵活但也更加复杂。

              无环图目录结构示意                                   通用图目录结构示意

通用图目录:当对已存在的树状结构目录增加链接时将破坏树状结构并产生简单的图结构,简单图中允许存在环,这对遍历目录而言是十分麻烦的,在设计遍历算法时需要避免重复搜索同一子目录或陷入搜索循环,一个简单算法是在搜索时避开链接从而避免环。

 

4.文件共享和保护

文件共享对于需求合作并希望减少合作时的相关工作的用户而言极为有用,因此面向用户的操作系统需提供文件共享机制以满足需要,它依赖于系统所提供的语义。文件共享在实现时需要考虑将共享扩展到多个文件系统以及多用户对文件的冲突操作的问题。

保存在计算机系统中的信息需要被保护以免受到物理损害或非法访问,针对后一情况可以采用访问控制或文件加密的方式进行保护。

对于支持多用户的操作系统,文件共享和保护的问题较为突出,现代操作系统大多采用文件拥有者和组的概念实现访问控制,拥有着具有对文件或目录的最高控制权,而组定义了对文件具有相同权限的用户子集,用户请求文件操作时系统将会检查其是否具有相应的权限。

在计算机之间的远程文件共享随着网络的发展有多种实现方式,如通过FTP在机器间进行文件的人工传输,通过分布式文件系统(DFS)直接访问远程目录等。对使用客户机—服务器模式的网络文件系统,一台计算机被允许安装一台或多台远程计算机上的一个或多个文件系统,实现用户远程访问文件和目录,包含文件的机器为服务器,它标明哪些文件可用,请求文件访问的机器为客户机,客户机上的文件系统调用转换为网络协议,网络协议在服务器被转换为文件系统操作。服务器和客户机之间需要解决兼容性和安全性验证的问题。另一方面,远程文件系统具有比本地文件系统更多的故障模式,有大量的可能的原因会导致文件共享中断,远程文件系统需要提供从中断恢复的相关机制。

 

5.文件系统实现

文件系统通常按照层结构或模块结构加以实现,底层处理存储设备的物理属性,高层处理符号文件名和文件逻辑属性,中间层将逻辑文件概念映射到物理设备属性,每层利用更低层的功能创建新的功能来为更高层服务。分层结构实现的文件系统能够最大限度地减少重复代码。


大多数操作系统支持多个文件系统,这通常由虚拟文件系统(VFS)加以实现,将文件系统实现为三个主要层次,第一层为文件系统接口,第二层为VFS层,它定义一个清晰的接口将文件系统的通用操作和具体实现相分离,第三层实现具体的文件系统或远程文件系统。

 

6.磁盘空间分配和空闲空间管理

文件在磁盘中具体存储空间的分配方式影响文件的访问速度和磁盘空间的利用率,常见的系统仅提供一种分配方法,常见的分配方法有如下三种:

连续分配:每个文件在磁盘上占有一组连续的块,使用连续分配方法在寻道时所用时间最小,因而提供了更好的性能,对连续分配的文件进行访问非常容易,其特性支持顺序访问和直接访问。但连续分配对于空闲空间的管理和新文件的写入较为麻烦,并随着时间的推移将产生文件碎片的问题,对存储性能和空间利用率产生影响,同时如何确定一个文件需要的空间大小也是一个问题。

链接分配:链接分配解决了连续分配存在的问题,每个文件都是磁盘块的链表,每块都含有指向下一块的指针,创建新文件时可以简单地在目录中增加一个新条目,但其只能用于文件顺序访问,同时会有一部分空间用于存放指针从而使得文件大小增大,同时链接分配的可靠性也比较低。基于链接分配方法的一个变种是文件分配表(FAT)的使用,其支持了文件的直接访问。

索引分配:索引分配将所有指针放在一起,即索引块,每个文件都有其索引块,索引块的第i个条目指向文件第i个块。索引分配支持直接访问且避免了外部碎片问题,但其指针开销通常比链接分配更大,针对索引块大小的问题,可以通过链接方案、多层索引、组合方案等机制来解决。

文件删除后的空间即空闲空间需要被用于存放新文件,其分配方法同样对磁盘使用效率和可靠性产生影响,通常空闲空间使用位向量表示,另一种方法则是采用链表链接空闲空间,但其效率均不高,通常采用的优化方法有FAT、将空闲块建立组和计数等。

 

7.一致性和备份恢复

存储在内存和磁盘上的数据需要避免丢失和不一致的问题。

部分内存信息保存在内存中以加快访问,其内容比磁盘中的信息更新,内存断电、计算机的崩溃将导致文件系统的不一致,操作系统需要提供相应的一致性检查手段来比较数据并纠正不一致。

磁盘上存储的数据需要进行定期备份以免在出现错误时数据永久丢失,为了降低备份时的数据量,可以通过比较文件的目录条目信息以确定哪些文件未发生更改从而无需再次备份。

 

8.大容量存储器

磁盘:磁盘具有一个或多个两侧涂有磁性材料的扁平磁盘片,其表面被划分为圆形磁道,磁道再被划分为扇区,磁盘片在马达的驱动下高速旋转,读写磁头在磁臂驱动下对磁盘片进行磁记录和读取。磁盘通过I/O总线与计算机相连。

磁带:磁带绕在轴上,通过轴的旋转通过读写磁头,磁带是早期次级存储介质,存储数据时间长,存储量大,但访问速度较慢,常用于备份存储不常用的信息。

 

9.磁盘调度

对于具有多个进程的多道程序设计系统,当磁盘正忙时若有进程请求对磁盘的I/O访问,该请求将加入磁盘待处理队列,队列中具有多个请求时,有多种调度算法可供操作系统使用:

先到先服务(FCFS)调度:先请求访问磁盘的进程优先调度,考虑对磁盘寻道的时间,这通常不是最快的调度算法。

最短寻道时间优先(SSTF)调度:优先处理靠近当前磁头位置的磁盘请求,这种算法大大提高了性能,但可能导致部分请求始终得不到服务。

SCAN调度:磁头从一侧向另一侧移动,移过每个柱面时处理该柱面上的服务请求,到达另一侧时反向重复。

C-SCAN调度:类似SCAN调度,磁头从一侧向另一侧移动,移过每个柱面时处理该柱面上的服务请求,但在到达另一侧时返回之前开始的那一侧重复,该算法提供更均匀的等待时间。

LOOK调度:与SCAN或C-SCAN类似,但磁头并不移动到另一侧,而是移动到最远的请求处就返回,进一步降低了磁头的移动量。

 

10.磁盘管理

操作系统还负责磁盘的初始化、引导和坏块恢复等操作。

新的磁盘在写入数据前需要被分成扇区以便磁盘控制器进行读写,这个过程称为低级格式化,低级格式化的每个扇区的数据结构通常由头部,数据部分和尾部组成,头部和尾部包含了扇区号和ECC纠错代码等内容。低级格式化之后操作系统还需要对磁盘进行分区和逻辑格式化,将文件系统数据结构写入到磁盘上。

计算机开始运行时需要运行初始化自举程序,大多数操作系统在ROM中保留一个较小的自举加载程序,进一步从磁盘上调取更为完整的自举程序,该自举程序位于磁盘的启动块上,启动块位于磁盘的固定位置。

磁盘由于有移动部件且容错能力较小而易出问题,多数磁盘甚至从出厂时就有坏块,针对该情况根据不同的磁盘控制器有多种处理方式。IDE磁盘在逻辑格式化时扫描坏块并在FAT条目上做出标记以避免使用该块,正常使用中出现坏块则需要手动运行特殊程序来搜索坏块并锁定避免使用。对于更为复杂的磁盘,其控制器维护一个坏块链表并实时更新,还能够将一部分在低级格式化时预留的备用快用于替换坏块,即扇区备用或转寄。而相应的另一方案则是扇区滑动,即将坏块后的扇区相继向下滑动一个扇区。这一坏块替代过程由于存在数据丢失通常需要人工干预。

 

11.交换空间

交换空间管理是操作系统的另一底层任务,当物理内存不足时进程从内存移到交换空间以释放内存空间,不同的操作系统根据所实现的内存算法可按不同方式使用交换空间,实现交换的系统可以将交换空间用于保存整个进程映像,换页系统也可能只用交换空间以存储换出内存的页。

交换空间可以在普通文件系统上加以创建,也可以在一个单独的独立分区进行。前者实现简单但效率较低,由于需要遍历目录结构以及可能产生的外部碎片将导致交换时间增加从而降低性能;后者可使用适当算法优化速度,但在需要增加更多交换空间时可能需要对磁盘重新分区。

 

12.RAID

磁盘冗余阵列(RAID)技术通过在多个磁盘上存储冗余信息从而提高性能和数据可靠性。可靠性的提高依靠引入冗余,存储额外信息,在磁盘出错时用于修补,即使磁盘损坏数据也不会轻易损坏;而性能的提高依靠多磁盘并行访问的实现,在多个磁盘上分散数据从而改善传输率。RAID有不同的级别方案,提供了不同的可靠性、性能及性价比。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值