일반 보호 실패

위키백과, 우리 모두의 백과사전.

일반 보호 실패 또는 일반 보호 오류(General protection fault, GPF)는 x86 ISA(명령어 집합 아키텍처)에서 커널에서 실행 중인 일부 코드로 인해 발생한 액세스 위반에 대한 응답으로 ISA 정의 보호 메커니즘에 의해 시작된 오류(인터럽트 유형)이다. 이 메커니즘은 1983년에 출시된 인텔 80286 CPU용 인텔 설명서 및 데이터시트에 처음 설명되어 있다. 이는 1986년 인텔 80386 프로그래머 참조 매뉴얼의 섹션 9.8.13에도 설명되어 있다. 일반 보호 오류는 인터럽트(벡터 번호 13(0Dh))로 구현된다. 일부 운영체제는 메모리 보호와 관련이 없음에도 불구하고 불법 명령 코드 예외와 같이 액세스 위반과 관련되지 않은 일부 예외를 일반 보호 오류로 분류할 수도 있다. CPU가 보호 위반을 감지하면 코드 실행을 중지하고 GPF 인터럽트를 보낸다. 대부분의 경우 운영 체제는 실패한 프로세스를 실행 대기열에서 제거하고 사용자에게 신호를 보낸 후 다른 프로세스를 계속 실행한다. 그러나 운영 체제가 일반 보호 오류를 포착하지 못하는 경우, 즉 운영 체제가 이전 GPF 인터럽트에서 복귀하기 전에 또 다른 보호 위반이 발생하면 CPU는 이중 오류 신호를 보내 운영 체제를 중지한다. 또 다른 오류(삼중 오류)가 발생하면 CPU는 복구할 수 없다. 80286부터 CPU는 하드웨어 재설정을 통해서만 종료할 수 있는 "Shutdown"이라는 특수 정지 상태에 들어간다. 80286을 포함하는 최초의 PC 호환 시스템인 IBM PC/AT에는 종료 상태를 감지하고 종료 상태가 발생하면 자동으로 CPU를 재설정하는 하드웨어가 있다. PC AT의 모든 자손은 동일한 작업을 수행하므로 PC에서 삼중 오류가 발생하면 즉시 시스템 재설정이 발생한다.