缺页中断与页面置换理论

    技术2022-07-11  146

    缺页中断与页面置换理论

    分类:操作系统--内存管理和优化

    缺页中断:

    缺页中断就是要访问的页不在主存,需要操作系统将其调入主存后再进行访问,在这个时候,被内存映射的文件实际上成了一个分页交换文件。

    缺页失:

    又名硬错误、硬中断、分页错误、寻页缺失、缺页中断、页故障 指的是当软件试图访问已映射在虚拟地址空间中,但是并未被加载在物理内存中的一个分页时,由中央处理器的内存管理单元所发出的中断。通常情况下,用于处理此中断的程序是操作系统的一部分。如果操作系统判断此次访问是有效的,那么操作系统会尝试将相关的分页从硬盘上的虚拟内存文件中调入内存。而如果访问是不被允许的,那么操作系统通常会结束相关的进程。虽然其名为“页缺失”错误,但实际上这并不一定是一种错误。而且这一机制对于利用虚拟内存来增加程序可用内存空间的操作系统中都是常见且有必要的。微软在较新版Windows的资源监视器中使用“硬错误”、“硬中断”这一术语来指代“页缺失”。

    中断:

    是指计算机在执行程序的过程中,当出现异常情况或特殊请求时,计算机停止现行程序的运行,转向对这些异常情况或特殊请求的处理,处理结束后再返回现行程序的间断处,继续执行原程序。

    缺页中断的次数:

    中断的次数 = 进程中的物理块 - 页面置换次数

    页面置换算法:

    页式虚拟存储器实现的一个难点是设计页面调度(置换)算法,即将新页面调入内存时,如果内存中所有的物理页都已经分配出去,就要按某种策略来废弃某个页面,将其所占据的物理页释放出来,好的算法,让缺页率降低。常见的有先进先出调度算法(FIFO,First In First Out),最近最少调度算法(LFU,根据时间判断),最近最不常用调度算法(LRU,Least Recently Used,根据使用频率判断),最佳置换算法(OPT ),时钟页面置换算法。

    页面置换与缺页次数,缺页率的计算:

    1. 先进先出调度算法(FIFO):

    选择在内存中驻留时间最长的页面并淘汰它。

    OS维护一个链表,记录了所有页面位于内存当中的逻辑页面,从链表的排列顺序来看,链首页面的驻留时间最长,页尾页面的驻留时间最短,当发生一个缺页中断时,把链首页面淘汰出去,并把新的页面添加到链表的末尾。

    例如某请求分页式存储管理系统,接收一个共10页的作业。作业运行时的页面走向如下:1,5,2,1,3,2,4,7,2,4 假定系统为改作业分配了3块内存空间,内存页块初始均为空。

    三个物理块先后加载的数据如下图所示:

    进程运行时,先将1,5,2依次装入内存之中(初次加载也会激发缺页中断),进程访问页面1时,会发现最早进入队列中,有当前访问的页面,所以可以空出来(图中照抄上一队列),然后访问页面3,再把之前队列中【1,5,2】最早进入内存中的1换出,然后依次将当前访问的页面与之前队列中的页面进行置换。

    FIFO算法还会产生当所分配的物理块数增大而页故障数不减反增的异常现象。

    http://www.cnblogs.com/zhangbaochong/p/5827167.html

    2. 最近最久未使用(LRU)算法:

    当一个缺页中断发生时,选择最久未使用的那个页面,并淘汰它。此算法是最优页面置换算的一个近似,其依据是程序的局部性原理,即在最近一小段时间内,如果某些页面被频繁的访问,那么在将来的一段时间内,它们还可能会再次被频繁的访问;反之,如果在过去某些页面长时间未被访问,那么在将来他们还可能会长时间得不到访问。基于上面例题,利用LRU算法进行页面置换:进程运行时,先将1,5,2依次装入内存之中(初次加载也会激发缺页中断),进程第一次对页面1访问时,未有最近最久未被访问的页面。然后访问页面3时,将最近最久未使用的页面5换出,依次访问页面与堆栈进行置换。

    3. 最佳置换算法(OPT):

    当一个缺页中断发生时,对于保存在内存中的每一个逻辑页面,计算在它的下一次访问之前,还需要等待多长时间,从中选择时间最长的那个,作为被置换的页面。这是一种理想的页面置换算法,在实际系统中是无法实现的,因为操作系统无从知道每一个页面要等待多长时间以后才会被访问。可以作为其它算法性能评价的依据。

    4. 时钟页面置换算法:

    需要用到页表项当中的访问位,当一个页面被装入内存中时,把该位初始化为0,然后如果这个页面被访问(读/写),则把该位置1。把各个页面组织成环形链表(类似钟表面),把指针指向最老的页面(最先进来的)。当发生一个缺页中断时,考察指针所指向的最老页面,若它的访问位为0,立即淘汰;若访问位为1,则把该位置0,然后指针往下移动一个,如此下去,直到找到被淘汰的页面,然后把指针移动到它的下一个。

    5. 最不经常用算法(LFU):

    当缺页中断发生时,选择访问次数最少的那个页面,并淘汰之。

    参考:

    https://blog.csdn.net/FX677588/article/details/77915583 https://zhuanlan.zhihu.com/p/113699454

    Processed: 0.011, SQL: 9