页中断:fork、mmap背后的保护神

思考

  1. fork 的工作方式非常奇怪,一方面父进程和子进程还可以访问共有的变量,另一方面,它们又可以各自修改这个变量,且这个修改对方都看不见,这是怎么做到的呢?
  2. 我们知道虚拟内存和物理内存进行映射的时候,页表中未映射状态的页表项,并不存在一块具体的物理内存与之对应。但是当我们访问到这一页的时候,页表项可以自动变成已映射的正常状态。谁在背后做了什么事情呢?
  3. mmap 的功能十分强大,这些强大的能力是怎么完成的呢?

这三个问题,虽然看上去相互之间关系不大,但实际上它们背后都依赖页中断机制

页中断和普通的中断一样,它的中断服务程序入口也在 IDT 中,但它是由 MMU 产生的硬件中断。页中断有两类重要的类型:写保护中断和缺页中断。正是这两类中断在整个系统的后台默默地工作着,就像守护神一样支撑着内存系统正常工作。

大多数时候,我们即使不知道它们的存在,程序也能正常地运行。但是有时候,程序写得不好就有可能造成中断频繁发生,从而带来巨大的性能下降。面对这种情况,我们第一时间就应该想到统计页中断。因为除了页中断本身会带来性能下降之外,统计页中断也可以反推程序的运行特点,从而为进一步分析程序瓶颈点,提供数据和思路。

你可能感兴趣的:(#,功耗/性能/内存管理,fork,mmap,内存)