步骤 2 / 6
第一次访问:触发缺页异常
程序第一次写这块内存,发现这一页还没映射,硬件陷入内核。
地址翻译时发现这一页还没有对应的物理内存。 硬件不会直接报错,而是陷入内核,告诉它哪个地址出了问题。 这次异常不代表程序有错,它是内核和硬件约好的信号。
操作系统
Linux 不会提前把内存给足,等程序真正用到时再补上,内存紧张时还可能“超卖”。
以程序 malloc 一大块内存、之后第一次写入为例。
步骤 2 / 6
程序第一次写这块内存,发现这一页还没映射,硬件陷入内核。
地址翻译时发现这一页还没有对应的物理内存。 硬件不会直接报错,而是陷入内核,告诉它哪个地址出了问题。 这次异常不代表程序有错,它是内核和硬件约好的信号。
| 当前状态 | 发生了什么 |
|---|---|
| 用户态 | 内核只记账,不分配真实内存 |
| 进入内核态 | 访问未映射的页,陷入内核 |