在 C 中,如果您尝试写入不属于您的内存,则可能发生的一件事是段错误。(从技术上讲,当您尝试写入不属于您的内存时,行为是未定义的,但操作系统可以处理这种情况的一种方式是抛出段错误)。对于尝试非法内存访问的用户空间代码,内核是检测非法内存访问并抛出段错误的代码。
现在,我正在编写一个 Linux 内核模块。我的代码在内核空间中运行。我有两个相关的问题:
如果我超出数组的范围,我的代码会出现段错误。我想知道是什么检测到这个段错误?对于用户空间应用程序,内核会检测段错误。那么内核代码本身呢?什么负责检测内核代码中的越界内存访问?
我编写的内核模块和 insmod 是否作为单独的进程运行?如果是,为什么当我的模块出现段错误时整个内核段错误?为什么不只是我的模块段错误,内核的其余部分继续运行?
我正在阅读本教程中的第 3.1.5 节:http ://www.tldp.org/LDP/lkmpg/2.6/html/lkmpg.html