본문 바로가기

Kernel

Interrupt 목록

Interrupt 목록

Fault - 발생 시 Stack에 저장된 EIP값이 Fault를 발생시킨 명령어주소이고, 예외핸들러를 마치면 복귀

Trap - 발생 시 Stack에 저장된 EIP값이 Trap을 발생시킨 명령어 다음 주소이고, ,Trap을 처리한 후 명령어는 트랩 발생 다음의 Address

Abort - 심각한 에러가 생겼을 때 발생, 제어 유닛에서 어려운 상황에 빠져있어 EIP레지스터에 제대로 된 값이 저장되지 않을 수 있다 (하드웨어 고장 or 잘못된 시스템 테이블)

Interrupt

  • 0번 : #DE Divide Error

0 나누기 예외 / 프로그램이 0으로 나누려고 할 때 발생

  • 1번 : #DB Debug Exception +

디버그 예외 / Eflg의 T플래그를 설정했을 때나 디버그 레지스터의 범위 안에 들어갔을 때

  • 2번 : NMI Interrupt

NMI 인터럽트 / 마스킹 불가능한 인터럽트용으로 예약

  • 3번 : #BP Breakpoint Exception

브레이크포인트 예외 / 디버거에서 많이 사용되며 INT 3 명령을 만났을 때

  • 4번 : #OF Overflow Exception

오버플로우 예외 / Into명령을 실행 시 Eflags의 OF (overflow)플래그를 설정한 경우

  • 5번 : #BR Bound Range Exceeded Exception

bound 범위 초과 예외 / Bound명령 즉 주소범위검사 실행 시 지정한 피연산자가 유효주소범위를 벗어나 있을 경우

  • 6번 : #UD Invalid Opcode Exception

무효 OPCODE 예외 / CPU 실행 유닛이 잘못된 연산코드를 만났을 때

  • 7번 : #NM Device Not Available Exception

디바이스 사용불가 예외 / CR0의 TS플래그를 설정한 상태에서 escape 명령어나 MMX명령어를 실행한 경우

  • 8번 : #DF Double Fault Exception

더블 폴트 예외 / CPU가 예외를 처리하는 과정에서 예외가 또 발생했을 경우 보통 두 개 연속 처리가 가능하지만 불가능할 때 발생

  • 9번 : Coprocessor Segment Overrun

Coprocessor 세그먼트 오버런 예외 / Coprocessor에 문제가 발생했을 경우

Coprocessor는 보조 프로세서로 부동소수점 처리를 하는 수학보조프로세서 등을 가리킨다

  • 10번 : #TS Invalid TSS Exception

무효 TSS예외 / CPU가 잘못된 태스크 상태세그먼트인 TSS를 포함한 프로세스로 콘텍스트를 전환한 경우 발생 (TSS의 Limit이 0x67이하일 경우)

  • 11번 : #NP Segment Not Present

세그먼트 부재 예외 / 메모리에 존재하지 않는 세그먼트를 참조한 경우

  • 12번 : #SS Stack Fault Exception

스택 폴트 예외 / 명령어가 스택 세그먼트의 제한을 넘어서거나 SS가 가리키는 세그먼트가 메모리에 존재하지 않는 경우에 발생

  • 13번 : #GP General Protection Exception

일반 보호 예외 / 인텔의 보호모드에 있는 보호규약 중 하나를 위반한 경우

Ex) SS가 R/W 상태가 아닐 때 발생하기도 한다.

Ex2) Conforming (대체할 한국어 단어를 찾지 못하겠다.) Flag 는 해당 세그먼트가 낮은 권한을 가진 코드 세그먼트로부터 실행이 전환될 수 있는지를 나타낸다. 만약 실행이 전환될 세그먼트가(대상) Conforming Segment 라면 더 높은 권한을 가졌더라도 Current Previlege Level 에서 실행 가능하며, 대상 세그먼트가 Non - Conforming Segment 라면 Call Gate 나 Task Gate 를 이용하지 않는 한 #GP 를 발생한다.

Ex2-1)

해석하자면, " Call 이나 Jmp 를 통해서 낮은 권한의 (산술적으로 높은) 코드 세그먼트로의 접근은 대상 세그먼트가 Conforming 이건, Non - Conforming 이건 #GP 를 발생시킨다. "

모 든 데이터 세그먼트는 Non - Conforming Segment 다. 즉, 낮은 권한의 프로시저나 프로그램은 자신들이 가진 데이터 세그먼트보다 높은 권한을 가진 데이터 세그먼트에 접근할 수 없다. 하지만, 코드 세그먼트와는 다르게 데이터 세그먼트는 높은 권한으로부터 낮은 권한을 가진 세그먼트로의 접근이 가능하다.

  • 14번 : #PF Page Fault Exception

페이지 폴트 예외 / 주소로 참조한 페이지가 메모리에 존재하지 않거나 해당 페이지 테이블 엔트리가 비어있거나 페이징보호매커니즘을 위반한 경우에 발생

  • 16번 : #MF x87 FPU Floating Point Error

x87 FPU 부동소수점 에러 / CPU에 통합되어 있는 부동 소수 유닛에서 숫자 오버플로우나 0으로 나누는 등의 예외가 발생한 경우

부동소수점이란 실수를 표현할 때 소수점의 위치를 고정하지 않고 그 위치를 따로 나타내어 적는 것

  • 17번 : #AC Alignment Check Exception

얼라인먼트 체크 예외 / Long데이터 타입의 정수의 주소가 4의 배수가 아닌 경우처럼 피연산자의 주소가 올바로 정렬되지 않는 경우

단 이 예외는 플래그와 컨트롤 레지스터의 관련비트를 설정해 놓아야만 발생이 가능

  • 18번 : #MC Machine Check Exception

머신 체크 예외 / 코드와 소스가 해당 Machine Model에 맞지 않는 경우 발생

  • 19번 : #XM SIMD Floating Point Exception

SIMD 부동소수점 예외 / SSE와 SSE2 Floating-point instruction에 의해 발생

  • 20~31번 : 인텔 예약
  • 32~255번 : 유저 정의 인터럽트