0%

4.0:文件系统

文件系统的概念

文件与文件系统

  • 文件系统:提供数据存储和访问功能。

  • 文件:字节序列组成的数据项集合,文件系统的基本单位,文件名是标识符号

  • 文件属性:名称、类型、位置、大小、保护、创建者、创建时间等。把文件的信息分成两部分,文件头是文件系统元数据中的文件信息,文件存储位置和顺序。

文件系统的功能

分配文件磁盘空间

  • 管理文件块

  • 管理空间控件

  • 分配算法,磁盘上有很多空间块,如何选择空闲块

管理文件集合

  • 定位:通过文件名找到内容

  • 命名:通过名字找到文件

  • 文件系统结构:文件的组织方式

数据可靠与安全

可靠:持久保存文件并在系统崩溃时恢复

文件描述符

操作系统内核跟踪进程打开的文件,维护了一个打开文件表,文件描述符是打开文件的标识

文件的读写是以数据块为单位,即使你只读一个字节

打开文件表打开文件的状态信息

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

  • 文件打开计数:当前打开文件打开的次数,最后一个进程关闭这个文件指针后,这个文件就可以被从打开文件表中移除。

  • 文件的磁盘位置:缓存文件的位置,下次就可以省事了

  • 访问权限:可读可写?

程如何访问文件

  • 顺序访问:按字节依次读取

  • 随机访问:从中间读写,不常用,如虚拟内存中把内存也存储在文件中。

  • 索引访问:通常不提供,数据库是建立在索引内容上的磁盘访问。

文件内部结构

  • 无结构:单词、字节序列

  • 简单记录结构:分列、固定长度或可变长度

  • 复杂结构:格式化文档或者可执行文件等,操作系统并不关心

访问控制

  • 访问模式分为:读、写、执行、删除、列表信息等

  • 文件访问控制列表(ACL)指明了文件实体和权限的关系

目录

目录也是一种特殊的文件,这个特殊文件中存的内容是文件的索引表,一个索引是文件名+文件指针,

目录组织

  • 线性表(早期),但是如果检索和增删比较耗时;

  • 哈希表可以减少目录搜索时间,且目录表中的每一项长度都相同。

目录的循环

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

  • 增加链接时用循环检测算法进行检测

  • 限制向下查找的深度(实际炒作系统用的方法)

文件别名

  • 硬链接:可以理解为引用

  • 软链接:可以理解为指针

文件系统种类

  • 磁盘文件系统:文件存储在数据存储设备中(如磁盘)。主要有FAT,NTFS,ext2/3等。不同文件系统对文件的优化不同。

  • 数据库文件系统:文件特征是可被检索的,如WinFS

  • 日志文件系统:记录文件系统的修改和事件,对文件的操作是原子性的

  • 网络/分布式文件系统:如NFS、SMB、AFS、GFS。

虚拟文件系统

概念

img

虚拟文件系统基本数据结构:

这些数据结构都是持久的存储在外存中的

文件卷控制块

  • 每个文件系统一个

  • 文件系统的详细信息

  • 提供了块、块大小、空余块等信息

  • 文件系统挂载时进入内存

文件控制块(inode)

  • 每个文件一个

  • 提供了文件的详细信息

  • 访问权限,拥有者,大小,数据块位置等

  • 访问文件时进入内存

目录项:

  • 每个目录项一个

  • 目录项数据结构及树形布局编码成树形数据结构

  • 指向文件控制块、父目录、子目录等。

  • 在遍历一个文件路径时加载

文件缓存和打开文件

两种缓存机制:

  • 数据块缓存,每次读一个块时先看这个缓存中有没有。和虚拟存储隔离开。

  • 页缓存:统一缓存数据块和内存页。把文件缓存到虚拟页中,可能导致缺页和设置成脏页。

打开文件的数据结构

  • 文件描述符

  • 打开文件表

    • 每个进程有一个打开文件表、系统也有打开文件表

    • 有文件被打开的时候,文件卷就不能被卸载

文件锁

分为两种机制,强制、劝告(linux)

文件分配

连续分配

  • 文件头指定了起始块和长度。最先匹配,最佳匹配等。

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

  • 缺点:文件增长不方便,可以预分配或者按需分配。

链式分配

  • 文件以数据库链表的方式存储。每个块中包含指向下一个块的指针

  • 优点:优点是创建、增大、缩小方便,且没有碎片,

  • 缺点:无法实现真正的随机访问,且破坏一个块,则后边的数据就都丢了。

索引分配

  • 先分配一个索引块,说明哪些块里存了这个数据,即文件数据块的指针列表

  • 优点:是创建、增大、缩小很简单,没有碎片,支持直接访问;

  • 缺点:文件小,浪费一个索引块;文件大,需要多个索引块。

空闲空间管理

位图

  • 可以使用位图,Di=0表明数据块i是空闲的,否则是已分配的。

  • 使用简单但是可能是一个很大的向量表。

链式索引法

第一个块是空闲块的索引,指向空闲块。

冗余磁盘阵列RAID

多磁盘管理

  • 多磁盘可以改善吞吐量(通过并行),通过冗余提高可靠性和可用性

  • 实现方法

    • 操作系统内核的文件卷管理

    • 硬件的RAID控制器。

RAID控制器

  • RAID-0:磁盘条带化,特点并行。每个磁盘放着一个文件的不同部分,多磁盘同时读写

  • RAID-1:磁盘镜像,特点提高可靠性,和读的效率。多个磁盘上放着一模一样的文件,可多个同时读。

  • RAID-4:在RAID-0的基础上加了一个校验磁盘,可实现单个磁盘的错误恢复

  • RAID-5:在RAID-4的基础上把校验和分散在不同磁盘上,消除了校验磁盘的读写压力

  • RAID-6:两个校验磁盘,可以恢复两个磁盘错误