缺页中断:请求分页世界里的专属技能,别人学不来!🤣
通常意义上的“缺页中断”只在实现了虚拟存储技术的系统中才有,而最典型的就是请求分页系统。
核心原理
“缺页中断”的发生,是基于一个核心前提:允许程序的部分在内存,部分在磁盘。
-
基本分页:在基本分页系统中,操作系统要求一个进程的所有页面必须全部装入到内存中才能开始运行。如果一个页面不在内存中,那就意味着该程序就没有被正确加载,这是一个程序错误或系统错误,而不是一个可以被处理的“中断”。操作系统会直接终止该进程。
-
请求分页:请求分页系统正是为了解决这个问题而设计的。它的核心思想就是按需装入。当一个进程执行时,操作系统只将其最开始的几个页面装入内存。当CPU试图访问一个不在内存中的页面时,MMU(内存管理单元)通过检查页表中的存在位(Valid/Present Bit),发现该页面不在内存中,就会触发一个中断,这个中断就是我们所说的**“缺页中断”**。
类比
我们可以将这两个系统进行类比:
-
基本分页系统:就像一个严格的门卫。如果你的所有行李(所有页面)没有全部带到门口,门卫(操作系统)会直接拒绝你进入,并让你离开(终止进程)。
-
请求分页系统:就像一个灵活的快递员。你只需要先带一个包裹(一个页面)进门,当你在屋里需要其他包裹时,你打电话给快递员(缺页中断),他就会帮你从仓库(磁盘)把那个包裹(页面)送过来。
例外与拓展
需要注意的是,虽然“缺页中断”这个术语专属于分页系统,但在其他同样实现了虚拟存储技术的内存管理方式中,也有类似的概念:
- 请求分段系统:在请求分段系统中,当一个进程试图访问一个不在内存中的段时,会触发一个**“缺段中断”**。其原理和处理流程与缺页中断完全一致,只是操作的对象从“页”变成了“段”。