Memory management 当我们出现分段错误时,是否会出现页面错误?
每当出现分段错误时,我们是否总是有页面错误 任何有linux内核代码经验的人都可以在这里指出代码吗Memory management 当我们出现分段错误时,是否会出现页面错误?,memory-management,operating-system,Memory Management,Operating System,每当出现分段错误时,我们是否总是有页面错误 任何有linux内核代码经验的人都可以在这里指出代码吗 我已经看到:在以下情况下也会出现分段错误: a) 错误的程序/命令,只能通过应用补丁来修复 b) 在C编程中,当您试图访问数组末尾以外的数组时,也会出现此错误 c) 在chrooted监狱中,当关键共享lib、配置文件或/dev/entry丢失时,可能会发生这种情况 d) 有时,硬件或故障内存或驱动程序也会造成问题 e) 为所有计算机设备维护建议的环境(过热也会产生此问题) 出现页面错误的原因:
我已经看到:在以下情况下也会出现分段错误: a) 错误的程序/命令,只能通过应用补丁来修复 b) 在C编程中,当您试图访问数组末尾以外的数组时,也会出现此错误 c) 在chrooted监狱中,当关键共享lib、配置文件或/dev/entry丢失时,可能会发生这种情况 d) 有时,硬件或故障内存或驱动程序也会造成问题 e) 为所有计算机设备维护建议的环境(过热也会产生此问题) 出现页面错误的原因: a) 正在尝试访问虚拟内存地址 b) 指令操作数/指令地址 c) 读取数据/写入数据,或获取指令 d) 也许佩奇“不在场” e) 可能页面“不可读” f) 可能页面“不可写”
g) 可能页面“不可见”在以下情况下也会出现分段错误: a) 错误的程序/命令,只能通过应用补丁来修复 b) 在C编程中,当您试图访问数组末尾以外的数组时,也会出现此错误 c) 在chrooted监狱中,当关键共享lib、配置文件或/dev/entry丢失时,可能会发生这种情况 d) 有时,硬件或故障内存或驱动程序也会造成问题 e) 为所有计算机设备维护建议的环境(过热也会产生此问题) 出现页面错误的原因: a) 正在尝试访问虚拟内存地址 b) 指令操作数/指令地址 c) 读取数据/写入数据,或获取指令 d) 也许佩奇“不在场” e) 可能页面“不可读” f) 可能页面“不可写” g) 可能页面“不可见”Pagefault(也称为#PF)是导致segfault的常见原因(在不存在的页面上寻址某些数据,在没有相应权限级别的情况下尝试从受保护的页面读取或写入数据,从不执行页面获取代码,…) 但是,由于其他一些罕见的原因,可能会发生断层。例如,如果您尝试在没有请求的当前特权级别(CPL)的情况下执行特权指令。检查此示例:
% cat segfault.c && gcc segfault.c -o segfault
int main(void)
{
__asm__("invd");
return 0;
}
% ./segfault
Segmentation fault
在此示例中,segfault与内存无关。invd
指令是特权指令(仅当CPL为0时可执行)。因此,您无法从用户空间执行它。执行此指令时,会发生一般保护故障(aka#GP)异常。内核捕获异常并向故障程序发送终止信号。Pagefault(也称为#PF)是导致segfault的常见原因(在不存在的页面上寻址某些数据,尝试在没有相应权限级别的情况下从受保护页面读取或写入数据,从不执行页面获取代码,…)
但是,由于其他一些罕见的原因,可能会发生断层。例如,如果您尝试在没有请求的当前特权级别(CPL)的情况下执行特权指令。检查此示例:
% cat segfault.c && gcc segfault.c -o segfault
int main(void)
{
__asm__("invd");
return 0;
}
% ./segfault
Segmentation fault
在此示例中,segfault与内存无关。
invd
指令是特权指令(仅当CPL为0时可执行)。因此,您无法从用户空间执行它。执行此指令时,会发生一般保护故障(aka#GP)异常。内核捕获异常并将kill信号发送到故障程序。Thnx Benoit,这是我期待的精确澄清。Thnx Benoit,这是我期待的精确澄清。酷,这两个都是很好的详尽列表!酷,这是一个很好的详尽的清单!