缺页中断处理过程

原创 2015年07月09日 17:56:36
 缺页中断就是要访问的页不在主存,需要操作系统将其调入主存后再进行访问。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


相关文章推荐

缺页中断——FIFO、LRU、OPT这三种置换算法

FIFO、LRU、OPT这三种置换算法的缺页次数2缺页中断  在请求分页系统中,可以通过查询页表中的状态位类确定所要访问的页面是否存在于内存中。每当所要访问的压面不在内存时,会产生一次缺页中断,此时操...

内存常识之缺页中断

什么是缺页中断:        进程线性地址空间里的页面不必常驻内存,在执行一条指令时,如果发现他要访问的页没有在内存中(存在位为0),那么停止该指令的执行,并产生一个页不存在异常,对应的故障处理...
  • CJL5678
  • CJL5678
  • 2013年06月03日 09:18
  • 15011

linux内核分析之缺页中断

linux缺页异常程序必须能够区分由编程引起的异常以及由引用属于进程地址空间但还尚未分配物理页框的页所引起的异常。在x86-ia32体系上由do_page_fault函数处理,每个版本有所差异,现分析...
  • bullbat
  • bullbat
  • 2011年12月28日 11:39
  • 5230

缺页中断处理过程详解

当进程执行过程中发生缺页中断时,需要进行页面换入,步骤如下: 首先硬件会陷入内核,在堆栈中保存程序计数器。大多数机器将当前指令的各种状态信息保存在CPU中特殊的寄存器中。 启动一个汇编代码例程保...
  • pxz_002
  • pxz_002
  • 2012年03月06日 12:03
  • 2496

Linux学习总结—缺页中断和交换技术

三、Linux缺页中断处理1.请求调页中断:进程线性地址空间里的页面不必常驻内存,例如进程的分配请求被理解满足,空间仅仅保留vm_area_struct的空间,页面可能被交换到后援存储器,或者写一个只...
  • cxylaf
  • cxylaf
  • 2007年05月26日 10:30
  • 7386

缺页中断处理

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

缺页异常详解

首先明确下什么是缺页异常,CPU通过地址总线可以访问连接在地址总线上的所有外设,包括物理内存、IO设备等等,但从CPU发出的访问地址并非是这些外设在地址总线上的物理地址,而是一个虚拟地址,由MMU将虚...

Linux 内存管理:缺页异常的几种原因

给定一个线性地址,MMU 通过页目录表、页表的转换,找到对应的物理地址。在这个过程中,如果因某种原因导致无法访问到最终的物理内存单元,CPU 会产生一次缺页异常,从而进入缺页异常处理程序。 总结一下,...

缺页异常处理程序

我们在中断专题中提到,Linux的缺页(Page Fault)异常处理程序必须区分以下两种情况:由编程错误所引起的异常,及由引用属于进程地址空间但还尚未分配物理页框的页所引起的异常。 线性区描述符可以...

ARM中断处理过程

  • 2014年04月21日 11:22
  • 88KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:缺页中断处理过程
举报原因:
原因补充:

(最多只允许输入30个字)