本文已收录到:清华大学操作系统课程笔记 专题
文件系统和文件
打开文件和文件描述符
文件描述符是打开的文件在内存中维护的相关信息。
文件描述符
只读、可读可写。
文件的用户视图和系统视图:文件从用户、系统的角度来看是什么样的
通常是几个扇区构成一个数据块。
用户视图 系统视图的转换
磁盘的最小访问单元是块。
文件系统最小的访问单位是数据块。
即4k大小
优化的时候要考虑,充分利用磁盘中一整块的内容。
访问模式(访问方式)
Ps:可参考哈工大《操作系统》word笔记。
其实,操作系统中的文件系统是一个小型的数据库。
文件内部的结构
复杂结构word,可以做个小实验,将word文件的扩展名改为zip,然后解压缩,看看里面是什么吧。
让我想起了编译原理中的.out文件,计算机组成原理中的elf文件格式,里面都有特定的结构。
文件共享和访问控制
这里只是一个简单的介绍,不同操作系统会有不同的设计和实现方式。
语义一致性:文件的同步机制
由于延迟问题,操作系统弱化了该部分的功能。这部分功能类似于同步机制。
把一致性的问题交给进程去解决和处理。
文件分层系统:目录
以路径的形式标识每一个文件。
跟死锁检测差不多。实际中检测长度,超过长度就不行。
为每个进程设置一个缺省工作目录。
在网络环境上,对安全性要求更高,对一致性要求更高,对出错误后处理也有更高的要求。
虚拟文件系统
作为“中间层”,抹平不同文件系统的差异。对上层提供一个统一的操作API接口。
文件系统基本数据结构
文件缓存和打开文件
操作系统所讨论的缓存指的是数据块缓存。
Ps:更多关于磁盘、磁盘控制器、控制器中的调度算法。请参考《存储基础》课程。
数据块缓存
页缓存
文件缓存到主存中。
打开文件表
打开文件锁
文件分配
统计学发现,大多数文件都很小。
连续分配
减少长度还好说,但不好增加长度。
我们最好是预留几块?还是怎么着?很麻烦。
链式分配
- 存放时间长,磁盘硬件本身可能会遗失数据,如果恰好是丢失了链信息,这个指针往后的数据块全都丢了。
- Ps:加了指针,真正存的数据就不会是2的整数幂了。破坏“美感”,计算机期望2的整数幂对齐。因为虚拟内存、分页都是2的整数幂划分,会使系统产生瓶颈,因为与其他计算机部分,例如cache、配合就会很麻烦。(详细请看 哈工大操作系统word笔记)
索引分配(icode)
大文件:
下面看下实际例子:
UFS:Unix file system
一级索引不够就用二级索引。二级不够用三级。效率也逐渐下降。
空闲空间管理
只需要做这一件事情。
位图组织空间空间
其他空闲空间组织方式
采用链式管理不占用额外空间。
链式索引:不断地查空闲块,查到后就把他们连起来,用一个索引块(inode)记录他们的地址。
冗余磁盘阵列RAID
如果操作系统存放于两个分区,那么磁头在不同分区之间来回跳转,这效率很差。
多磁盘管理
硬件RAID硬件控制器,就是RAID卡,又叫磁盘阵列卡。用了它,就像是操作一块硬盘一样使用多个硬盘组成的阵列。