操作系统进阶
00:00
操作系统进阶:进程调度、死锁、内存管理、文件系统与I/O子系统
1. 进程调度
1.1 调度算法
| 算法 | 特点 | 饥饿 | 适用场景 |
|---|---|---|---|
| FCFS | 先来先服务 | 无 | 批处理 |
| SJF | 最短作业优先 | 可能 | 批处理 |
| SRTF | 最短剩余时间优先 | 可能 | 抢占式批处理 |
| RR | 时间片轮转 | 无 | 交互式 |
| 优先级 | 按优先级调度 | 可能 | 实时系统 |
| MLFQ | 多级反馈队列 | 可能 | 通用 |
1.2 周转时间计算
1.3 多级反馈队列(MLFQ)
基本规则:
- 优先级高的队列先执行
- 同一队列内按 RR 执行
- 新进程进入最高优先级队列
- 用完时间片后降级
- I/O 阻塞返回后升级(可选)
优化:
- 定期提升所有进程优先级(避免饥饿)
- 使用不同时间片:高优先级短时间片,低优先级长时间片
1.4 实时调度
硬实时:必须在截止时间内完成。
软实时:尽量在截止时间内完成。
EDF(最早截止时间优先):
- 动态优先级调度
- 截止时间越近优先级越高
- CPU 利用率 时可调度
RMS(速率单调调度):
- 静态优先级调度
- 周期越短优先级越高
- 可调度条件:
2. 死锁
2.1 死锁必要条件
- 互斥:资源不能共享
- 持有并等待:持有资源同时等待其他资源
- 不可抢占:已获得的资源不能被强制剥夺
- 循环等待:存在进程的循环等待链
2.2 死锁预防
破坏必要条件:
| 条件 | 方法 |
|---|---|
| 互斥 | 允许资源共享(通常不可行) |
| 持有并等待 | 一次性申请所有资源 |
| 不可抢占 | 超时释放资源 |
| 循环等待 | 资源有序分配 |
2.3 死锁避免
银行家算法:
安全序列判断:
- Work = Available, Finish[i] = false
- 找到 Finish[i]=false 且 Need[i] ≤ Work 的进程
- Work = Work + Allocation[i], Finish[i] = true
- 重复2-3直到所有 Finish[i] = true
资源分配图算法:每类资源只有一个实例时,检测图中是否存在环。
2.4 死锁检测
定期运行检测算法,发现死锁后:
- 终止进程
- 资源抢占回滚
3. 内存管理
3.1 分区分配
| 算法 | 策略 | 优缺点 |
|---|---|---|
| 首次适应 | 第一个够大的分区 | 速度快,低地址碎片多 |
| 最佳适应 | 最小的够大分区 | 碎片多(小碎片) |
| 最差适应 | 最大的分区 | 大分区被消耗 |
3.2 伙伴系统
内存按 大小分配:
- 请求大小 ,分配 的块
- 块可以分裂为两个大小相等的伙伴
- 伙伴可以合并为更大的块
3.3 页面置换算法
OPT(最优):置换未来最久不被访问的页。
FIFO:置换最早进入的页。存在 Belady 异常(更多物理页导致更多缺页)。
LRU:置换最近最久未访问的页。无 Belady 异常。
Clock:LRU 的近似,使用引用位和循环指针。
LFU:置换访问频率最低的页。
栈算法性质:LRU 和 OPT 是栈算法,(更多物理页的内存包含更少的子集)。
3.4 抖动
当分配的物理页数小于工作集时,频繁缺页:
4. 文件系统
4.1 文件分配方式
| 方式 | 优点 | 缺点 |
|---|---|---|
| 连续分配 | 顺序读取快 | 外部碎片 |
| 链接分配 | 无外部碎片 | 随机访问慢 |
| 索引分配 | 随机访问快 | 索引块开销 |
4.2 索引节点
Unix inode 结构:
┌──────────────────┐
│ 直接块指针 × 12 │ ← 小文件
│ 一级间接块指针 │ ← 中等文件
│ 二级间接块指针 │ ← 大文件
│ 三级间接块指针 │ ← 超大文件
└──────────────────┘
最大文件大小计算(4KB 块,4B 指针):
- 直接:
- 一级间接:
- 二级间接:
- 三级间接:
4.3 空闲空间管理
| 方法 | 优点 | 缺点 |
|---|---|---|
| 位图 | 简单,快速 | 占用内存 |
| 链表 | 灵活 | 遍历慢 |
| 分组 | 快速分配 | 实现复杂 |
4.4 日志结构文件系统(LFS)
- 所有写入追加到日志末尾
- 段(Segment)为单位写入
- 后台清理线程合并段
优势:写入性能高(顺序写),崩溃恢复快。
劣势:读取可能需要间接寻址,清理开销。
4.5 写时复制(COW)
用于 ZFS、Btrfs 等文件系统:
- 修改数据时,写入新位置
- 更新指针指向新位置
- 旧数据保留用于快照
5. I/O 子系统
5.1 I/O 软件层次
用户层 I/O 软件
↓
设备无关软件(缓冲、缓存、设备命名)
↓
设备驱动程序
↓
中断处理程序
↓
硬件
5.2 缓冲技术
单缓冲:
双缓冲:
循环缓冲:多个缓冲区组成环形队列。
5.3 磁盘调度
寻道时间是磁盘访问的主要开销。
| 算法 | 策略 | 优点 | 缺点 |
|---|---|---|---|
| FCFS | 按请求顺序 | 公平 | 寻道距离长 |
| SSTF | 最短寻道优先 | 寻道短 | 饥饿 |
| SCAN | 电梯算法 | 无饥饿 | 响应时间差异 |
| C-SCAN | 循环扫描 | 响应均匀 | 回程空转 |
| LOOK | SCAN改进 | 减少空转 | - |
5.4 磁盘性能计算
7200 RPM 磁盘的平均旋转延迟: