什么是缺页中断:
位于进程线性地址空间中的页面不需要驻留在内存中。 执行某个指令时,如果发现要访问的页不在存储器中(存在位为0 ),则停止执行该指令,生成页无例外。 相应的故障处理程序可以通过将页面从外部存储器加载到内存中来排除故障。 然后,引起原始异常的指令无一例外都可以执行。
页面调度算法:
基于页面的虚拟内存实现的一个难点是页面调度(替换)算法,在将新页面读入内存之前,如果内存中的所有物理页面都已分配,则丢弃某些页面并释放其占用的物理页面常见的是先进先出调度算法,最近是最小调度算法,最近最不常用。
缺页中断的计算:
工作本身的程序编制方法。 根据程序的编写方法的不同,页面错误的次数会有很大的影响。
例如,有将128128的数组设为初始值“0”的程序。 假设目前只有一个主内存块分配给该程序,页面大小为每页128个字符,数组中的元素每行存储在一页中,第一页存储在主存储器中。 程序的编制方式如下
vara : array [1. 128 ] of array [1. 128 ] of
智能手机
for j :=1 to 128
do for i :=1 to128
do A[i][j]:=0
每次执行A[i][j] :=0时会发生缺页,共发生(128128-1 )次缺页。
重新创建此程序后,将出现以下情况:
Var A: array[1.128] of
array[1.128] of
智能手机
for i :=1 to128
do for j :=1 to128
do A[i][j] :=0
那么只有合计(128-1 )次缺页的中断才会发生。
显然,虚拟存储的效率与程序的局部化程度密切相关。 程序局部化有时间局部化和空间局部化两种。
缺页是指要访问的页不在主存储器上。 必须在操作系统将其捕获到主存储器中之后才能进行访问。 此时,映射到内存的文件实际上是分页交换文件。
中断
指计算机在运行程序过程中,出现异常情况或特殊要求时,计算机停止运行现行程序,转移到对这些异常情况或特殊要求的处理,处理结束后,返回现行程序的分界线,继续执行原程序
缺页顺序
发生页面错误时的事件顺序如下。
1 )硬件陷入内核,在内核堆栈中保存程序计数器。 大多数机器都将当前命令的各种状态信息保存在特殊的CPU寄存器中。
2 )启动汇编代码例程,保存通用寄存器和其他易失性信息,以免被操作系统破坏。 这个例程将操作系统作为函数调用。
3 ) OS发现缺页时,试图发现需要哪个虚拟页面。 硬件寄存器通常包含此信息。 如果没有,操作系统必须搜索程序计数器,取出这个指令,用软件分析这个指令,看看缺少的页面被中断时在做什么。
4 )知道发生缺页的虚拟地址后,操作系统检查该地址是否有效,检查访问和保护是否一致。 如果不一致,则向进程发送信号或杀死进程。 如果地址有效且没有发生保护错误,则会检查是否存在空闲页面框。 如果没有空的页面框,请运行页面替换算法查找页面并将其丢弃。
5 )如果选定的页面框“被污染”,则调度该页面回写到磁盘,触发一次上下文切换,挂起出现页面不足中断的进程,等待磁盘传输完成的其他进程无论如何,此页面框都标记为忙,以避免因其他原因被其他进程占用。
6 )页面框“清理”后,无论是立即还是刻录到磁盘,操作系统都会在磁盘上查找所需页面的地址,然后通过磁盘操作进行挂载。 页面加载后,出现页面不足中断的进程仍处于挂起状态,如果有其他用户进程可以运行,请选择其他用户进程运行。
7 )发生磁盘中断时,会加载页面,更新页面表,反映其位置,页面框也会标记为正常状态。
8 )恢复出现缺页的命令之前的状态,程序计数器重新指向该命令。
9 )调度引起缺页中断的进程,操作系统返回调用它的汇编语言例程。
10 )该例程恢复寄存器和其他状态信息(1)
转载于:https://blog.51cto.com/Liyan Wen/1982 340