一、页面置换在干什么
就是内存满了之后,发生【缺页】就选内存里一个页"让位"给【当前要访问的页】
二、页面置换算法
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、解决抖动:【驻留集】、【工作集】
【强调工作集】:
- 【工作集】是【要访问的页面集合】,它可能在内存,也可能不在内存而缺页
- 由此可知:【工作集】和【驻留集】 没有包含关系!!!
- 前者【可在内存、可不在内存】 ,而后者驻留集是【已经确定在内存的页】
- 还有:写工作集的时候,【重复的页号写一次就行】!!!
【例题】
【背诵常识】
【牛逼题!!!!!】
由刚刚这道题,我们又可以做下面这道题




















































