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