2013-05-14 6 views

Répondre

9

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):

  1. Le bit PE est défini dans CR0.
  2. L'interruption PIT se produit, PIC (Programmable Interrupt Controller) reçoit le signal sur sa broche # 0.
  3. Le remappage PIC n'est pas défini, il déclenche donc IRQ0 sur la CPU.
  4. 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.
  5. La limite IDT est 0, donC#DF est généré.
  6. La limite IDT est 0, donC#TF est généré.
  7. La CPU s'arrête ou redémarre.
+0

Merci pour votre réponse! –

+0

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

+0

@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

Questions connexes