清华大学操作系统OS学习(十四)——文件系统和文件描述符

一、文件系统和文件

1、文件系统

①、文件系统是操作系统中管理持久性数据的子系统,提供数据存储和访问功能。

②、文件具有符号名,由字节序列构成的数据项集合。符号名是文件系统的基本数据单位,文件名是文件的标识符号。

2、文件系统的功能

①、分配文件磁盘空间:管理文件块(位置和顺序)、管理空闲空间(位置)、分配算法(策略)

②、管理文件集合:Ⅰ、定位(文件及其内容);Ⅱ、命名(通过名字找到文件);Ⅲ、文件系统结构(文件组织方式)

③、数据可靠和安全:安全(多层次保护数据);可靠(持久保存文件,避免系统崩溃、媒体错误、网络攻击等)

3、文件属性

①、文件属性:名称、类型\位置、大小......

②、文件头:文件系统元数据中的文件信息(包括文件属性、文件存储位置和顺序)

二、文件描述符

0、文件访问模式:进程访问文件数据前必须先“打开”文件

内核跟踪进程打开的所有文件:操作系统为每个进程维护一个打开文件表;文件描述符是打开文件的标识

1、文件描述符:操作系统在打开文件表中维护的打开文件状态和信息

①、文件指针:指向最近的一次读写位置,;每个进程分别维护自己的打开文件指针 

②、文件打开计数:记录当前文件打开的次数,当最后一个进程关闭了文件时,允许将其从打开文件表中移除 

③、文件磁盘位置:缓存数据访问信息 

④、访问权限:每个程序访问模式信息

2、文件的用户视图和系统视图

①、文件的用户视图:持久的数据结构

②、系统访问接口:字节序列的集合(UNIX);系统不关心存储在磁盘上的数据结构。

③、操作系统内部视角 :数据块的集合(块是逻辑存储单元,而扇区是物理存储单元) 

块大小 <> 扇区大小,在unix中块的大小是4kb

3、用户视图到系统视图的转换

①进程读文件:获取字节所在的数据块;返回数据块内对应部分

②进程写文件:获取数据块,修改数据块中对应部分,写回数据块

③文件系统中的基本操作单位是数据块。

例如:getc()和putc()只访问1个字节的数据,需要缓存目标数据4096字节。

4、访问模式

①顺序访问:按字节依次读取—几乎所有访问都是这种方式 

②随机访问:从中间读写,更快速 —不常用(虚拟内存把页存储在文件)

③基于特征访问(索引访问)—类似数据库,很少

5、文件内部的结构:应用系统打开复杂文件,但对操作系统该文件可能很简单 

①、无结构:单词、字节的队列 

②、简单记录结构:列,固定/可变长度 

③、复杂结构:格式化文档(MS Word, PDF),可执行文件

6、文件共享和访问控制

①、访问控制:谁能获得哪些访问权限;访问模式:读、写、执行、删除,列举 

②、文件访问控制列表(ACL) :<文件实体,权限>

③、文件访问控制列表(ACL):Ⅰ、<用户|组|所有人,读|写|可执行>;Ⅱ、用户标识ID:识别用户,表面每个用户所允许的权限及保护模式;Ⅲ、组标识ID:允许用户组成组,并指定了组访问权限

7、语义一致性

①、多用户/客户如何同时访问共享文件 

- 和过程同步算法相似 

- 因磁盘I/O 和网络延迟而设计简单

②、unix文件系统UFS语义 

- 对打开文件的写入内容立即对其他打开同一文件的其他用户可见 

- 共享文件指针允许多用户同时读写

③、会话语义 

- 写入内容只有当文件关闭时可见,类似一个会话

④、读写锁

- 一些操作系统和文件系统提供该功能

三、目录、文件别名和文件系统种类

1、分层文件系统

①、文件以目录的方式组织起来,目录是一类特殊的文件。目录的内容是文件索引表<文件名,指向文件的指针>

②、目录和文件的树形结构

③、目录的操作:搜索,创建,删除,枚举,重命名,在文件系统中遍历一个路径 

操作系统应该只允许内核模式修改目录:确保映射的完整性,应用程序能够读目录

2、文件别名:两个或者多个文件名关联同一个文件 

①、硬链接:多个文件项指向一个文件 

②、软链接:以快捷方式指向其他文件( 通过存储真实文件的逻辑名称来实现 )

③、如果删除一个有别名的文件会如何? 

如果是软链接,这个别名会成为一个空指针 

如果是硬链接,可能有一个隐形计数器,删除一次减一,直到为0时才真正删除

3、文件目录的循环

①如何保证没有循环呢? 

- 只允许到文件的链接,不允许在子目录的链接 

- 每增加一个新的链接都用循环检测算法确定是否合理

- 限制路径可遍历文件目录的数量

4、名字解析(路径遍历)

①、名字解析:把逻辑名字转换成物理资源 

绝对路径—>依次查找—> 先读文件头,再读数据块,搜索子项,如此递归 

例子:解析“/bin/ls”:读取根目录的文件头;读取根目录的数据块,搜索"bin“项;读取bin的文件头;读取bin的数据块,搜索"ls"项;读取ls的文件头。

②、当前工作目录(PWD):每个进程都会指向一个文件目录用于解析文件名,允许用户指定相对路径来代替绝对路径

5、文件系统挂载

一个文件系统需要先挂载才能被访问,挂载点在用户看来相当于目录;

一个未挂载的文件系统被挂载在挂载点上

6、文件系统的类别 

- 磁盘文件系统 :文件存储在数据存储设备上,如磁盘

- 数据库文件系统:文件特征是可被寻址的

- 日志文件系统,记录文件系统的修改/事件 

- 网络/分布式文件系统

- 文件可以通过网络被共享 - 分布式文件系统的问题,辨别用户,一致性问题,错误处理模式

- 特殊/虚拟文件系统

四、虚拟文件系统

1、文件系统的实现

分层结构:虚拟文件系统(VFS,Virtual File System)、特定文件系统模块

①、虚拟文件系统(VFS)目的:对所有不同文件系统的抽象

②、虚拟文件系统的功能: 

- 提供一致的文件和文件系统接口 

- 管理所有文件和文件系统关联的数据结构 

- 高效查询例程,遍历文件系统 

- 与特定文件系统模块的交互

2、基本数据结构:

①、文件卷控制块(Unix:”superblock“):每个文件系统一个,文件系统详细信息;块,块大小,空余块,计数/指针等 

②、文件控制块(Unix:"VNODE" or "INODE") :每个文件一个,文件的详细信息;访问权限、拥有者、大小、数据块位置等

③、目录项(Linux: "dentry"):每个目录项一个(目录和文件),将目录项数据结构及属性布局编码成树型数据结构;指向文件控制块、父目录、子目录等。

④、文件系统的组织视图:

vol:文件卷控制块;dir:目录;file:文件控制块;data:数据

3、文件系统的存储结构

①、文件系统数据结构:卷控制块(每个文件系统一个)、文件控制块(每个文件一个)、目录节点(每个目录项一个)

②、数据持续存储在二级存储中,当需要时加载进内存

  • 卷控制块:文件系统挂载时进入内存
  • 文件控制块:文件被访问时进入内存
  • 目录节点: 在遍历一个文件路径时进入内存

五、文件缓存和打开文件

1、数据块缓存

  • 数据块按需读入内存:提供read()操作,预读后面得数据块
  • 数据块使用后被缓存:假设数据将会再次用到,写操作可能被缓存和延迟写入
  • 两种数据块缓存方式,缓存的粒度 
    • 数据块缓存
    • 页缓存:统一缓存数据块和内存页

数据块缓存:

2、页缓存

①、虚拟页式存储:在虚拟地址空间中虚拟页面可映射到本地外存文件中

②、文件数据块的页缓存

Ⅰ、在虚拟内存中文件数据块被映射成页

Ⅱ、文件的读/写操作被转换成对内存的访问

Ⅲ、可能导致缺页、脏页

相应算法,尽量减少对硬盘的读写次数,类似之前的算法

③、页缓存

3、打开文件的过程

①、打开文件描述

每个被打开的文件一个

文件状态信息

目录,当前文件指针。。。。

②、打开文件表

每个进程一个进程打开文件表

一个系统级的打开文件表

有打开的文件时,文件卷不能卸载

共享机制:强制和劝告(进程可以查找锁的状态来决定)。

六、文件分配

1、文件分配:如何表示分配给一个文件数据块的位置和顺序

分配方式:连续分配、链式分配、索引分配

评价指标:存储效率(外部碎片等)、读写性能(访问速度)

2、连续分配:文件头指定起始块和长度 

①、位置/分配策略(最先匹配,最佳匹配),类似内存的分配 

②优点:文件读取表现好,高效的顺序和随机访问 

③劣势:碎片,文件增长问题(预分配,按需分配),类似数组 

3、链式分配: 以数据块链表方式存储,文件头包含了到第一块和最后一块的指针 

优点:创建,增大缩小容易,没有碎片 

缺点:不可能真正地随机访问,可靠性(破坏一个链然后整个文件都崩了)

4、索引分配: 每个磁盘块(索引项),为每个文件创建一个名为索引数据块的非数据数据块(到文件数据块的指针列表) 文件头包含了索引数据块 

优点:创建,增大缩小都很容易,没有碎片,支持直接访问 

缺点:当文件很小时,存储索引的开销,如何处理大文件? 

5、大文件采用分层的方式,类似内存管理的思想: 

- 链式索引块 

- 多级索引块,文件头包含多个指针

Unix File System(UFS)多级索引分配

效果:提高了文件大小限制阀值;动态分配数据块,文件扩展很容易;小文件开销大;只为大文件分配间接数据块,大文件在访问数据块时需要大量查询

七、空闲空间管理和冗余磁盘阵列RAID

1、空闲空间列表

①位图:用位图代表空闲数据块列表 

11111001111,如果i = 0 代表数据块为空闲

假设空闲空间在磁盘中均匀分布,那么找到空闲数据块前需要扫描n/r 

n —-磁盘上数据块的总数  r —- 空闲块的总数

②其他空闲空间组织方式

2、典型的磁盘文件系统组织

分区:硬盘磁盘的一种适合操作系统指定格式的划分 

文件卷:一个拥有一个文件系统实例的可访问的外存空间 

3、多磁盘管理

①、使用多磁盘可改善:吞吐量(通过并行)、可靠性和可用性(通过冗余)

②、RAID 冗余磁盘阵列 :多种磁盘管理技术

软件实现:在操作系统内核:存储/卷管理

硬件实现:RAID硬件控制器(I/O)

4、RAID 0~5 系列

①RAID-0:磁盘条带化

把数据块分成多个子块,存储在独立的磁盘中。通过独立磁盘上并行数据块访问提供更大的磁盘带宽。

②RAID-1:磁盘镜像

向两个磁盘写入,从任何一个读取。可靠性成倍增长,读取性能线性增加。

③RAID-4:带校验的磁盘条带化

数据块级的磁盘条带化加专用奇偶校验磁盘。允许从任意一个故障磁盘中恢复

④RAID-5:带分布式校验的磁盘条带化

⑤基于位和基于块的磁盘条带化

条带化和奇偶检验按字节或位

RAID-0/4/5:基于数据块

RAID-3:基于位

猜你喜欢

转载自blog.csdn.net/qq_36552489/article/details/92850872