2010-12-29 14 views
5

(NB: Non si tratta di interrompere le discussioni Java/.NET, si tratta di interruzioni in modalità kernel.)Che cos'è il thread di interrupt?

Ciao,

Wikipedia ha questo da dire su interrupt Discussioni in questo articolo Interrupt handler:

discussioni interrupt

diversi sistemi operativi - Solaris, NetBSD, Mac OS X, WinCE e FreeBSD, per esempio - usa lo schema diverso noto come thread di interrupt. Un gestore di interruzioni fornito dal driver di dispositivo è solo un thread ad alta priorità che viene eseguito con gli interrupt abilitati e, cosa più importante, può blocco su mutex. Questo notevolmente semplifica il blocco nel kernel. Inoltre, il thread di interruzione potrebbe essere preimpostato dal thread di interruzione prioritaria .

Qual è questa tecnica di thread di interrupt che FreeBSD (tra gli altri) utilizza apparentemente? E dove posso saperne di più?

Grazie in anticipo. :)

risposta

1

Ci sono altre informazioni tecniche in ithread(9) di FreeBSD.

+0

Ciao. Sembra che questo sia quello che sto chiedendo, potresti approfondire un po 'come funziona e come è diverso da altri approcci all'esecuzione di interrupt differiti? –

+0

Non conosco i dettagli, mi dispiace. http://www.freebsd.org/doc/en/books/arch-handbook/smp-design.html sembra avere ancora qualche informazione in più. – BCran

2

L'hardware informa i sistemi operativi di alcuni eventi con interruzioni. Possono essere sollevati quando si verifica un errore o quando alcune periferiche hanno nuovi dati disponibili (l'utente ha premuto un tasto, un pacchetto è arrivato sulla rete, un timer scaduto, ...). Queste interruzioni devono essere gestite rapidamente dal sistema (in modo che appaia reattivo).

Sono gestiti dal kernel. Generalmente, quando arriva una di queste interruzioni, il codice attualmente in esecuzione viene arrestato e viene chiamata una funzione del kernel. Le interruzioni devono essere applicate rapidamente per avere un sistema reattivo, quindi non devono bloccare il kernel in attesa di qualche risorsa, o fare qualcosa del genere. La soluzione classica è quella di avere una stupida funzione di interruzione che annota solo il numero dell'interruzione e del ritorno, e quindi nel loop principale del kernel, per verificare se si è verificata un'interruzione e per chiamare il vero gestore.

Poiché tali interruzioni possono essere mascherate (tranne che per l'interruzione non mascherabile - NMI), il kernel può generare alcuni thread in modalità kernel, e solo farli smascherare l'interruzione e gestirli. Poiché questi thread sono indipendenti dal thread del kernel principale, possono bloccarsi, a condizione che ci siano abbastanza thread per gestire le interruzioni che possono arrivare mentre il thread è bloccato.

+0

Ciao. Grazie per la risposta. Capisco la necessità di un'esecuzione posticipata basata su interrupt, ciò a cui sono specificamente interessato è questa tecnica di fare ciò, che si chiama Interrupt Threads. –