目录
缺页中断(缺页异常)
当 CPU 访问的⻚⾯不在物理内存时,便会产⽣⼀个缺⻚中断,请求操作系统将所缺⻚调⼊到物理内存。
与⼀般中断的主要区别:
(1)缺⻚中断在指令执⾏期间产⽣和处理中断信号,⽽⼀般中断在⼀条指令执⾏完成后检查和处理中断信号。
(2)缺⻚中断返回到该指令的开始重新执⾏该指令,⽽⼀般中断返回到该指令的下⼀个指令执⾏
缺页中断处理流程:
1. 在 CPU ⾥访问⼀条 Load M 指令,然后 CPU 会去找 M 所对应的⻚表项
2. 如果该⻚表项的状态位是有效的,那 CPU 就可以直接去访问物理内存了,如果状态位是⽆效的,则 CPU 则会发送缺⻚中断请求。
3. 操作系统收到了缺⻚中断,则会执⾏缺⻚中断处理函数,先会查找该⻚⾯在磁盘中的⻚⾯的位置
4. 找到磁盘中对应的⻚⾯后,需要把该⻚⾯换⼊到物理内存中,但是在换⼊前,需要在物理内存中找空 闲⻚,如果找到空闲⻚,就把⻚⾯换⼊到物理内存中
5. ⻚⾯从磁盘换⼊到物理内存完成后,则把⻚表项中的状态位修改为有效的
6.最后,CPU 重新执⾏导致缺⻚异常的指令。
若找不到空闲页(上述第四步):
找不到空闲⻚的话,就说明此时内存已满了,这时候,就需要⻚⾯置换算法选择⼀个物理⻚,如果该物理⻚有被修改过(脏⻚),则把它换出到磁盘,然后把该被置换出去的⻚表项的状态改成⽆效的, 最后把正在访问的⻚⾯装⼊到这个物理⻚中
页表项
状态位:⽤于表示该⻚是否有效,也就是说是否在物理内存中,供程序访问时参考
访问字段:⽤于记录该⻚在⼀段时间被访问的次数,供⻚⾯置换算法选择出⻚⾯时参考
修改位:表示该⻚在调⼊内存后是否有被修改过,由于内存中的每⼀⻚都在磁盘上保留⼀份副本
如果没有修改,在置换该⻚时就不需要将该⻚写回到磁盘上,以减少系统的开销
如果已经被修改,则将该⻚重写到磁盘上,以保证磁盘中所保留的始终是最新的副本
硬盘地址:⽤于指出该⻚在硬盘上的地址,通常是物理块号,供调⼊该⻚时使⽤