操作系统之文件管理
在学的时候,包括复习的时候,一直认为这是最不重要的一部分
但是,很意外,现在我觉得它是最有魅力的一部分。
本文仅针对考研408,八股文的一些漫谈,碎碎念,札记,和一些思考的角度,远谈不上探源操作系统
参考文献:《操作系统》——精髓与设计原理,王道考研系列
操作系统负责管理计算机资源,操作系统的如何实现管理,在于数据结构和对数据结构的操作
思考角度1:数据结构是对资源的抽象,对资源的管理就是对数据结构的管理
文件系统提供了外存(与辅助存储相关的资源)的抽象
我们需要完成对这种资源的抽象与管理
-
抽象: 文件
-
管理:
- 外层封针对用户:
- 创建/删除
- 打开/关闭
- 读/写
- 底层管理针对系统:数据结构 + 操作
- 外层封针对用户:
文件管理系统
在计算机组成原理——存储体系部分,我们采用多级存储结构解决了以下问题
- Cache解决了CPU与主存速度不匹配的矛盾
- 辅助存储器解决了主存容量不足和高成本的问题
思考角度2:主存(内存)和辅存(外存)
在内存管理部分,程序(进程)是在内存里的。也主要是内存问题。外存基本没有涉及。
而文件管理部分,则需要查找(这一过程主要在内存中),对磁盘管理(这一过程主要在外存中),因此看起来文件好像有两部分。
集合中元素:对单个文件的管理
由底层到高层:粒度不断变细
用户看到的是文件,关于特点都是针对文件内的记录而言
-
堆
-
顺序文件:批处理,批处理,批处理(这点感觉王道讲的有些含糊)
-
索引顺序文件:分组 组内顺序
-
索引文件:摒弃顺序性和关键字,直接对对记录进行索引
-
直接或散列文件:直接访问到地址已知的快,需要关键域
-
关于其实现的数据结构和对数据结构的操作
想说B树 和对 B树的操作,详见数据结构部分
访问方式 决定 逻辑结构
- 文件作为整体处理,顺序文件组织是最简单合适的
- 典型:CD-ROM中文件永远不会被修改,而且仅以批处理方式处理,每次访问所有记录,不需要检索,因此,顺序文件组织是最合适的。
- 对单个文件的顺序访问和随机访问,索引顺序文件合适(分组索引,组内顺序)
- 随机访问,索引文件或散列文件最合适
文件集合:文件之间的管理(目录管理)
表征着集合,表征文件集合,而不是具体的文件,注意与索引结点的对比
思考角度3:资源本身与资源集合,资源内部维护与资源集合维护
数据结构:文件控制块(FCB,目录项)
FCB的有序集合是文件目录
数据结构:目录项
辅助存储管理
对于磁盘空间的管理
- 文件的分配
- 空闲空间的管理
文件的分配
考虑的是外存空间的分配
对于文件
(可以参考内存分配)
最朴素原始的方式就是直接连续分配,(分配方式可直接参考内存分配部分:首次适配,最佳适配,最近适配)后来改进,
按照基本单位,内存分配中基本单位是页,外存分配中基本单位是块
考虑的核心问题是I/O性能
- 连续:局部性原理最好
- 链接:缺少了局部性原理 (因为内存中速度快,可以理解为可以随机访问,首先考虑的命中率,在计算机组成原理中,我们知道内存相对外存快,但是小,外存相对内存大,但是速度慢。所以外存I/O需要考虑局部性)
- 索引:是连续和链接的折衷,是最普遍的一种文件分配方式。支持顺序访问文件和直接访问文件
空闲空间的分配
思考角度4:什么是应该放在内存中的,什么是应该放在外存中的。
放在内存中的数据/数据结构需要满足什么条件
内存中的数据结构,是否足够小,和较高的命中率
数据结构是什么,是对哪一种资源的抽象,
很显然,磁盘分配表,是对磁盘这种物理资源是否可用的一种抽象
Ps: 思考角度1:数据结构是对资源的抽象,对资源的管理就是对数据结构的管理
数据结构:
- 磁盘分配表(Disk Allocation Table,DAT) 对比 文件分配表(File Allocation Table FAT)
- 位表(位表是在内存中的)
……
思考:在内存分配中,程序分配和空闲内存的分配用同一套体系就实现管理,为什么在文件这里要单独分开呢?
文件对象
代表需要读入的文件
关于文件读取的模型。考点。
我们读取文件并不是直接把文件读到内存中,而是建立一个文件对象。
直观理解,10多个G的电影,内存只有8个G的电脑还是能开,很显然,它不是一下子全读入内存。
想想电影这种东西是不会修改的,一般读也是看完,假定,大多数一口气看完,也不会索引,跳到精彩部分不算?好像挺适合顺序文件。(批处理方式)
open()创建文件对象,close()销毁文件对象。
- 与文件关联的目录项对象(2014统考题,文件首次打开,需要先将文件控制块读入内存)
-
文件对象的使用计数(2020年统考题,一个进程关闭,不可以删除系统打开表项)
-
文件指针,还是以看电影为例子。我们不是停在某一帧不动了,而是不断读,而看过的可以理解为没有用,暂时可以释放。(2020,每个用户打开文件表中关于文件的表项内容不同)
之后可以read(),write(),release(),lock()都是建立在文件对象上的(2013统考题,read系统调用不需要文件名称)
超级块对象
描述特定文件系统的信息
索引结点
代表外存中的文件
数据结构包含着一个特定文件中所有描述信息
索引结点数量决定文件数量
create(),lookup(),mkdir()
这本操作系统教材我也看过,我感觉特别好 虽然没看懂