![Linux如何发现非法内存访问错误?](https://linux22.com/image/151707/Linux%E5%A6%82%E4%BD%95%E5%8F%91%E7%8E%B0%E9%9D%9E%E6%B3%95%E5%86%85%E5%AD%98%E8%AE%BF%E9%97%AE%E9%94%99%E8%AF%AF%EF%BC%9F.png)
我有一个关于 Linux 如何捕获内存访问错误的问题。据我所知,用户空间程序不需要每次想要访问内存时都询问操作系统,现在当进程尝试访问不在其地址空间中的内存位置时,CPU 必须有办法停止并将此事件传达给操作系统。
所以我的问题是:CPU 如何通知操作系统此事件?它是否开始执行预定义的代码?如果是,请告诉我该代码在内存中的位置、该代码部分的名称是什么、它的作用是什么,等等。
答案1
您的猜测似乎 100% 正确。
有一种硬件叫做内存管理单元(MMU)(CPU 的一部分)。给出了页表,描述哪些页做什么(什么是可执行的、可读的、可写的)。如果一个进程试图做它不允许做的事情,那么 MMU 就会中断 CPU。然后CPU从特定地址开始执行代码。该地址定义在中断向量表。每种中断类型的起始地址表(有些 CPU 在此表中存储指令,而不是地址,但它们执行相同的操作)。