Var*_*run 1 operating-system memory-management
每当发生分段错误时,我们总是会出现页面错误吗?
任何有Linux内核代码经验的人都可以在这里请求代码吗?
我已经看到:分段错误与页面错误
Pagefault(又名#PF)是segfault的常见原因(在非现有页面处寻址某些数据,尝试从没有相应权限级别的受保护页面读取或写入数据,从无执行页面获取代码,. ..).
但是,由于其他一些罕见的原因,可能会发生段错误.例如,如果您尝试执行没有请求的当前权限级别(CPL)的特权指令.检查此示例:
% cat segfault.c && gcc segfault.c -o segfault
int main(void)
{
__asm__("invd");
return 0;
}
% ./segfault
Segmentation fault
Run Code Online (Sandbox Code Playgroud)
在此示例中,段错误无关记忆.该invd指令是特权指令(仅当CPL为ring0时才可执行).因此,您无法从用户空间执行它.执行此指令时,会发生一般保护错误(又称#GP)异常.内核捕获异常并将kill信号发送到故障程序.