文件系统(FS)
- 数据以文件的方式存储在磁盘或其他外部设备上
- Chapter4: 内存管理 page function(DRAM) 易失性 memory
- 外存:长期存储,非易失 硬盘DISK SSD
- 操作系统中处理文件的部分称为文件系统(file system)
5.1 文件(文件使用的角度的看待)
文件命名
文件是一种抽象机制,提供了一种把信息保存在磁盘上而且便于以后读取的方法。
扩展名表示文件的类型,给出了与文件类型有关的一些信息。
文件结构
- 无结构字节序列
- 固定长度记录的序列,每条记录都有内部结构
- 文件由一棵记录树构成
文件类型
- 常规文件
- 目录:管理文件系统结构的系统文件
- 字符设备文件和I/O有关,将底层的设备都抽象成文件。
- 块设备文件:处理磁盘
常规文件
ASCII文件或二进制文件
二进制文件读取的效率较高,但无法直接查看
文件访问
- 顺序访问:磁带
- 随机访问:磁盘、SSD都是支持随机访问的
顺序访问和随机访问的性能是有显著不同的。
以针对磁盘而言:
磁盘顺序/随机访问的差异比较大,但SSD的差异会小一些。
优化 将随机访问按照某种方式转化为顺序的访问。
文件属性
文件:文件名+数据
创建日期、文件长度等等
将文件属性看作meta-data元数组
文件操作
CREATE
DELETE
OPEN:将文件属性和磁盘地址表载入内存之中,以便于以后系统调用的快速存取。
所以这就是每次文件读写时都要打开的原因。(load_memory)
CLOSE
READ
WRITE
5.2 目录
利用目录记录文件,但是目录本身也是文件
简单目录系统
构造目录树
层状目录系统
路径名
在类Unix系统下:
- 绝对路径名:从根目录开始,唯一的
- 相对路径名
- 工作目录 working directory
每个目录都有两个特殊的目录项.
和..
目录的操作
LINK /UNLINK
通过LINK给一个文件,允许在目录的其他位置上再出现一次
允许文件出现在多个目录中,制定一个存在的文件和一个路径名。
LINK :硬连接,文件增加一个链接数。
UNLINK:
- 如果只出现在一个目录中,在文件系统中被删除。
- 多个目录中,只删除指定的路径名。
硬连接,联结技术是在linux或类linux下的,与windows的那种快捷键是不一样的。
5.3文件系统的实现
文件系统的实现者关心的是文件和目录是如何存储的、磁盘空间如何管理以及文件系统是如何有效而可靠的工作的等。
文件系统的布局
- MBR:主引导记录:在系统启动的时候急性记录,记录了分区的起始地址和结束地址。
- Boot block:引导块
- Superblock:分区上整体文件系统的信息
- i-node索引节点,读写操作的时候,路径名定位到文件,文件都有对应的i-node,读写当前的位置计算磁盘块再对应磁盘进行读写。
- 一个目录下的文件名,对应一个i-node号和i-node区。读i-node号,即知道了在磁盘上的位置。
文件的实现
每个文件,通常是分布在多个磁盘块之上,如何分布及记录文件才磁盘上的分布情况?
连续分配法(物理连续)
把文件作为连续数据块存储在磁盘上。
链表分配法(物理上可以不用连续):
为每个文件构造磁盘块的链接表,每个块的第一个字用于指向下一块的指针。
文件分配表法
表置于内存之中,当这个表很大的时候,会占用很多的存储空间。
索引节点法(类Unix)
目录实现
目录系统:map(文件名)to (查找文件数据所需要的信息)
目录是一个特殊的文件
共享文件:
多个目录中不同文件名来描述同一个共享文件。
文件别名:
- 索引节点
- 符号链接
内容是另一个目录或文件的路径名。而目录结构基本上维护的是一个树状的结构。
类UNIX/UNIX目录
- 每个目录项只包含一个文件名及其i-节点号。
- 有关文件类 型、长度、时间、拥有者和磁盘块等所有信息都放在i-节 点中。(索引节点法)
例:
- 根目录在文件分区里是专门有一块的
磁盘空间管理
管理策略
几乎所有的文件系统都把文件分割成固定大小的块来存储,各块不必相邻。
块大小
- 块大,所需磁盘块少,访问速度就快
- 块小,所需磁盘块多,访问速度慢
性能和空间利用率是相互冲突的,需要平衡。
文件系统既需要记录哪个磁盘块被使用了,也需要记录哪个磁盘块是空闲的。
空闲块管理(Bitmap管理空闲空间/空闲块链接表)
- 使用磁盘块的链接表。1KB/4Byte=256=255+1需要一项存放指向下一块的指针
- 使用位图:
- n个块的磁盘需要n位位图
文件系统的可靠性(重要:持久化保存的要求)
备份与备份策略
物理转储
景象一样的物理考呗,直接拷贝无论信息是否无用,不支持增量备份,不能根据需要恢复特定的数据。
逻辑转储
增量备份:避免备份无效的数据:GIT
文件系统的一致性
许多文件系统读取磁盘块,进行修改后,再写回磁盘。如 果在修改过的磁盘块全部写回之前,系统崩溃,那么文件 系统可能出现不一致。如果一些未被写回的块是i节点块、 目录块或者包含空闲表的磁盘块时,这个问题尤为严重。
读写过程中的突然断电
相应地,出现了检验文件系统一致性的工具
- UNIX — fsck
- Windows – chkdsk
检验文件系统一致性的工具
一致性检查包括:数据块检查与文件检查
数据块的一致性检查(重要)
数据块要么空闲 要么未使用(只要文件系统一致,要么在第一张表中位1,要么在第二张表中为1)
文件的一致性检查(重要)
i-node与文件名要有正确的对应关系
建立两张计数器表:
- 扫描文件
- 指向这个i节点号的目录项数目
系统是否释放,是根据i节点的链接数来的。
误操作的防止
垃圾箱。
备份时的压缩技术。