考研408《操作系统》复习笔记,第三章《3.4 页面置换算法 + 抖动》

一、页面置换在干什么

就是内存满了之后,发生【缺页】就选内存里一个页"让位"给【当前要访问的页】

二、页面置换算法

1、最佳(OPT)置换算法

【选内存什么页淘汰?】

【算法逻辑】

  • 就是得【预知所有页面在未来被访问的情况】
  • 每次缺页时,把【内存里"未来不怎么用到的页"】换出给【当前要访问的页】

【性能】

  • 最牛逼,是个完美的"梦"
  • 但是根本没办法实现,除非世界上诞生一个预知未来的神,发明一个预知未来的电脑

2、先进先出(FIFO)置换算法

【选内存什么页淘汰?】

【算法逻辑】

  • 说白了,就是【队列】!!!【头删、尾插】!!!!
  • 【数据结构的------队列的应用】题目里要记住【FIFO置换算法 是 队列的应用】!!!

【性能】

  • 队列这种死板的规定,【没有考虑局部性原理】!!!
  • 记住这种算法会有**【贝拉迪Belady异常:内存块多了反而缺页率增加】**

3、最近最久未使用(LRU)置换算法

【选内存什么页淘汰?】

就是【有了新欢忘了旧爱】

【算法逻辑】

  • 很像栈,都是【要访问的页】【插入栈顶】;
    • 但是区别是,访问新页面时,没缺页时【栈内】元素可以移动(内存已有该页面,则移动到头部)
    • 访问新页面时,发生缺页时【栈底】会被删除(内存没有访问页面,则把尾部删了,新页面插头部)
  • 所以我认为跟妥当的比喻是【相反的队列】:【头插、尾删】

【性能】

  • 性能相对较好,近似OPT但是没有OPT那么完美,又比FIFO好很多
  • 但是要【依赖硬件】
    • 不用管具体硬件原理,不考,我们只需知道要用到2个硬件:
      • 寄存器
      • 特殊栈

例题:这种画法是我个人习惯,不一定要按我的来

4、最近最少使用(LFU)置换算法 (了解即可)

和【LRU】的区别是:前者LRU是按【历史最后访问时间】淘汰、后者LFU是按【历史最少使用频次】淘汰(用的少说明它被皇帝失宠了)

5、时钟(CLOCK)置换算法

说实话这个真的我不知道它制定的这个规则的原因是什么,前面的算法要么淘汰不怎么用的页、要么淘汰很久之前才访问的页、要么访问最近使用次数最少的页.....

可是这个大概意思是:"选择近期没被访问的页面置换出去",但是有很多细节我不理解,我真的厌烦了去理解,所以我的建议就是死记硬背它的规则就行了,没意义去理解,会做题就行

【大致逻辑】

  • 所有页面构成一个【循环队列】、所有页面要设置【访问位】
  • 访问位0时表示"近期没被访问",可以被置换出去
  • 访问位1时表示"近期刚被访问",不允许被置换出去

【简单CLOCK算法逻辑】

  • 内存空间够时,分配进内存的页访问位都是1
  • 内存已满,而发生【缺页】时,指针循环遍历所有页,找到【访问位为0】的页置换给新页面
    • 指针遍历到的页,如果【不能置换出去(访问位1)】,就设【访问位为0(表示当前没访问这个页,指针遍历≠访问)】
    • 如果指针遍历到的页【可以被置换出去(访问位0)】,就把新页面替换进来,再把【访问位设回1(表示刚刚访问了)】
    • 至少两轮遍历,就必然会出现【可以被置换出去(访问位0)】的页
  • 内存已满,【没发生缺页】时
    • 指针在【内存】找到【该要访问的页】,把【访问位改为1(表示刚刚访问过)】

【改进CLOCK算法逻辑】

【基本思想】

  • 在【访问位】的基础上增加【修改位】

【详细逻辑分析】

  • 当【访问新页面】时发生【缺页】,我们在选择淘汰内存里哪个页时:
  • 【第一轮】重点:【找第一个(0,0)的淘汰】!!!【不修改任何标志位】!!!
  • 【第二轮】重点:【找第一个(0,1)的淘汰】!!!【修改访问位为0(和简单CLOCK一样)】
  • 【第三轮】重点:【找第一个(0,0)的淘汰】!!!【不修改任何标志位】
  • 【第四轮】重点:【找第一个(0,1)的淘汰】
  • 注意了:
    • 全程下来都没有动过【修改位】,因为修改位标记了该页是否被修改得跟外存不一样了,不能动它!!
    • 第一轮找到是【0,0】,第三轮还是【0,0】,因为第二轮已经把【访问位全改0】了,只剩下【0,0】、【0,1】
    • 并不是说每次缺页,都要进行4轮循环查找页面置换,这四轮里只要有一轮找到符合条件的页,就可以直接置换出去,结束本次置换了

【总结】

三、抖动(又称"颠簸")

1、抖动解释

【根本原因】:就是分配给进程的内存块太少了(钱给的太少了!!!)

2、解决抖动:【驻留集】、【工作集】

【强调工作集】:

  • 【工作集】是【要访问的页面集合】,它可能在内存,也可能不在内存而缺页
  • 由此可知:【工作集】【驻留集】 没有包含关系!!!
    • 前者【可在内存、可不在内存】而后者驻留集是【已经确定在内存的页】
  • 还有:写工作集的时候,【重复的页号写一次就行】!!!

【例题】

【背诵常识】

【牛逼题!!!!!】

由刚刚这道题,我们又可以做下面这道题