如果我们在用户空间和内核空间中取消引用空指针会发生什么?
根据我的理解,行为基于编译器,架构等。
但通常用于分配虚拟内存的每个用户空间程序,并且分页用于使用页表将虚拟地址转换为物理地址。
因此,如果我们在用户空间中取消引用空指针,则该地址无效,因此上下文切换将发生,并且在内核中基于此空指针的中断解除引用'将出现分段错误或页面错误错误'。< / p>
在内核空间:
如果我们取消引用NULL指针,可能会导致系统崩溃,或者内核可能无法从该调用返回。
我的理解是否正确?或任何其他信息缺失意味着请解释。
参考:我从这个“What happens in OS when we dereference a NULL pointer in C?”中了解到了
答案 0 :(得分:3)
内核将虚拟地址0处的页面映射到没有设置权限位的所有进程。当您尝试访问该页面时,您会收到page fault。处理它的内核例程会向您的进程发出SIGSEGV
signal。如果您没有注册SIGSEGV
的处理程序,则核心为dumped,您会看到&#34;分段错误&#34;消息。
内核方面,事情有点不同。毕竟,内核应该是健壮的: