[OS 개발 11] 인터럽트와 예외처리(1) IDT의 개념
1. IDT의 개념
이제 GDT를 끝내고 IDT 개념에 대해 다룰 순서입니다. IDT는 Inturrupt Descriptor Table의 약자로, 위키피디아는 다음과 같이 정의하고 있습니다.
인터럽트 벡터 테이블을 구현하기 위해 x86 아키텍처에서 사용되는 데이터 구조체이다. IDT는 프로세서가 인터럽트와 예외에 대한 정확한 반응을 결정하기 위해 사용된다. |
컴퓨터가 동작할 때, 많은 행위들이 일어나는데, 이 행위에 대해서 CPU에게 알려줘야 할 필요가 있습니다. 그래야 다른 행동과의 충돌을 피할 수 있을 것입니다. 이러한 차원에서 IDT의 개념이 생겼으며, GDT와 비슷하게 IDT 역시 인터럽트에 대한 정보가 저장된 디스크립터를 테이블 양식으로 저장하고 있습니다. 인터럽트 디스크립터의 세부 정보는 아래 그림과 같습니다.
인터럽트 디스크립터의 각 필드별 설명은 아래와 같습니다.
디스크립터 필드 |
설 명 | |
핸들러 오프셋 |
RAM에서의 물리주소 (상위 16비트와 하위 16비트로 나눠서 저장) | |
핸들러의 코드 세그먼트 셀렉터 |
핸들러가 저장된 코드 세그먼트의 셀렉터 값을 16비트 단위로 저장 | |
속성 |
P |
세그먼트의 메모리 존재 여부를 나타냄 (항상 1로 세팅) |
DPL |
핸들러가 실행될 특권 레벨 지정 (0~3 레벨) | |
D |
지정한 코드 세그먼트가 16비트인지 32비트인지 나타냄 |
*표 내용 참고 문헌: 김범준 저. 2006, 만들면서 배우는 OS 커널의 구조와 원리,Intel Architecture Software Developer’s Manual Volume 3: System Programming
이러한 형태의 디스크립터를 메모리상에 256개를 만들어 하나의 IDT 형태를 갖추도록 합니다(이보다 적거나 많아도 됨). 이렇게 갖추어진 IDT 역시 IDTR 레지스터에 그 정보를 저장하는 절차가 필요한데, 여기에서는 IDTR을 매개로 하여 다음과 같이 레지스터에 저장하게 됩니다.
GDT를 GDTR에 저장하는 절차와 매우 흡사합니다.
그러면, 전체적으로 인터럽트 발생부터 핸들러 호출까지 어떻게 진행될까요? 다음 그림을 참고하시기 바랍니다.
여기까지 IDT의 개념에 대해 살펴보았습니다. 전체적인 메커니즘은 위의 그림을 살펴보면 될 듯 합니다. 이제 우리가 하드웨어단에서 인터럽트를 걸어보기 위해 PIC에 대해서 알아야 하는데, 이는 다음 포스팅에서 살펴보도록 하겠습니다.
'OperatingSystem > Creating OS' 카테고리의 다른 글
[OS 개발 16] 태스크 스위칭과 보호 (1) (0) | 2016.02.16 |
---|---|
[OS 개발 15] 무한 재부팅에 대한 개인적 견해 (0) | 2016.02.16 |
[OS 개발 14] 인터럽트와 예외처리(4) 예외처리 구현하기 (0) | 2016.02.12 |
[OS 개발 13] 인터럽트와 예외처리(3) PIC와 인터럽트 구현하기 (0) | 2016.02.12 |
[OS 개발 12] 인터럽트와 예외처리(2) PIC와 예외처리 (0) | 2016.02.12 |
[OS 개발 10] 32비트 커널 로더(4) - 커널 구현과 분석 (3) | 2016.02.10 |
[OS 개발 9] 32비트 커널 로더(3) - GDT의 개념과 적용 (0) | 2016.02.06 |
[OS 개발 8] 32비트 커널 로더(2) - 리얼 모드와 보호 모드 (0) | 2016.02.05 |
[OS 개발 7] 32비트 커널 로더(1) - 커널과 디스크 구조 (0) | 2016.02.05 |
[OS 개발 6] 레지스터 세그먼트와 오프셋 개념 (0) | 2016.02.03 |