2013-05-14 3 views

답변

9

BIOS는 PIT 인터럽트 (IRQ0)를 사용하여 시간을 추적합니다. 보호 모드로 들어가 자마자 리얼 모드 인터럽트 처리가 더 이상 유효하지 않습니다. 보호 모드의 CPU에는 보호 모드 IDT (Interrupt Descriptor Table)가 필요합니다. 보호 모드로 들어가면 IDTR (IDT Register)의 IDT 제한이 0으로 설정됩니다 (모든 인터럽트 번호로 인해 CPU에서 예외가 생성됩니다). PIT (또는 다른 것)가 인터럽트를 생성하면 CPU가 예외를 생성합니다. #DF (이중 오류) 및 결과적으로 #TF (3 중 오류)를 트리거하여 또 다른 예외가 생성됩니다.

또한 보호 모드에서 발생하는 IRQ0은 #DE (나누기 예외) ISR (인터럽트 서비스 루틴)을 트리거합니다. 0에서 31까지의 인터럽트 벡터는 보호 모드의 예외로 예약되어 있습니다.

따라서 PIT와 다른 인터럽트도 발생할 수 있습니다. 발생하는 순서는 다음과 같습니다 (참고 : PIT 인터럽트가 먼저 발생한다고 가정하지만 이전에 말한 것처럼 본질적으로 모든 인터럽트가 발생하면 각각 #DF 및 트리플 오류가 발생합니다).

  1. PE 비트가 CR0에 설정됩니다.
  2. PIT 인터럽트가 발생하면 PIC (Programmable Interrupt Controller)가 핀 0 번에 신호를받습니다.
  3. PIC 다시 매핑이 설정되어 있지 않으므로 CPU에서 IRQ0을 트리거합니다.
  4. IRQ0 (= #DE)은 인터럽트 핸들러를 실행하려고 시도하지만 IDT의 한계는 0이므로 (IIRC) #GP (일반 보호 오류)가 생성됩니다.
  5. IDT의 제한은 0이므로 #DF가 생성됩니다.
  6. IDT의 제한은 0이므로 #TF가 생성됩니다.
  7. CPU가 중지되거나 재부팅됩니다.
+0

대단한 답변을 보내 주셔서 감사합니다! –

+0

IRQ0은 #DE를 트리거하지 않습니다. 기본적으로 PIC의 IRQ0은 BIOS에 의해 INT 8에 매핑되기 때문에 #DF가 트리거됩니다. – Ruslan

+0

@Ruslan 그것은 완전히 임의적으로 들립니다. 모든 BIOS는 원하는 방식으로 다시 매핑 할 수 있습니다. #DF 나 #TF 이외의 어떤 벡터도 #DF를 방아쇠를 당기고 #DF는 #TF를 방아쇠를 당기고 #TF는 방금 7로 점프합니다. Btw. 어떤 BIOS가 특정 벡터로 다시 매핑합니까? 그것에 대한 참고 자료가 있습니까, 아니면 단지 실험에 의해 발견 된 가치입니까? – Griwes

관련 문제