步骤 3 / 6
内核判断:合法还是越界
内核查账本,看这个地址是不是程序有权使用的。
地址在程序申请过的范围内,说明只是还没分配,内核来补上。 地址根本不属于程序,那才是真错误,内核发信号终止它,也就是常见的“段错误”(Segmentation fault)。 同一种异常,内核根据账本给出完全不同的处理。
操作系统
Linux 不会提前把内存给足,等程序真正用到时再补上,内存紧张时还可能“超卖”。
以程序 malloc 一大块内存、之后第一次写入为例。
步骤 3 / 6
内核查账本,看这个地址是不是程序有权使用的。
地址在程序申请过的范围内,说明只是还没分配,内核来补上。 地址根本不属于程序,那才是真错误,内核发信号终止它,也就是常见的“段错误”(Segmentation fault)。 同一种异常,内核根据账本给出完全不同的处理。
| 当前状态 | 发生了什么 |
|---|---|
| 用户态 | 内核只记账,不分配真实内存 |
| 进入内核态 | 访问未映射的页,陷入内核 |
| 内核态 | 确认地址合法,只是尚未分配 |