常见题型
进程调度👉甘特图 算平均等待时间
死锁👉银行家算法
分页👉偏移量计算 转物理地址
虚拟内存👉页面置换 画图
磁盘调度👉计算磁头移动距离
复习大纲
第一章 绪论 很多概念重点
第二章 操作系统结构
第三章 进程 调度 操作 进程间通信
第四章 线程 与进程的区别
第五章 CPU调度 重点
第六章 进程同步 重点
第七章 死锁 重点
第八章 内存管理 分页
第九章 虚拟内存 帧 页面置换
第十章 文件系统 访问 目录结构
第十一章 文件系统实现 目录实现 分配
第十二章 大容量存储器结构
第十三章 IO系统
概念总结
1字节 = 1B = 8bit
n位计算机👉字长n位 寻址空间2^n
FAT File Allocation Table 文件分配表
NTFS New Technology File System
Translation Look-aside Buffer 转换表缓冲区
MMU Memory Management Unit
PSW Program Status Word
👉程序状态字
API Application Programming Interface
👉应用程序接口
PCB Process Control Block 进程控制块
PID 进程ID
TID 线程ID
TCB 线程控制块
内核 Kernel
外壳 Shell
系统调用 System Call
库函数调用 Library Function Call
多道程序设计👉CPU总有一个作业执行
定时器👉维持对CPU的控制👉产生强制中断
重要考点
- 陷阱
内中断 异常 同步执行 软件产生
引起原因👇出错/用户请求
算术溢出 缓冲区溢出 指令/地址非法
页面失效 访管
- 中断
外中断 硬中断 同步执行
引起原因👇
IO中断 定时器中断
软中断👉软件模拟外中断
信号中断 软件中断
- 特权指令
双重模式👉内核模式 用户模式
or 管态 目态
特权指令👉只能在内核模式下执行
访问计算机所有资源
访管指令👉只能在用户模式下执行
用户模式切换到内核模式
常见特权指令👇
读写PSW
访问特殊寄存器
中断管理 内存管理 时钟管理
IO相关指令
停机
非特权指令⚠️
访管指令
DMA传数据指令
改变磁盘空间分配图
写程序计数器 寄存器清零
取指令 取操作数 写内存
看情况👇
清内存 读时钟
- 系统调用
OS为用户提供两类接口👇
命令级接口👉外壳输入指令
程序级接口👉系统调用
操作系统 = 内核
外壳👉命令解释程序👉命令行/图形用户界面
外壳不属于操作系统
API函数和库函数都转换为系统调用
(前者需涉及系统服务
系统调用👉程序通过API访问
唯一程序接口
系统调用必须切换回内核模式
三种传递参数方式👇
寄存器传递 块传递 堆栈传递
四种结构👇
简单结构 模块化结构
层次结构 微内核结构
- 进程
任意时刻只能有一个进程运行
其他只能处于就绪或等待状态
作业为工作集合 由一个或多个进程组成
PCB👉进程存在的唯一标志
程序段+数据段+PCB👉进程实体
创建进程👉创建PCB
撤销进程👉撤销PCB
运行态 CPU✅其他所需资源✅
就绪态 CPU❌其他所需资源✅
阻塞态 CPU❌其他所需资源❌
创建态
终止态
原语👇
不允许中断👉原子操作
关中断指令👉开中断指令
只能在内核态下用
原语功能👇
更新PCB
将PCB插入合适队列
分配回收资源
上下文切换👉进程切换 保存PCB1 恢复PCB2
进程间通信⚠️
共享内存👉互斥访问
管道👉半双工通信 单向 写满再读 读空再写
消息传递👉直接通信 间接通信
- 线程
一个进程👉多个线程👉多段代码
基本的CPU执行单元
程序执行流的最小单位
提升了系统的并发度 开销减小
线程👉调度的基本单位
进程👉资源分配的基本单位
只作为CPU之外的系统资源的分配单元
资源(打印机…)分配给进程
用户级线程👇User-Level Thread ULT
应用程序负责线程管理
用户态下完成切换
“从用户视角能看到的线程” (内核看不到
内核级线程👇KLT
操作系统负责线程管理
内核态下完成切换
“从内核视角看能看到的线程” (都能看到
处理器分配的单位⚠️
多线程模型👇
多对一:开销小 效率高 并发度不高 不能多核
一对一:并发度高 多核 开销大
多对多:两者结合
- 处理机调度
三种层次👇
高级调度 作业调度 外存到内存 从无到有
中级调度 内存调度 外存到内存 挂起态到就绪态
低级调度 进程调度 内存到CPU 就绪态到运行态
发生频率由低到高
挂起👉从内存调到外存
- 进程调度⚠️
不能进行进程调度和切换的情况
1⃣️内核程序临界区
2⃣️处理中断过程中
3⃣️原子操作中(如修改PCB
在普通、低速临界区可以进行(如打印机
两种方式👇
抢占式
非抢占式
过程👇
保存旧数据 恢复新数据 有代价
CPU利用率👇
忙碌的时间/总时间
系统吞吐量👇
完成作业个数/总时间
周转时间👇
等待调度+就绪时间+执行时间+阻塞时间
作业完成时间 - 作业提交时间
平均(带权)周转时间👇
各作业(带权)周转时间和/作业数量
带权周转时间👇越小越好
作业周转时间/作业实际运行时间
平均等待时间⚠️
平均周转时间-平均执行时间
响应比👇
周转时间/执行时间
调度准则👇
CPU利用率最大化
吞吐量最大化
周转/等待/响应时间最小化
调度算法⚠️
先来先服务FCFS
👉非抢占
👉简单公平 护航效应 平均等待时间T长
最短作业/最短剩余时间优先
👉非抢占SJF 抢占SRTF
👉饥饿 无法准确预测进程时间 T最短
优先级调度
👉抢占 非抢占(添加到队伍头部
👉灵活 易饥饿 低优先级无穷等待
解决👉老化 逐渐提高等着的优先级
轮转调度RR
👉抢占
👉及时响应 响应时间短 不会饥饿
多级反馈队列调度
👉多级队列 多个优先级 多个时间片等级
👉一般为抢占
👉前面的结合
- 进程同步与互斥⚠️
同步 解决进程异步性👇
各并发执行的进程各自独立 无法预知
竞争条件👇
多个进程并发访问同一数据
最终结果与各自访问顺序有关
临界资源👇
一个时间段内只允许一个进程使用(打印机
进入区👉临界区👉退出区👉剩余区
临界区👇
访问临界资源的代码段
四个条件⚠️
互斥(忙则等待)
前进(空则让进)
有限等待(等则有限)
等则让权👉不能进入临界区时释放处理机
👉解决忙等 提高CPU利用率
前三个必须满足 第四个可选
进入区 退出区👇
负责实现互斥的代码段
剩余区👇
做其他处理
软件实现互斥⚠️
Peterson算法👉双标志+单标志+孔融让梨
硬件实现互斥👇
中断屏蔽 TextAndSet Swap指令
信号量机制⚠️
1⃣️进程个数 分析同步互斥关系 从事件的角度
互斥👉mutex
同步👉一前一后
2⃣️整理思路 确定PV顺序
互斥👉在临界区前后分别PV
同步👉前V后P
3⃣️设置信号量 确定初值
4⃣️写各个线程的伪代码
两类题👇
消费者生产者思路
读者学者思路 设count和互斥量
几个典型例题👇
消费者生产者 吃水果 理发师
读者写者 哲学家问题
自旋锁👇
忙等 不释放CPU 一直等待解锁
适合多处理器系统
管程👇
有自己的数据结构和函数
编译器实现互斥 设置变量实现同步
一种高级同步机制
- 死锁
死锁👉相互等待资源 各进程阻塞
两个以上进程 一定阻塞态 管理者问题
饥饿👉长期得不到想要的资源
可能一个进程 阻塞/就绪态 管理者问题
死循环👉跳不出某个循环 代码逻辑错误
可能一个进程 被管理者问题
四个充要条件⚠️必须同时满足
互斥👉一次只有一个进程使用资源
占有并等待👉至少占有一个资源并等待另一个
非抢占👉不能被抢占
循环等待👉∞ 每类资源不可替代
三种死锁情况👇资源分配
不可剥夺资源竞争(打印机
进程推进顺序非法
信号量使用不当
预防死锁👇静态策略
破坏互斥条件(打印机👉共享打印机
“一般不能否定互斥”
破坏不剥夺条件(不满足就立即释放资源
可能会饥饿 复杂
破坏占有并等待条件(静态分配 一次性服务
资源利用率低 可能会饥饿
破坏循环等待条件(顺序资源分配
资源浪费 麻烦
避免死锁⚠️动态策略
安全序列👉分配资源的序列
安全状态👉一定不会死锁
不安全状态👉可能会死锁
银行家算法🌈
每类资源只有一个实例
假设分配👉更新系统状态👉判断是否安全
死锁检测和解除👇
资源分配图👇
依次资源归还👉消除边 直到无边可消
1⃣️消除所有边👉找到一个安全序列
2⃣️不能消除所有边👉发生死锁👉死锁定理
解除法👉资源剥夺法 撤销进程法 进程回退法
- 内存管理
MMU👇CPU里面
负责逻辑地址到物理地址的转换👉找映射
三种实现方法👇
连续内存分配 分页 分段
固定分区👉有内部碎片
动态分区👉有外部碎片
外部碎片⚠️
未分配 未使用的内存
内部碎片⚠️
已分配 未使用的内存
动态分区👉一块可用内存👉孔Hole
分配后更新孔集合
孔的分配算法👇分配后重新排序容量
首次适应 地址递增 开销小
最佳适应 容量递增 外部碎片多 开销大
最差适应/最大适应 容量递减 开销大
邻近适应 地址递增 从上次结束位置开始查找
- 非连续分配
1⃣️分页⚠️
内存👉相等小分区
进程👉相等小部分
每个小分区👉页框/页帧/内存块/物理块
+页框号/…
每个小部分👉页/页面 + 页号
物理地址=逻辑地址+偏移量
页号=逻辑地址/页面长度(取整
偏移量=逻辑地址%页面长度
逻辑地址的页号👉找到内存中起始地址
👉算出页面中的偏移量👉相加
页面大小👉逻辑地址空间大小
可存4096个逻辑地址 4kb 占12位
逻辑地址长度👉地址一共有多少位 如32位
逻辑地址👉页号+页内偏移量
根据页号👉查页表👉查对应块号👉起始地址
一个进程对应一个页表
内存块数=物理内存大小/页面大小
🚩TLB
访问一个字节需要两次访存
获取页表项+访问数据
解决:TLB 类似cache的工作
TLB命中👉内存块号很快获取
TLB未命中👉对应表项更新到TLB中
2⃣️分段👇
逻辑地址空间👉分成多段
- 虚拟内存
逻辑地址空间远远大于物理地址
将用户逻辑内存和物理内存分离
匀出硬盘空间👉内存👉装不常用的
提高系统运行效率
内存有效访问时间EAT👇
p页错误率
页面置换算法⚠️
- 文件管理
文件的访问方法👇
顺序访问
直接访问/相对访问/随机访问
索引访问
文件的路径名👇
目录结构👇
- 磁盘
磁盘的分配方法👇
连续分配 链接分配 适应分配
磁盘速度👇
磁盘调度👇
FCFS 简单 效率低
SSTF 不公平
SCAN 去了又来 双方向 比较公平
C-SCAN 去了又去 回到起始点 单方向
LOOK 不到端点 到最后一个点折返
C-LOOK 不到端点 到最后一个点再回到最小点
- IO系统
IO硬件👇
Polling轮询👉CPU忙等 并发性差 效率低
中断👉低速外设 键盘鼠标
DMA👉高速外设 磁盘
通道👉CPU干预最少