最近开始学习操作系统原理这门课程,特将学习笔记整理成技术博客的形式发表,希望能给大家的操作系统学习带来帮助。同时盼望大家能对文章评论,大家一起多多交流,共同进步!
本文主要分以下几个方面:
- 文件系统结构 File-System Structure
- 分配方法 Allocation Methods
- 空闲空间分配 Free-Space Management
- 目录实现 Directory Implementation
文件系统结构:相关信息的集合
- 文件系统在二级存储空间内
- 文件系统以分层方式构建
- 文件控制块(File control block) --> 包含目录的内容
Application programs 应用程序 --> logical file system 逻辑文件结构 --> File organization module --> I/O control --> Devices
组织结构:
1. 连续分配 Contiguous Allocation -- 应用于记录型文件
- 每个文件在磁盘上占据连续的物理块,假设每个块保存一个记录,则该文件有50个记录 --> 占据50个连续物理块
- 简单-- 只需要开始地址与长度
- 支持随机访问:可以任意的访问某个记录
- 浪费空间(动态存储分配问题)
- 文件长度不能增加
- 从逻辑地址到物理地址的映射较简单
2. 链接式分配:每一个块中有一个指针项,用于指明下一个块的块号
- 每一个文件都是以链表形式连接的结构;块可以随意散列在磁盘中
- 按需分配,按link方式连接
优点: 简单,只需要起始地址; 空闲空间管理系统-没有浪费空间。
缺点: 无法随机访问,访问效率低; 映射结构复杂
如何使用一个指针实现双向链表的访问:将指针指设为该块上下块号的异或。
3. 索引分配 Indexed Allocation
把所有指针都装入一个专门的索引块。
- 需要索引表(至少一级)
- 支持随机访问
- 动态访问没有外碎片,但会有索引块消耗
- 从逻辑地址到物理地址的映射信息保存在索引块中
组合机制 Combined Scheme:用于UNIX(每块4K)
- 直接分配保存不超过12个块的值
- 直接分配+索引分配
空闲空间管理 Free-Space Management
- 位示图 Bit vector 一个大小为n的数组 bit[i] = 0=>block[i] free; 1=>block[i] occupied
块号计算:
从索引表中取实际物理块号:(number of bits per word) * (number of 0-value words) + offset of first 1 bit
回收:物理块号以每个字的比特数为商取整取余。
位示图会占据额外空间,假设块大小为212bytes=4KB,磁盘大小230bytes=1GB,则n=230/212=32KB.
优点:
1. 由于占用空间小,可以常驻内存,分配和回收速度相对磁盘较快
2. 支持连续内存分配
3. 支持链接分配和索引分配
2. 空白块链 Linked List:不支持连续文件;没有空间浪费
3. 空白文件目录 Counting: 类似于内存的分段式管理,支持连续空间分配
性能和效率:
效率取决于:
-
- 磁盘分配和目录查找的方法
- 文件的数据类型
性能取决于:
-
- 磁盘缓冲 disk cache
- 延后释放 free-behind 和 提前读取 read-ahead
- 在内存中开辟虚拟磁盘
恢复 Recovery:对备份和当前磁盘内容进行一致性检查(Consistency Checher)