本文主要是介绍(两百七十五)《Operating Systems: Three Easy Pieces》读书笔记 (二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第六章 受限直接执行
开篇引入问题:如何高效并可控的虚拟化CPU
可控:用户态+内核态
高效:?
还讲了进程间切换,涉及了上下文的保存和恢复
以及OS通过时钟中断重新获取CPU
第七章 进程调度
开篇提出了5个假设,并在此基础上提出/优化调度策略
- 任务同时到
- 知晓任务完成时间
- 任务执行花费相同的时间
- 只用CPU
- 不会中途停止
先提出FIFO,先进先出策略
后来引入调度指标-周转时间,并修改假设“任务完成时间相同”,优化调度策略为SJF(最短任务优先)
后来去除假设任务同时到,优化策略为STCF(最短完成时间优先)
之后引入响应时间概念,并废弃“不会中途停止”提出策略RR(轮转调度),该调度引入了上下文切换的时间消耗
之后又废弃只有CPU假设,引入重叠策略,即当一个进程由于IO阻塞无法使用CPU时,其他进程可继续使用CPU
为何轮转时间片要是中断时间的倍数?
第八章 多级反馈队列
引入问题:未知进程运行时间,如何减少响应时间和周转时间?(上一章唯一留存的假设)
引入规则:
- 如果A的优先级>B,执行A
- 如果A、B优先级相同,轮转执行
- 工作刚开始时,优先级最高
- 一旦用完在某一层的时间配额(无论中间放弃了多少次CPU),降低优先级
- 经过一段时间,所有工作恢复最高优先级(防止饥饿)
规则4由如下两个分规则演化而来
- 工作用完时间片,降低优先级
- 如果工作在其时间片内主动释放CPU,则优先级不变
但有可能被不规范进程频繁主动释放CPU的漏洞,进而导致其他进程饥饿
另外高优先级有更短的时间片,这样响应时间会比较好,而较低优先级有较长的时间片,这样周转时间较好
第九章:调度:比例额度
引入彩票、随机、步长调度策略,但由于彩票、步长无法确定,未得到广泛运用
第十章:多处理器调度
缓存:根据时间和空间局部性来缓存程序后续可能使用的数据
缓存性能>内存性能
但多个CPU会引入缓存一致性问题,可依靠硬件,比如总线窥探来解决(另外其实还依赖同步锁)
进程具有缓存亲和度,即在某个CPU上执行后,在该CPU恢复较其他CPU快
引入两种策略
- SQMS Single Queue MultiProcessor Scheduling
- MQMS Multi-Queue MultiProcessor Scheduling
SQMS有同步锁的问题,性能会比较差,继而导致拓展较差
MQMS可能会有负载不均衡问题,可通过适时地迁移任务来达到负载均衡的目的。
这篇关于(两百七十五)《Operating Systems: Three Easy Pieces》读书笔记 (二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!