这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战
考研倒计时:34天
上篇总结了进程和线程的概念,本篇总结处理机调度和死锁的内容
参考资料: 王道操作系统考研复习指导 天勤操作系统高分笔记
处理机调度
主要有三个层次:
- 高级调度(作业调度)(面向作业):外存-->内存 无-->创建态-->就绪态
- 中级调度(内存调度)(面向进程):外存-->内存 挂起态-->就绪态(阻塞挂起-->阻塞态)
- 低级调度(进程调度):内存-->CPU 就绪态-->运行态
发生频率最高的是低级调度。
什么时候不能进行进程调度:
- 处理中断的时候
- 进程在操作系统内核程序临界区中
- 原子操作过程中(原语)
进程切换和调度是有代价的。
会计算一些评价指标(CPU利用率、系统吞吐量、周转时间、等待时间、响应时间)
然后是常见的调度算法:
| 算法 | 是否抢占 | 会导致饥饿 | 其他补充 |
|---|---|---|---|
| FCFS | 非抢占 | 不会 | |
| SJF/SPF | 非抢占(也有抢占的SRTN) | 会 | |
| HRRN | 非抢占 | 不会 | 响应比=等待时间+服务时间/服务时间 |
| 时间片轮转 | 抢占 | 不会 | 时间片太大或太小的影响 |
| 优先级调度 | 非抢占和抢占 | 会 | |
| 多级反馈队列 | 抢占 | 会 | 平衡优秀 |
后三个适合交互式系统,前三个适合早期批处理。
多加练习!
死锁
- 死锁一定要有两个或两个以上的进程才会导致,而饥饿可能由一个进程导致。
- 死循环是应用程序员要解决的,死锁和饥饿是操作系统要解决的
死锁的产生条件
四个必要条件:互斥、不剥夺、请求和保持、循环等待。
小例子帮助理解“拿着苹果虽然自己不吃,但别人不能吃,就是不剥夺”“右手拿着苹果,左手还可以再去拿一个苹果,就是请求和保持”
如果每类资源只有一个,循环等待就是充分必要条件了。
死锁的处理策略
- 预防死锁
破坏四个必要条件
破坏互斥、比如SPOOLing技术,将临界资源改造为可共享使用的资源,缺点可行性不高。
破坏循环等待:资源编号,缺点不方便增加新设备。
破坏请求和保持:一次分配
- 避免死锁
避免系统进入不安全序列(银行家算法)
银行家算法:核心work+allocated可分配进行测试是否安全
死锁一定是不安全状态
- 死锁的检测和解除
检测:资源分配图、死锁定理(边是否可消)
解除:资源剥夺法、撤销进程法、进程回退法。
【2009年408】
点击查看答案
C (8-1)/(3-1)=3.5,不会死锁最大为3,所以可能死锁的最小为4【2015年408】
点击查看答案
B Ⅰ前面半句是破环了循环等待,属于死锁预防 后面Ⅱ Ⅲ正确 银行家算法如果此条序列不安全就不分配。部分内容待补充完善~
如有误,请多指正!