✍个人博客:https://blog.csdn.net/Newin2020?type=blog
📣专栏地址:https://blog.csdn.net/newin2020/category_12820365.html
📚专栏简介:在这个专栏中,我将会分享操作系统面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
163. 扩展调度算法
- 彩票调度:其基本思想是为进程提供各种系统资源(如 CPU 时间)的彩票。一旦需要做出一项调度决策时,就随机抽出一张彩票,拥有该彩票的进程获得该资源。
- 公平分享调度:在这种模式中,每个用户分配到 CPU 时间的一部分,而调度程序以一种强制的方式选择进程。这样,如果两个用户都得到获得 50% CPU 时间的保证,那么无论一个用户有多少进程存在,每个用户都会得到应有的 CPU 份额。
- CFS 调度算法:顾名思义就是完全公平调度。比方说,调度延迟时间是 10ms,存在两个进程 A 和 B,那么两个进程分别占用 CPU 的时间是 5ms。然而,阶级总是存在的,毕竟有些进程高贵些,需要消耗更多的时间,因此引入了 nice 值。
- 假如 A 进程 nice 值是 0,对应的权重 prio_to_weight 是 1024;B进程 nice 值是 1,对应的权重 prio_to_weight 是 820。因此,相对应的,A 进程占用 CPU 的时间就变成了 10 * 1024 / (1024 + 820) 约 5.6ms,B 进程占用 CPU 时间 10 * 820 / (1024 + 820) 约 4.4ms。人善被人欺,nice 越大,获取 CPU 的时间就越少。
- 此时分配给每个进程的运行时间=sched_latency_ns * 进程权重值 / 运行队列上所有进程权重之和
164. 最佳页面置换算法
最佳页面置换算法基本思路是,置换在「未来」最长时间不访问的页面。
所以,该算法实现需要计算内存中每个逻辑页面的「下一次」访问时间,然后比较,选择未来最长时间不访问的页面。
我们举个例子,假设一开始有 3 个空闲的物理页,然后有请求的页面序列,那它的置换过程如下图:
在这个请求的页面序列中,缺页共发生了 7 次(空闲页换入 3 次 + 最优页面置换 4 次),页面置换共发生了 4 次。
这很理想,但是实际系统中无法实现,因为程序访问页面时是动态的,我们是无法预知每个页面在「下一次」访问前的等待时间。
所以,最佳页面置换算法作用是为了衡量你的算法的效率,你的算法效率越接近该算法的效率,那么说明你的算法是高效的。
165. 先进先出置换算法
既然我们无法预知页面在下一次访问前所需的等待时间,那我们可以选择在内存驻留时间很长的页面进行中置换,这个就是「先进先出置换」算法的思想。
还是以前面的请求的页面序列作为例子,假设使用先进先出置换算法,则过程如下图:
在这个请求的页面序列中,缺页共发生了 10 次,页面置换共发生了 7 次,跟最佳页面置换算法比较起来,性能明显差了很多。