现代操作系统读书笔记--第四章 文件系统

长期存储信息的三个基本要求:
(1)能够存储大量信息
(2)使用信息的进程终止时,信息依旧存在
(3)必须能使多个进程并发访问有关信息
文件是进程创建的信息逻辑单元,可以把文件看作一个地址空间。
文件系统:操作系统中处理文件的部分
*4.1 文件*
1.UNIX命名区分大小写
2.各种文件系统:FAT-16、FAT-32、NTFS、ReFS、exFAT、
3.文件扩展名:UNIX系统中只是一种约定,操作系统并不强迫采用它,Windows系统中关注扩展名并且对其赋予了含义
4.1.2 文件结构
1.字节序列(操作系统所见到的就是字节,其内容在用户程序中解释,UNIX和Windows常用)
2.记录序列(固定长度)
3.记录树(非固定长度,每一个记录的固定位置有键值,通过键值查找记录)
4.1.3 文件类型
1.普通文件、目录、字符特殊文件、块特殊文件
2.普通文件分为ASCII文件和二进制文件
3.ASCII可以显示与打印,二进制文件只有使用该文件的程序才理解
4.魔数:表明该文件是一个可执行的文件
4.1.4 文件访问
1.顺序访问(适合磁带存储介质),随机访问(适合磁盘)
2.指示从何时开始读取文件:read、seek(UNIX、windows)
4.1.5 文件属性
1.属性又称为元数据
4.1.6 文件操作
1.creat、delete、open、close、read、write、append、seek、get attributes、set attributes、rename
4.1.7 使用文件系统调用的一个实例程序

4.2 目录
4.2.1 一级目录系统
1.目录系统的最简单形式是在一个目录中包含所有的文件,这有时称为根目录
4.2.2 层次目录系统

4.2.3 路径名
1.绝对路径名:由从根目录到文件的路径组成(UNIX用/,Windows用\)第一个字符是分隔符
2.相对路径名:用户指定一个目录为当前工作目录,这时,所有不从根目录开始的路径名都是相对于工作目录的。
3. .指当前目录,..指其父目录

4.2.4 目录操作
1.creat(.,..除外)、delete(删除目录,.,..不能删除,它们被认作空目录)、opendir、closedir、readdir(打开目录的下一个目录项)、rename、link(在多个目录中出现同一个文件,硬链接)、unlink(删除目录项)
2.符号链接:不同于链接文件使用两个文件名指向同一个内部数据结构来代表一个文件,符号链接一个文件名指向命名另一个文件的一个小文件

4.3 文件系统的实现
文件和目录是怎样存储的?磁盘空间是怎样管理的?怎样使系统有效而可靠地工作?
4.3.1 文件系统布局
1.主引导记录MBR(磁盘的0号扇区):用来引导计算机
2.分区表:位于MBR结尾,给出了每个分区地起始终止地址,表中的一个分区被标记为活动分区
3.超级块:包含文件系统的所有关键参数
4.文件系统存放在磁盘上,多数磁盘划分为一个或多个分区,每个分区中有一个独立的文件系统
5.引导块:装载该分区中的操作系统


4.3.2 文件的实现
文件存储实现的关键问题在于记录各个文件分别用到了哪些磁盘块
1.连续分配
把每个文件作为一连串连续数据块存储在磁盘上
优点:(1) 实现简单  (2)读操作性能好
缺点:(1) 随着时间推移,磁盘会变得零碎
2.链表分配
为每个文件构造磁盘块链表,每个块的第一个字作为指向下一个块的指针,其他部分存储数据
优点:充分利用每个磁盘块,顺序查找快
缺点:随机访问缓慢,存储数据不是2的整数次幂

3.采用内存中的表进行链表分配
取出每个磁盘块的指针字存放在内存的一个表中(文件分配表FAT)
优点:解决了2中的缺点
缺点:必须把整个表都存放在内存中,比较占内存

4.i节点
给每个文件赋予一个称为i节点的数据结构,其中列出了文件属性和文件块的磁盘地址
优点:只有在对应文件打开时,其i节点才在内存中,节省了内存
缺点:如果每个i节点只能存储固定数目的磁盘地址,那么当一个文件所含磁盘块数目超过这个数时怎么办

4.3.3 目录的实现
目录项中提供了查找文件磁盘块所需要的信息。主要功能是把ASCII文件名映射成定位文件数据所需的信息
方法:
1.把文件属性直接存放在目录项中,目录中有一个固定大小的目录项
2.对于i节点系统,把文件属性存放在i节点中而不是目录项中
如何支持可变长度的长文件名?
1.给予文件名一个长度限制(浪费大量空间)
2.每个目录项由一个固定部分+任意长度文件名组成(引入空隙,缺页中断)
3.使目录自身有固定长度,而将文件名放置在目录后面的堆中
加快查找文件名的方法
1.使用散列表(文件名被散列到1到n-1之间的一个值(除以n取余))
添加方式、查找方式
优点是查找非常迅速,缺点是需要复杂的管理
2.在查找结果加入高速缓存(适合小范围查找)

4.3.4 共享文件
1.链接,共享文件系统本身是一个有向无环图

2.问题:如果目录中包含磁盘地址,新添加的数据块不再共享
解决方法:
(1)磁盘块不列入目录,而是列入一个与文件本身相关联的i节点
 (2) 符号链接(先找新文件的文件名,再去找文件)
缺点:
第一种:i节点的原所有者问题
第二种:需要额外开销,多次磁盘访问
二者都存在的:由于有多个路径,可能被重复复制,而不是链接
4.3.5 日志结构文件系统(LFS)
1.目录结构文件系统LFS:缓解影响文件系统性能瓶颈问题
2.促进设计LFS的原因:未来多数磁盘访问是写操作,零碎随机写操作问题
3.基本思想:将整个磁盘结构化为一个日志,所有未决写操作放在日志末尾的一个邻接段写入磁盘

4.因为Ii节点分散在整个日志中,为了找到i节点,维护一个由i节点编号索引组成的图

5.机制总结:所有的写操作最初都被缓冲在内存中,然后周期性地把所有以缓存的写作为一个单独的段,在日志的末尾处写入磁盘。要打开一个文件,首先需要在i节点图中找到文件的i节点,一旦i节点定位之后就可以找到对应的块地址。所有的块都放在段中,在日志的某个位置上

6.LFS清理线程:周期扫描日志进行磁盘压缩。由此整个磁盘成为一个大的环形的缓冲区,写线程将新的段写到前面,而清理线程则将旧的段从后面移走。

4.3.6 日志文件系统

1.基本做法:保存一个用于记录系统下一步将要做什么的日志,若系统崩溃重启后根据日志获取崩溃前计划完成的任务,并完成它们。

2.被写入日志的操作必须是幂等的(多次重复操作的结果和初次操作结果一致),为了增加可靠性,引入原子事务的概念

4.3.7 虚拟文件系统(VFS)

1.将多种文件系统统一成一个有序的结构

2.POSIX接口:所有和文件相关的系统调用在最初的处理上都指向虚拟文件系统,VFS对用户进程提供的一个上层接口

3.VFS也有一个对于实际文件系统的下层接口,于是VFS有俩个不同的接口:上层给用户进程的接口和下层给实际文件系统的接口

4.4 文件系统管理和优化

4.4.1 磁盘空间管理

1.块大小

性能和空间利用率天生矛盾

2. 记录空闲块

方法一:采用磁盘块链表,链表的每个块包含尽可能多的空闲块号

方法二:采用位图

空闲表的问题:产生不必要的磁盘IO

3. 磁盘配额

基本思想:系统管理员分给每个用户拥有文件和块的最大数量

4.4.2 文件系统备份

1.增量转储:只备份有变化的数据

磁盘转储到磁带的两种方案:物理转储(存储全部的)和逻辑转储(存储改变的)

逻辑转储算法要维持一个以i节点号为索引的位图

逻辑转储的问题:1.恢复文件后重构空闲块列表  2.链接问题 3.空洞问题 4.特殊文件、命名管道以及类似文件不该被转储

4.4.3 文件系统的一致性

为了解决文件系统的不一致问题,很多计算机都带有一个实用程序以检验文件系统的一致性

一致性检查分为两种:块的一致性检查和文件的一致性检查

除了检查每个磁盘块计数的正确性之外,文件系统检验程序还检查目录系统

4.4.4 文件系统性能

考虑到访问内存和磁盘的时间差异,采用一些优化方案

1.高速缓存

两个问题:

(1).这一块是否不久后会再次使用

(2).这一块是否与文件系统一致性有本质的联系。

2.块提前读

要考虑是顺序访问方式还是随机访问方式

3.减少磁盘臂运动


4.4.5 磁盘碎片整理

工作原理:移动文件使它们相邻,并把所有的空闲空间放在一个或多个大的连续的区域内。

4.5 文件系统实例

4.5.1 MS-DOS文件系统

4.5.2 UNIX V7文件系统

4.5.3 CD-ROM 文件系统

1.ISO 9660文件系统

基本卷描述符

2.Rock Ridge扩展

3.Joliet扩展

4.6 有关文件系统的研究

4.7 小结

猜你喜欢

转载自blog.csdn.net/qq_28897525/article/details/80088852