Linux如何发现非法内存访问错误?

Linux如何发现非法内存访问错误?

我有一个关于 Linux 如何捕获内存访问错误的问题。据我所知,用户空间程序不需要每次想要访问内存时都询问操作系统,现在当进程尝试访问不在其地址空间中的内存位置时,CPU 必须有办法停止并将此事件传达给操作系统。

所以我的问题是:CPU 如何通知操作系统此事件?它是否开始执行预定义的代码?如果是,请告诉我该代码在内存中的位置、该代码部分的名称是什么、它的作用是什么,等等。

答案1

您的猜测似乎 100% 正确。

有一种硬件叫做内存管理单元(MMU)(CPU 的一部分)。给出了页表,描述哪些页做什么(什么是可执行的、可读的、可写的)。如果一个进程试图做它不允许做的事情,那么 MMU 就会中断 CPU。然后CPU从特定地址开始执行代码。该地址定义在中断向量表。每种中断类型的起始地址表(有些 CPU 在此表中存储指令,而不是地址,但它们执行相同的操作)。

相关内容