一次由缺页中断引发的旅程

匆匆过客 提交于 2019-12-01 18:38:28

综述

首先,啥是页,这是针对内存来说的,现代操作系统将内存分成许许多多的(逻辑上),一页的大小默认是4KB(Linux)。操作系统在运行程序时,不会一次性将程序所需的页都加载到内存中(没有这个必要)。
所以当操作系统运行程序所要用到页没有加载到物理内存时,就会触发一个来自CPU的缺页错误,操作系统捕捉到这个错误,然后将对应的页加载到物理内存中。

上面的概述涉及到几个概念:页、物理内存、中断。

页和段

除了将内存划分成页之外,其实还可以划分成段,一段内存就存放程序所需要的全部数据和指令。这种情况下是不会产生缺少数据或者指令的情况的。不过却会引发一个新的问题:内存碎片和内存不足。如下图所示:

当然也有办法解决,就是内存交换,将python程序占用的256M先写到硬盘上,再从硬盘上读回内存,不过是从接着已占用的512M写。这样我们就可以空间连续的256M来加载新的程序X了。看来很完美,不需要页的
出场了,实际上大家都知道,硬盘的访问速度相比内存来说,慢了可是几个数量级。频繁的读写磁盘,性能肯定上不去的,所以才有页的出现。

异常和中断


程序不仅简单的执行指令,更多的还需要和外部的输入输出打交道。另一方面,程序在运行过程中,还会遇到各种上异常情况,比如除0,位溢出,甚至我们自己也可以让程序招聘异常

异常,其实是一个硬件和软件组合在一起的处理过程,异常的前半生:发生和捕捉,是在硬件层面完成的。但后半
生,也就是异常的处理,其实是由软件来完成的

计算机会为每一种可能的异常,分配一个异常代码

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!