Tripla eccezione

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

Nell'architettura x86, una tripla eccezione è uno speciale tipo di eccezione generata dalla CPU quando si verifica un'eccezione mentre la CPU prova ad invocare il gestore delle doppie eccezioni, che di per sé gestisce le eccezioni generate nel tentativo di gestire un'eccezione normale.

I processori x86 a partire dall'80286 causeranno uno spegnimento del processore stesso quando viene generata una tripla eccezione. Tipicamente questo induce la scheda madre ad iniziare un ciclo di reset del processore che, a sua volta, riavvierà l'intero computer.[1][2]

Possibili cause di una tripla eccezione

[modifica | modifica wikitesto]

Le triple eccezioni in genere indicano un problema con il kernel del sistema operativo oppure con dei driver di un dispositivo. Nei sistemi moderni, una tripla eccezione è causata da un overflow oppure da un underflow di un buffer in un driver di un dispositivo che sovrascriverà la Tabella Descrittore Interrupt (IDT). Se la IDT è corrotta, all'invocazione del prossimo interrupt il processore non sarà in grado di chiamare la funzione associata all'interrupt oppure il gestore delle doppie eccezioni perché i descrittori nella IDT sono corrotti.

Macchine virtuali

[modifica | modifica wikitesto]

In QEMU, una tripla eccezione causa la generazione di un dump della macchina virtuale nella console, con il registro instruction pointer che punta all'istruzione che ha causato l'eccezione originale.

Quando si usa Intel VT-x, una tripla eccezione causa l'arresto forzato della macchina virtuale con codice d'arresto 2. Il motivo dell'arresto è salvato nel VMCS e potrebbe successivamente essere gestito dal software VMM.

Il processore Intel 80286 è stato il primo processore ad introdurre la ormai onnipresente protected mode. Tuttavia, il 286 non poteva tornare da solo nella modalità di compatibilità base 8086 (real mode) senza resettare il processore, il che può essere fatto solo con hardware esterno alla CPU. Sui pc IBM AT e compatibili, il metodo documentato di fare ciò era di usare una speciale funzione nel controller della tastiera Intel 8042, che imposterebbe il RESET pin del processore. Tuttavia, causare una tripla eccezione intenzionalmente si è rivelato essere molto più veloce e pulito, permettendo ai sistemi operativi multitasking di cambiare contesto ad alte velocità.[3]

Qualche kernel come Linux utilizza tuttora le triple eccezioni come ultima spiaggia nel processo di riavvio se le chiamate ACPI non hanno effetto. Ciò viene fatto impostando il registro IDT a 0 e poi invocando un interrupt.[1] Dal momento che la tabella ha adesso lunghezza 0, qualsiasi tentativo di accesso fallirà e il processore genererà una tripla eccezione.

  1. ^ a b Triple Faulting the CPU, su rcollins.org. URL consultato il 23 maggio 2022.
  2. ^ Reset, su rcollins.org.
  3. ^ (EN) kexugit, Faster Syscall Trap redux, su docs.microsoft.com. URL consultato il 23 maggio 2022.