2011-07-25 3 views
3

보호 모드에서 실행되는 작은 OS를 작성하고 있습니다. 내가 커스텀 인터럽트 디스크립터 테이블을로드하고 싶은 시점에 이르렀는데 어디서부터 시작해야할지 모른다. 내가 the OS Dev wiki에 몇 가지 물건을 읽었지만, 내가 대답 할 필요가있는 몇 가지 질문이있다.사용자 지정 인터럽트 설명자 표 혼란

OS Dev wiki에서 그 말은 the first 32 (0-31) interrupts are reserved and used by the CPU, as exceptions, so don't use those for APIs or IRQs.입니다. 문제는 사용자 정의 인터럽트 테이블을로드하는 경우 모든 인터럽트에 대한 항목을 제공하지 않아도된다는 것입니다.

위키에서는 BIOS가 IRQ0-7을 인터럽트 8-15로 매핑한다는 것을 알려줍니다. 이 경우 IRQ 인터럽트가 예약 된 인터럽트와 충돌하지 않습니까?

내가 얻지 못하는 것이 있습니까? 별도의 테이블이나 다른 것으로 0-31의 인터럽트가 있습니까? 누군가가 올바른 방향으로 나를 가르키고 명확하게 정리하십시오.

답변

2

don't use those [interrupts 0-31] for APIs or IRQs이라고 말하면 예약 된 예외 이외의 다른 기능에는 사용하지 말아야한다는 의미입니다. 예외가 발생할 때 예외를 처리 할 수 ​​있도록 이러한 인터럽트에 대한 핸들러를 정의해야합니다. 인터럽트 번호 및 설명이있는 예외 목록은 OSDev's exception page을 참조하십시오.

프로세서가 시작되면 리얼 모드입니다. 이 모드에서는 예외가 거의 없으므로이를 처리하기 위해 예약 된 인터럽트가 더 적습니다. 프로세서가 리얼 모드이면 IRQ에 인터럽트 8-15를 사용하는 것이 안전합니다. 보호 모드에서 인터럽트를 활성화하기 전에 IRQ를 다른 인터럽트로 다시 매핑해야합니다. 이를 수행하는 방법에 대한 정보는 Initialization sectionOSDev's PIC (Programmable Interrupt Controller) 페이지를 참조하십시오.

0

예외로 CPU에 의해 처음 32 개의 (0-31) 인터럽트가 예약되어 사용되므로 API 나 IRQ에는 사용하지 마십시오.

이것은 인터럽트를 방출 할 수있는 WHO에 관한 것입니다. 0-31은 CPU 자체의 이벤트 (내부, 예를 들어 페이지 오류, 0으로 나누기) 및 기타 외부 이벤트 (예 : 키보드 누름, pci 인터럽트 등의 하드웨어 초기화)에 대한 것입니다. 이것은 IDT에 관한 것이 아닙니다. 테이블에 모든 인터럽트를 제공해야합니다.