缺页中断

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

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

  缺页中断的顺序:缺页中断发生时的事件顺序如下:

  1)硬件陷入内核,在内核堆栈中保存程序计数器。大多数机器将当前指令的各种状态信息保存在特殊的CPU寄存器中。

  2)启动一个汇编代码例程保存通用寄存器和其他易失的信息,以免被操作系统破坏。这个例程将操作系统作为一个函数来调用。

  3)当操作系统发现一个缺页中断时,尝试发现需要哪个虚拟页面。通常一个硬件寄存器包含了这一信息,如果没有的话,操作系统必须检索程序计数器,取出这条指令,用软件分析这条指令,看看它在缺页中断时正在做什么。

  4) 一旦知道了发生缺页中断的虚拟地址,操作系统检查这个地址是否有效,并检查存取与保护是否一致。如果  不一致,向进程发出一个信号或杀掉该进程。如果地址有效且没有保护错误发生,系统则检查是否有空闲页框。如果没有空闲页框,执行页面置换算法寻找一个页面来淘汰。

  5) 如果选择的页框"脏"了,安排该页写回磁盘,并发生一次上下文切换,挂起产生缺页中断的进程,让其他进程运行直至磁盘传输结束。无论如何,该页框被标记为忙,以免因为其他原因而被其他进程占用。

  6) 一旦页框"干净"后(无论是立刻还是在写回磁盘后),操作系统查找所需页面在磁盘上的地址,通过磁盘操作将其装入。该页面被装入后,产生缺页中断的进程仍然被挂起,并且如果有其他可运行的用户进程,则选择另一个用户进程运行。

  7) 当磁盘中断发生时,表明该页已经被装入,页表已经更新可以反映它的位置,页框也被标记为正常状态。

  8) 恢复发生缺页中断指令以前的状态,程序计数器重新指向这条指令。

  9) 调度引发缺页中断的进程,操作系统返回调用它的汇编语言例程。

  10) 该例程恢复寄存器和其他状态信息

  缺页率:

在进行内存访问时,若所访问的页已在主存,则称此次访问成功;若所访问的页不在主存,则称此次访问失败,并产生缺页中断。若程序P在运行过程中访问页面的总次数为S,其中产生缺页中断的访问次数为F,则其缺页率为:F/s.

例1. 已知页面走向为1、2、1、3、1、2、4、2、1、3、4,且开始执行时主存中没有页面。若只给该作业分配2个物理块,当采用FIFO页面淘汰算法时缺页率为多少?假定现有一种淘汰算法,该算法淘汰页面的策略为当需要淘汰页面时,就把刚使用过的页面作为淘汰对象,试问就相同的页面走向,缺页率又为多少?

解:根据所给页面走向,采用FIFO淘汰算法的页面置换情况如下:这里的页面走向,即为系统要调用的页号。

页面走向    1     2      1     3      1      2      4     2     1     3    4

物理块1    1      1             3      3       2     2            1     1    4

物理块2            2             2      1       1     4            4     3    3

缺页        缺     缺           缺     缺     缺   缺          缺    缺   缺

    从上述页面置换图可以看出:页面引用次数为11次,缺页次数为9次,所以缺页率为9/11。

若采用后一种页面淘汰策略,其页面置换情况如下:

页面走向    1     2      1     3      1      2      4     2     1     3    4

物理块1     1      1            3      1             1      1          3    4

物理块2             2            2      2             4      2          2    2

缺页:        缺     缺          缺    缺           缺     缺        缺   缺

从上述页面置换图可以看出:页面引用次数为11次,缺页次数为8次,所以缺页率为8/11。

原文地址:https://www.cnblogs.com/haciont/p/4618893.html