每当我们遇到分段错误时是否会发生页面错误?

Var*_*run 1 operating-system memory-management

每当发生分段错误时,我们总是会出现页面错误吗?

任何有Linux内核代码经验的人都可以在这里请求代码吗?

我已经看到:分段错误与页面错误

Ben*_*oit 7

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信号发送到故障程序.