清华大学操作系统课程笔记:文件系统和文件

本文已收录于 清华大学操作系统课程笔记 系列,共计 9 篇,本篇是第 9 篇

文件系统和文件

打开文件和文件描述符

文件描述符是打开的文件在内存中维护的相关信息。

文件描述符

只读、可读可写。

文件的用户视图和系统视图:文件从用户、系统的角度来看是什么样的

通常是几个扇区构成一个数据块。

用户视图 系统视图的转换

磁盘的最小访问单元是块。

文件系统最小的访问单位是数据块。

即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卡,又叫磁盘阵列卡。用了它,就像是操作一块硬盘一样使用多个硬盘组成的阵列。

作者: 高志远

高志远,24岁,男生

发表评论

邮箱地址不会被公开。