2010-08-06 14 views
9

Quando si immette un gestore di interi comandi, prima "disabilita gli interrupt" su quella cpu (usando qualcosa come l'istruzione cli su x86). Durante il tempo in cui gli interrupt sono disabilitati, supponiamo che l'utente abbia premuto la lettera "a" sulla tastiera che normalmente causerebbe un'interruzione. Ma dal momento che gli interrupt sono disabilitati, questo significa che:cosa si intende disabilitando gli interrupt?

  1. il gestore di interrupt per 'a' non sarebbe mai essere invocato, in quanto gli interrupt sono disabilitati nella sezione critica o
  2. l'interrupt sarà gestito dal sistema operativo, ma in ritardo, fino a quando gli interrupt sono di nuovo abilitati. In particolare, l'utente deve premere di nuovo 'a', se la prima volta che ha premuto 'a' era in un momento in cui gli interrupt erano disabilitati?

risposta

5

Spesso un interrupt viene "messo in coda" dall'hardware.

[Un interrupt è spesso solo un gate logico che può rimanere attaccato; una volta che è acceso, esso rimane acceso per un po '.]

Se l'utente ha raggiunto 'un' una volta soltanto durante l'intervallo quando gli interrupt sono disabilitati, sarebbe registrare come un interrupt quando sono stati riattivati.

Se l'utente in qualche modo è riuscito a premere "a" due volte durante l'intervallo quando gli interrupt sono stati disabilitati, uno si registra come interrupt quando abilitato. Se fosse il primo o il secondo dipende dalla configurazione esatta del gate logico.

+1

in modo che significa che, se fossi in grado di digitare le lettere di due tastiera più veloce del tempo della CPU necessario per gestire l'interrupt, si sarebbe perduto? scusa per rendere ancora vivo questo argomento – Juan

+0

@Juan Ciò dipenderebbe dalla tastiera. Le moderne tastiere hanno un piccolo buffer che salverà gli eventi della tastiera mentre il computer li sta elaborando. La maggior parte delle tastiere assegnerà ai tasti dei caratteri una posizione (X + Y) per conservare larghezza di banda e denaro, al costo di impedire che alcune combinazioni di tasti vengano registrate correttamente in condizioni estreme in cui la CPU non può tenere il passo, ma alcune tastiere inviano anche chiavi specifiche individualmente. La maggior parte delle tastiere invia eventi chiave modificatori separatamente, ad esempio, e alcune tastiere di gioco fanno lo stesso per 'WASD' e i tasti freccia. – YoYoYonnY

5

La risposta è che dipende dal fatto che stavate già gestendo un interrupt di tastiera.

La maggior parte delle routine di servizio di interruzione (ISR) hanno un codice al termine di esse che informa l'hardware che è stato "servito". Nel caso del controller della tastiera, i comandi vengono scritti in esso confermando i byte ricevuti. È al momento del riconoscimento che l'hardware del controller della tastiera smette di usare l'elettricità per segnalare una condizione di interruzione.

Se si sta gestendo un interrupt non da tastiera, diciamo che l'allarme di allarme incendio si interrompe, quindi l'hardware della tastiera che asserisce elettricamente l'interruzione si innesca quando si preme il tasto. Il segnale elettrico viene ignorato fino a quando la CPU non ha di nuovo abilitato gli interrupt. Al termine della manutenzione dell'interruzione dell'allarme incendio, l'ISR di allarme incendio conferma i dati e riattiva gli interrupt sulla CPU. Immediatamente, la CPU entra in un interrupt perché il controller della tastiera sta ancora segnalando elettricamente una condizione di interruzione.

Se si sta gestendo un interrupt di tastiera e l'utente rapidamente tipi un secondo battitura durante l'esecuzione della ISR tastiera, quindi c'è la possibilità di perdere i dati a partire dalla seconda sequenza di tasti, o di ricevere in un secondo momento, se affatto. In particolare, se l'ISR ripristina il controller della tastiera attraverso un riconoscimento, ma l'ISR non ha effettivamente ricevuto tutti i byte disponibili dal controller della tastiera, allora questo è un problema.

Spesso un ISR gestisce prima l'interrupt che ha attivato la sua attivazione, quindi, dopo aver riconosciuto l'interrupt, esegue il polling del dispositivo per verificare se ha ricevuto più dati dal primo interrupt. In tal caso, generare un interrupt software per reinserire l'ISR e riparare il dispositivo.

0

Sarebbe fisicamente impossibile per un utente premere "a" due volte durante la normale elaborazione di un interrupt. Sarebbe terribilmente improbabile anche se premesse due tasti alla volta, ma l'hardware dovrebbe contenere almeno un tasto finché la CPU non è pronta per ottenerlo.

Su PC - questo sta raggiungendo WAY ai miei giorni PCXT - il sottosistema tastiera può contenere nell'area di 13 pressioni dei tasti per la CPU.

1

La semplice risposta è che un interrupt disattiva automaticamente ulteriori interrupt. Gli interrupt dovrebbero e sono disabilitati solo per il minor tempo possibile. La prima istruzione nella tastiera ISR originale AT BIOS era STI per abilitare gli interrupt.

La risposta felice è che il PIC priorità alle interrupt hardware e anche con gli interrupt abilitati solo l'interrupt IRQ0 timer può interrompere l'ISR tastiera. Naturalmente un NMI può verificarsi in entrambi i casi, ma fortunatamente questo non si verifica mai su un PC corrente.

-2

Disabilita interrupt hanno la prova differente. 1. Guasto hardware 2. eccetto {ad esempio: divisione per zero} e ect.

  1. quando si verifica un errore hardware, l'os deve utilizzare la fusione.
  2. quando si verifica l'eccezione, os deve gestire il sistema e passare un altro processo per gestire l'interrupt.

Oppure, ad esempio: per dispositivo I/O. se l'interruzione non era, il computer non era efficienza!