J'ai vu dans beaucoup de nombreux oses (et certains bootloader), ils désactivent tous l'interruption (cli
) avant de passer en mode protégé du mode réel. Pourquoi avons-nous besoin de faire ça?Pourquoi les interruptions doivent-elles être désactivées avant de passer en mode protégé depuis le mode réel?
Répondre
Les BIOS utilisent l'interruption PIT (IRQ0) pour suivre l'heure. Dès que vous entrez en mode protégé, la gestion des interruptions en mode réel n'est plus valide; La CPU en mode protégé nécessite un mode protégé IDT (Interrupt Descriptor Table). En entrant en mode protégé, la limite IDT dans IDTR (registre IDT) est définie sur 0 (tout numéro d'interruption génère une exception pour le processeur), donc dès que PIT (ou toute autre chose) génère une interruption, le CPU génère une exception, fera une autre exception générée, en déclenchant #DF (double faute) et, par conséquent, #TF (triple faute). De même, l'IRQ0 passant en mode protégé déclenchera l'ISR (exception de division) ISR (routine de service d'interruption), les vecteurs d'interruption de 0 à 31 étant réservés aux exceptions en mode protégé. Donc, le plus probable, comme d'autres interruptions que PIT pourrait arriver, c'est que l'ordre des choses qui se passe est comme ceci (note: cela suppose que l'interruption PIT sera déclenchée en premier, mais, comme je l'ai dit précédemment, elle peut essentiellement être une interruption, chacun conduira à #DF et triple défaut):
- Le bit PE est défini dans CR0.
- L'interruption PIT se produit, PIC (Programmable Interrupt Controller) reçoit le signal sur sa broche # 0.
- Le remappage PIC n'est pas défini, il déclenche donc IRQ0 sur la CPU.
- IRQ0 (= #DE) tente d'exécuter le gestionnaire d'interruption, mais la limite IDT est 0, donc (IIRC) #GP (erreur de protection générale) est générée.
- La limite IDT est 0, donC#DF est généré.
- La limite IDT est 0, donC#TF est généré.
- La CPU s'arrête ou redémarre.
- 1. Mode réel GDB en mode protégé, à la volée désassembler
- 2. NASM dessin en mode protégé
- 3. Pourquoi les interruptions sont globalement désactivées avant la connexion ISR?
- 4. x86 Passage en mode protégé du mode réel CPL (niveau de privilège actuel)
- 5. Passage du mode réel au mode protégé dans le noyau Linux
- 6. Linux x86: Où est mappé l'espace adresse du mode réel en mode noyau protégé?
- 7. Entrée en mode protégé 32 bits
- 8. Grub et passer en mode réel (programmation en langage assembleur de bas niveau)
- 9. Interruptions de LPT (mode bidirectionnel)
- 10. différence entre le mode réel et le mode protégé sur l'architecture x64
- 11. Windows protégé mode - mémoire
- 12. Registres 64 bits en mode protégé x86
- 13. Taille de segment en mode réel x86
- 14. Redis fonctionne en mode protégé
- 15. "STI", en mode protégé, la CPU redémarre
- 16. IE mode protégé problème?
- 17. Quelle est la différence entre le mode utilisateur/noyau et le mode protégé/réel? Sont-ils les mêmes?
- 18. Trouver le temps total passé par le CPU en mode utilisateur, mode sys et mode réel
- 19. Entrée en mode protégé: Triple-Fault
- 20. X86: mode protégé, GDT, IDT
- 21. Passage en mode protégé du segment chargé
- 22. Structure de pile pendant l'initialisation en mode protégé
- 23. Comment afficher les images en mode réel?
- 24. Loin juridique d'appel en mode réel x86
- 25. C++ - Mode protégé 32 bits
- 26. bios et mode réel
- 27. 80386 simulateur en mode réel
- 28. passer le mode de calcul cuda en mode par défaut
- 29. GRUB passe-t-il en mode protégé?
- 30. IE.navigate2 échoue avec le mode protégé hors
Merci pour votre réponse! –
IRQ0 ne déclenchera pas #DE - il déclenchera #DF parce que par défaut PIC IRQ0 est mappé à INT 8 par le BIOS. – Ruslan
@Ruslan Cela semble complètement arbitraire. Tout BIOS peut le remapper comme il le veut. En outre, ce n'est pas tout à fait pertinent ici - tout vecteur autre que #DF ou #TF va déclencher #DF, #DF va déclencher #TF, et #TF, bien ... passera juste à 7. Btw. ce que le BIOS remappe à ce vecteur spécifique? Avez-vous des références pour cela, ou est-ce juste une valeur trouvée par l'expérimentation? – Griwes