많은 oses (및 일부 부트 로더)에서 보았을 때 보호 모드에서 리얼 모드로 전환하기 전에 인터럽트가 모두 비활성화되었습니다 (cli
). 왜 우리가 그럴 필요가 있을까요?리얼 모드에서 보호 모드로 전환하기 전에 인터럽트를 비활성화해야하는 이유는 무엇입니까?
5
A
답변
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 및 트리플 오류가 발생합니다).
- PE 비트가 CR0에 설정됩니다.
- PIT 인터럽트가 발생하면 PIC (Programmable Interrupt Controller)가 핀 0 번에 신호를받습니다.
- PIC 다시 매핑이 설정되어 있지 않으므로 CPU에서 IRQ0을 트리거합니다.
- IRQ0 (= #DE)은 인터럽트 핸들러를 실행하려고 시도하지만 IDT의 한계는 0이므로 (IIRC) #GP (일반 보호 오류)가 생성됩니다.
- IDT의 제한은 0이므로 #DF가 생성됩니다.
- IDT의 제한은 0이므로 #TF가 생성됩니다.
- CPU가 중지되거나 재부팅됩니다.
관련 문제
- 1. 여기서 인터럽트를 비활성화해야하는 이유는 무엇입니까?
- 2. 리얼 모드로 들어가고 리얼 모드로 들어가기 (저수준 어셈블리 언어 프로그래밍)
- 3. 리얼 모드 애플리케이션을 보호 모드로 실행할 수없는 이유는 무엇입니까?
- 4. 보호 모드에서 BIOS 인터럽트를 호출 할 수없는 이유는 무엇입니까?
- 5. 중요한 섹션에 대한 인터럽트를 비활성화해야하는 이유
- 6. 보호 모드에서 디스크 또는 CD-ROM과 상호 작용하는 방법은 무엇입니까?
- 7. 각도기에서 애니메이션을 비활성화해야하는 이유는 무엇입니까?
- 8. Linux 2.6에서 보호 모드를 실제 모드로 전환하는 방법은 무엇입니까?
- 9. "STI", 보호 모드에서 CPU는
- 10. 리얼 모드에서 32 비트 레지스터/명령어를 사용할 수 있습니까?
- 11. dosbox에서 보호 모드로 전환하는 어셈블리 프로그램을 실행할 수 있습니까?
- 12. 보호 모드로 들어가도 프리 페치 큐를 무효화해야하는 이유는 무엇입니까?
- 13. 16 비트 리얼 모드에서 전체 화면을 지울 수 없습니다. 어셈블리
- 14. 부트 로더 - 프로세서를 보호 모드로 전환
- 15. 리눅스 커널을 종료하고 리얼 모드에서 재개 할 수 있습니까?
- 16. 리얼 모드에서 작동하는 리눅스 배포판이 있습니까?
- 17. Vista의 보호 모드로 파이팅
- 18. GRUB이 보호 모드로 전환합니까?
- 19. JQueryMobile - 전환하기 전에 페이지를 동적으로로드하십시오.
- 20. 어셈블러가 GDT로 보호 모드로 점프합니다.
- 21. 시스템 호출이 인터럽트를 사용하여 처리되는 이유는 무엇입니까?
- 22. 일시 정지 모드에서 장면 전환하기 Cocos2D
- 23. 사용자 모드에서 커널 모드로 전환하는 방법은 무엇입니까?
- 24. 도형을 렌더링하기 위해 문자열을 그린 후 GL_TEXTURE_2D를 비활성화해야하는 이유는 무엇입니까?
- 25. Laravel에서 CSRF 토큰을 비활성화하는 방법과이를 비활성화해야하는 이유는 무엇입니까?
- 26. 세그먼트 크기가 x86 리얼 모드
- 27. IE가 보호 모드에서 프로세스를 시작했는지 감지
- 28. 사용자 모드에서 커널 모드로 전환
- 29. 부두가 디버그 모드로 시작하려고하는 이유는 무엇입니까?
- 30. 보호 모드의 하드웨어 드라이버에 대해
대단한 답변을 보내 주셔서 감사합니다! –
IRQ0은 #DE를 트리거하지 않습니다. 기본적으로 PIC의 IRQ0은 BIOS에 의해 INT 8에 매핑되기 때문에 #DF가 트리거됩니다. – Ruslan
@Ruslan 그것은 완전히 임의적으로 들립니다. 모든 BIOS는 원하는 방식으로 다시 매핑 할 수 있습니다. #DF 나 #TF 이외의 어떤 벡터도 #DF를 방아쇠를 당기고 #DF는 #TF를 방아쇠를 당기고 #TF는 방금 7로 점프합니다. Btw. 어떤 BIOS가 특정 벡터로 다시 매핑합니까? 그것에 대한 참고 자료가 있습니까, 아니면 단지 실험에 의해 발견 된 가치입니까? – Griwes