缺页中断处理过程

 缺页中断就是要访问的页不在主存,需要操作系统将其调入主存后再进行访问。

当进程执行过程中发生缺页中断时,需要进行页面换入,步骤如下:

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

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

(在页面换入换出的过程中可能会发生上下文换行,导致破坏当前程序计数器及通用寄存器中本进程的信息)

<3>当操作系统发现是一个页面中断时,查找出来发生页面中断的虚拟页面(进程地址空间中的页面)。这个虚拟页面的信息通常会保存在一个硬件寄存器中,如果没有的话,操作系统必须检索程序计数器,取出这条指令,用软件分析该指令,通过分析找出发生页面中断的虚拟页面。

<4>检查虚拟地址的有效性及安全保护位。如果发生保护错误,则杀死该进程。

<5>操作系统查找一个空闲的页框(物理内存中的页面),如果没有空闲页框则需要通过页面置换算法找到一个需要换出的页框。

<6>如果找的页框中的内容被修改了,则需要将修改的内容保存到磁盘上,此时会引起一个写磁盘调用,发生上下文切换(在等待磁盘写的过程中让其它进程运行)。

(注:此时需要将页框置为忙状态,以防页框被其它进程抢占掉)

<7>页框干净后,操作系统根据虚拟地址对应磁盘上的位置,将保持在磁盘上的页面内容复制到“干净”的页框中,此时会引起一个读磁盘调用,发生上下文切换。

<8>当磁盘中的页面内容全部装入页框后,向操作系统发送一个中断。操作系统更新内存中的页表项,将虚拟页面映射的页框号更新为写入的页框,并将页框标记为正常状态。

<9>恢复缺页中断发生前的状态,将程序指令器重新指向引起缺页中断的指令。

<10>调度引起页面中断的进程,操作系统返回汇编代码例程。

<11>汇编代码例程恢复现场,将之前保存在通用寄存器中的信息恢复。

其实缺页中断的过程涉及了用户态和内核态之间的切换,虚拟地址和物理之间的转换(这个转换过程需要使用MMU和TLB),同时涉及了内核态到用户态的转换。


  • 12
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
请求分段系统中不存在缺页中断,因为请求分段是基于分段技术实现的,而不是基于分技术实现的。在请求分段系统中,每个程序被划分为若干个逻辑段,每个逻辑段都有一个段号和段长,段内的地址都是相对于段首地址的偏移量。 当一个程序需要访问某个逻辑段时,请求分段系统会根据该段的段号和长度,检查该逻辑段是否已经加载到内存中。如果该逻辑段已经在内存中,则直接将访问请求转换为物理地址;如果该逻辑段尚未加载到内存中,则会发生段缺失中断。 段缺失中断处理过程如下: 1. 保存当前进程的上下文环境(程序计数器、寄存器等)。 2. 获取缺失段的段号,并根据段表映射关系确定对应的物理地址范围。 3. 如果物理地址范围已经被占用,则需要进行段置换,选择一个牺牲段作为被替换的段。 4. 将牺牲段的内容写回到磁盘上的段文件中,更新段表中的映射关系。 5. 将缺失段从磁盘中读入到新的物理地址范围中,更新段表中的映射关系。 6. 恢复进程的上下文环境,使程序可以继续执行。 7. 返回到进程执行的位置,使程序可以继续执行。 总之,请求分段系统中的段缺失中断处理过程与分系统中的缺页中断处理过程类似,都是通过将缺失的内容从磁盘中读入到内存中来实现逻辑地址到物理地址的映射。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值