Qualcuno può spiegarmi cosa succede all'interno di una routine di servizio di interrupt (sebbene dipenda da una routine specifica, una spiegazione generale è sufficiente)? Questa è sempre stata una scatola nera per me.Cosa succede in una routine di servizio di interrupt?
risposta
C'è una buona pagina di Wikipedia su interrupt handlers.
"Un gestore di interrupt, noto anche come una routine di servizio di interruzione (ISR), è una subroutine richiamata in un sistema operativo o driver di periferica cui esecuzione è innescata dalla ricezione di un interrupt. Gestori di interrupt sono una moltitudine di funzioni, che variano in base al motivo per cui è stato generato l'interrupt e alla velocità con cui il gestore di interrupt completa il proprio compito. "
Fondamentalmente quando un pezzo di hardware (un interrupt hardware) o qualche task OS (interrupt software) deve eseguirlo, attiva un interrupt. Se questi interrupt non sono mascherati (ignorati), il sistema operativo interromperà ciò che sta facendo e invierà un codice speciale per gestire questo nuovo evento.
Un buon esempio è la lettura da un disco rigido. L'unità è lenta e non si desidera che il sistema operativo attenda il ritorno dei dati; vuoi che il sistema operativo vada a fare altre cose. Così si imposta il sistema in modo che quando il disco ha i dati richiesti, solleva un interrupt. Nella routine di servizio di interrupt per il disco, la CPU prenderà i dati che sono ora pronti e li restituirà al richiedente.
Gli ISR devono spesso accadere rapidamente poiché l'hardware può disporre di un buffer limitato, che verrà sovrascritto dai nuovi dati se ora viene estratto abbastanza rapidamente. È inoltre importante completare rapidamente l'ISR mentre la CPU esegue la manutenzione di un ISR. Gli altri interrupt saranno mascherati, il che significa che se la CPU non riesce a raggiungerli abbastanza rapidamente i dati possono andare persi.
Il modo migliore per capire è di creare alcuni esempi minimi.
Minimal esempio 16 bit
Prima imparare a creare un sistema operativo bootloader minimal ed eseguirlo su QEMU e hardware reale come ho spiegato qui: https://stackoverflow.com/a/32483545/895245
Ora è possibile eseguire in 16 bit in modalità reale:
movw $handler0, 0x00
mov %cs, 0x02
movw $handler1, 0x04
mov %cs, 0x06
int $0
int $1
hlt
handler0:
/* Do 0. */
iret
handler1:
/* Do 1. */
iret
Ciò farebbe in ordine:
Do 0.
Do 1.
hlt
: interrompere l'esecuzione di
Si noti come il processore cerca il primo gestore all'indirizzo 0
, e la seconda a 4
: che è una tabella di gestori chiamato il IVT, e ogni voce ha 4 byte.
Minimal example that does some IO per rendere visibili i gestori.
modalità protetta
moderni sistemi operativi eseguiti in modalità cosiddetta protetta.
La gestione ha più opzioni in questa modalità, quindi è più complessa, ma lo spirito è lo stesso.
Vedi anche
questione connessa: What does "int 0x80" mean in assembly code?
- 1. Cosa succede esattamente quando premo il pulsante Invio in termini di interrupt system_read, assembly?
- 2. Cosa succede in BeginProcessRequest()?
- 3. Cosa succede con customUserNamePasswordValidatorType?
- 4. Cosa succede in una doppia eliminazione?
- 5. In Python, cosa succede quando importi all'interno di una funzione?
- 6. Cosa succede se un servizio viene avviato più volte?
- 7. Cosa succede se voglio implementare una query complicata in REST
- 8. Cosa succede alla classe generica nel servizio web jax-ws?
- 9. Cosa succede se il servizio dati Parse cloud fallisce?
- 10. Cosa succede quando aggiorniamo una pagina web?
- 11. interrupt schermata di blocco NSURLConnection
- 12. Cosa succede se chiudi una connessione chiusa?
- 13. Cosa succede quando aggiungo una dipendenza Maven?
- 14. Cosa succede con una funzione inline esterna?
- 15. Cosa succede se implemento una classe nel file di intestazione?
- 16. Assegnazione di una variabile, cosa succede realmente, Java
- 17. cosa succede quando una discussione genera un'eccezione?
- 18. Cosa succede se un'operazione di TableBatchOperation fallisce?
- 19. Cosa succede in caso di degenerazione di incarichi multipli?
- 20. cosa si intende disabilitando gli interrupt?
- 21. Elaborazione degli interrupt in Windows
- 22. rounding interi di routine
- 23. Cosa succede se non si ripristina una transazione in Hibernate?
- 24. Cosa succede quando uso una semplice istruzione setf in LISP?
- 25. Problema di routine SetConsoleCtrlHandler
- 26. Cosa succede in Oracle quando faccio cadere una colonna?
- 27. Cosa succede mentre (! Volatile); fare?
- 28. Restrizioni mentre il kernel esegue una routine ISR
- 29. Spring - @Transactional - Cosa succede in background?
- 30. Cosa succede quando è in corso l'inizializzazione parziale di una matrice di struct in C?