一般保护错误

科技工作者之家 2020-11-17

一般保护错误是在PC机用户程序企图访问不可访问地址时出现的错误。

简介一般保护错误(英语:General protection fault,缩写:GPF)是在英特尔x86和AMDx86-64架构和其它架构中的一种错误(或者一种中断),指正在运行的程序(内核或用户态程序)违反处理器架构中的保护措施的情况。此机制最初在1986年英特尔80386处理器的程序员参考手册第9.8.13节中描述。一般保护错误通过中断(向量值13)实现。

若处理器侦测到保护违例,会停止当前代码的执行,并发出GPF中断。大多数情形下,操作系统会简单地关闭触发GPF的进程,告知用户,并继续执行其它程序。但如果操作系统没能捕获这一错误(如在操作系统从GPF中断处理例程中返回前发生了另一次违例),处理器会发出双重错误(中断向量值8,一种常见的蓝屏情形)。如果再次发生了违例,则处理器会关闭(参见三重错误),其后只会响应复位(即按下机器的复位按钮)、启动(重新启动系统)或不可屏蔽中断(除非其之前在处理此类中断时出错)。1

内容操作系统一般将内存划分为不同的区域,有的区域只供操作系统使用,而有的系统是供应用程序使用的。当应用程序企图在分配给它的内存区域进行访问操作时,操作系统将中止这个程序的运行,用户得到的是一行错误码,告诉用户程序出现了一般保护错,用户只能再次启动程序,希望这次程序在执行时会一切正常,随此以外没有什么办法可想。如果允许应用程序在分配给它的区域以外进行读写操作,就会使其它程序(或操作系统)的数据被破坏,如果破坏了操作系统的数据,系统就会崩溃,这样损失就太大了,倒不如关闭一个程序而保护整个系统的安全。

在64位模式,CR0和CR4的高32位被保留并且必须被写0。对高32位的任何一位进行写的结果是引起一般性保护异常,#GP(0)。

一般保护错误出现时可采取的办法:1、拔下多余的内存只留下兼容性最强和质量最好的一根内存。2、拔下并仔细清理擦拭内存的金手指。3、不断重启电脑直到可以正常使用。1

操作系统行为在一些版本的Microsoft Windows中,一般保护错误确实会被报告为“一般保护错误”。
但在大部分版本中,Windows会给出如下错误:

Unrecoverable Application Error.(Windows 3.0)

[程序] has caused a General Protection Fault in module [模块] at [内存地址].(Windows 3.1和3.1x)

该程序执行了非法操作,即将关闭。(Windows 9x&Windows NT 4.0)

[程序]产生了错误,会被Windows关闭。(Windows 2000)

[程序] has caused an error in [模块]. [程序] will now close.(Windows Me)

[程序/描述]遇到问题需要关闭。我们对此引起的不便表示抱歉。(Windows XP)

[程序/描述]已停止工作。(Windows Vista和Windows 7)

在类Unix的系统中,此错误会被分别报告(比如Linux下的段错误等)1。

本词条内容贡献者为:

李航 - 副教授 - 西南大学

科技工作者之家

科技工作者之家APP是专注科技人才,知识分享与人才交流的服务平台。