2013-05-14 26 views

risposta

9

I BIOS utilizzano l'interrupt PIT (IRQ0) per tracciare il tempo. Non appena si accede alla modalità protetta, la gestione dell'interrupt della modalità reale non è più valida; La CPU in modalità protetta richiede la modalità protetta IDT (Tabella dei descrittori degli interrupt). Entrando in modalità protetta, il limite IDT in IDTR (IDT Register) è impostato su 0 (qualsiasi numero di interrupt fa sì che la CPU generi un'eccezione), quindi appena PIT (o qualsiasi altra cosa) genera un interrupt, la CPU genererà un'eccezione, che farà generare un'altra eccezione, attivando #DF (doppio errore) e, di conseguenza, #TF (triplo errore).

Inoltre, IRQ0 che si verifica in modalità protetta attiverà #DE (divide l'eccezione) ISR (routine di servizio di interrupt), poiché i vettori di interrupt da 0 a 31 sono riservati per le eccezioni in modalità protetta.

Quindi, la (più probabile, come potrebbero verificarsi anche altre interruzioni rispetto al PIT) l'ordine delle cose che accadono è come questo (nota: questo presuppone che l'interruzione PIT verrà innescata prima, ma, come ho detto prima, può Essenzialmente ogni interruzione, ognuno porterà a #DF e triplo errore):

  1. PE bit è impostato in CR0.
  2. Interruzione PIT, PIC (Programmable Interrupt Controller) riceve il segnale sul pin # 0.
  3. Il remapping del PIC non è impostato, quindi attiva IRQ0 sulla CPU.
  4. IRQ0 (= #DE) tenta di eseguire il gestore di interrupt, ma il limite di IDT è 0, quindi (IIRC) #GP (errore di protezione generale) viene generato.
  5. Il limite IDT è 0, quindi viene generato #DF.
  6. Il limite IDT è 0, quindi viene generato #TF.
  7. La CPU si arresta o si riavvia.
+0

Grazie per la grande risposta! –

+0

IRQ0 non attiverà #DE - attiverà #DF perché di default l'IRQ0 di PIC è mappato su INT 8 dal BIOS. – Ruslan

+0

@Ruslan Sembra completamente arbitrario. Qualsiasi BIOS può rimapparlo in qualsiasi modo desideri. Inoltre non è del tutto pertinente qui - qualsiasi vettore diverso da #DF o #TF attiverà #DF, #DF attiverà #TF e #TF, beh ... salterà direttamente a 7. Btw. quale BIOS rimappa a quel vettore specifico? Hai qualche riferimento per questo, o è solo un valore trovato dalla sperimentazione? – Griwes