Perché meno IRQL a 64 bit, anche se un APIC ha più linee di interruzione?

7

Mentre i computer x86 passavano da 32-bit a 64-bit, si spostavano anche dall'uso di controllori di interrupt programmabili 8259 con 8 linee di interrupt. (O due PIC multiplex per un totale di 15 linee di interrupt.) Quindi, se si installasse Windows a 32 bit per un sistema operativo, Windows implementerebbe 32 IRQL software (Livelli di richiesta di interrupt) con IRQL da 3 a 26 (o così) essendo riservato per i dispositivi.

Poi è arrivata la piattaforma x64. Avete bisogno di una macchina con un APIC, che ha 256 linee di interruzione, per installare Windows a 64 bit. Tuttavia, Windows a 64 bit implementa solo 16 IRQL.

Quindi la mia domanda è, qualcuno sa perché Windows a 64 bit implementerebbe meno IRQL rispetto alla sua controparte a 32 bit anche se ha molte più linee di interrupt hardware a sua disposizione?

    
posta Ryan Ries 07.08.2012 - 18:09
fonte

3 risposte

1

Perché con un sistema di tipo DOS hai ampiamente bisogno di un IRQ per ogni evento e quindi molti livelli di IRQ per consentire agli eventi di mascherare semplicemente altri eventi. Con un vero sistema operativo hai praticamente bisogno di un singolo evento e lascia che il kernel calcoli tutto il resto (in realtà è conveniente avere un paio di livelli per NMI e in tempo reale).

Quindi suppongo che con 64bit e sapendo che non sei compatibile con le versioni precedenti che supportano alcune app DOS su un 386 hanno colto l'opportunità per semplificare.

    
risposta data 07.08.2012 - 19:47
fonte
0

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
fonte
-2

È un po 'più complicato, ho paura. Non ho ancora capito, ma dirò quello che so. Windows mantiene una nota dell'IRQL che usa per OGNI CPU logica in quello che chiama un blocco di controllo del processore che è solo una struttura di dati, non un qualsiasi tipo di registro. C'è anche una tabella descrittore di interrupt con 256 voci che puntano eventualmente ad interrompere le routine di servizio. Dico alla fine perché prima passiamo attraverso un oggetto di interrupt che mantiene una nota degli interrupt assegnati all'IRQL e anche l'interrupt del dispatcher. CPU X86 a 32 bit non avevano alcuna nozione di IRQL in quanto tale, ma i progettisti di Windows hanno deciso che ne avrebbero 32. L'IRQL di un dispositivo è stato deciso prendendo il suo numero di vettore e dividendolo per 16. Ricorda che il numero di vettore non è lo stesso del numero di pin IRQ (qualsiasi pin può avere qualsiasi vettore tra 32 e 255 perché i primi 32 vettori sono riservati per eccezioni). Per farlo funzionare, Windows deve programmare il chip PIC per mascherare i pin di interrupt che si trovano al di sotto del livello che ha registrato per la CPU. Questo è cambiato con X64 perché alla CPU è stato dato un registro specifico del modello che ha effettivamente impostato la CPU su un IRQL tra 0 e 15. I progettisti di Windows hanno fatto uso di questo per semplificare le cose.

    
risposta data 06.07.2017 - 00:45
fonte

Leggi altre domande sui tag