Voglio solo aggiungere un paio di punti sugli interrupt in un sistema moderno. Cercherò di rendere più chiaro il layout.
La tabella dei descrittori degli interrupt (IDT) è la sostituzione in modalità protetta per la tabella vettoriale di interrupt (IVT). L'indirizzo di base per l'IDT è memorizzato in un registro della CPU e può essere posizionato quasi ovunque nella memoria.
Puoi visualizzare il contenuto dell'IDT se hai il debugger del kernel usando il! comando idt. Oltre ai previsti 32 eccezzionali gestori di eccezioni e alcuni dispositivi legacy, non troverete molto nel moderno IDT. Proverò a spiegare perché dopo.
Ogni interrupt fa sì che la CPU entri in modalità kernel in modo che il codice della modalità kernel possa gestirli.
Lo zero di livello di interruzione della richiesta (IRQL) non è realmente un livello dato che tutti gli interrupt sono consentiti. Il codice della modalità utente di solito viene eseguito su zero IRQL.
Il kernel ei driver utilizzano interrupt software per il rilascio di chiamate a procedure differite (DPC), thread di shuleule e chiamate di procedure asincrone (APC). La distribuzione DPC / thread viene eseguita su IRQL due e APC al livello uno.
Il kernel e i driver cercano sempre di mantenere l'IRQL il più basso possibile. In questi giorni le routine di servizio di interruzione del driver spesso fanno poco più che acknolage l'interrupt prima di chiamare un DPC per eseguire qualsiasi trasferimento di dati. In questo modo l'IRQL può essere rimosso dal dispositivo il più velocemente possibile.
Scusa ho detto che avrei spiegato la mancanza di voci IDT ma devo uscire. Le interruzioni segnalate dal messaggio, l'APIC locale MSI-X e x2 sono la causa. Se qualcuno è interessato, per favore chiedi
risposta data
06.07.2017 - 10:30