缺页中断示意图
1 在CPU里执行一条查找某个页面A的指令,首先是虚拟内存,会到虚拟内存和物理内存的映射关系的页表中查询。
2 页表中不存在需要查找的页面A的有效信息。
3 则触发缺页中断信号给操作系统,操作系统收到缺页中断信号后,就会去磁盘里面查找该页面。
4 操作系统在磁盘中查到该页面后,如果物理内存存在空闲页,则会把该页面放到物理内存中去。
5 页面从磁盘放入物理内存中后,会将页表项改为有效的。
6 最后,CPU重新执行导致缺页异常的指令。之后就能正常查询了。
页表项字段如图
上述说的,是物理内存未满的情况,如果物理内存满了呢?此时就需要通过某种算法选取某个物理内存中的页框,将其放到磁盘上去,再把想要查询的页面从磁盘中放到物理内存上面。
内存页面置换算法:
1、最佳页面置换算法
置换在未来最长时间不访问的页面。
特点是很理想,实际中无法直到未来访问页面的情况,其作用是为了进行算法效率的衡量,因为这种算法是理想情况的最优页面置换算法。
2、先进先出置换算法
置换在内存中存放时间最长的页面
3、最近最久未访问置换算法(LRU,面试重点力扣题)
LRU最近最久未访问算法基本思路是,当发生缺页时,选择最长时间没有被访问的页面进行置换,该算法假设最长时间没有被访问的页面在未来的一段时间仍然不会被访问。
LRU这种算法的思想近似于最佳页面置换算法,最佳页面置换算法是根据未来的情况推测,而LRU是根据历史的情况来进行推测。
4、时钟页面置换算法
将页表项放在一个类似时钟的环形链表上,当表针指向一个访问位为0的页表项,则淘汰该页表项,将磁盘上的页面置换到内存中,表针向前移动,如果表针指向一个访问位为1的页表项,则将其访问位置0,表针向前移动,直到表针指向一个访问位为0的页表项。
5、最不常用页面置换算法
当发生缺页中断时,选择访问次数最少的那个页面,将其淘汰。