Stavo leggendo su su come Linux funziona nel mio OS-libro, quando mi sono imbattuto in questo ..Chiamata di sistema senza commutazione di contesto?
[...] il kernel viene creato come un unico, monolitico binario. Il motivo principale è migliorare le prestazioni. Poiché tutto il codice del kernel e le strutture dati sono conservati in un unico spazio indirizzo, non è necessario alcun cambio di contesto quando un processo chiama una funzione del sistema operativo o quando viene consegnato un interrupt hardware.
Per me è stato abbastanza sorprendente, sicuramente è necessario memorizzare il contesto del processo prima di passare alla modalità kernel per gestire un'interruzione .. Ma ok, lo comprerò per ora. Alcune pagine in avanti, mentre descriveva il contesto di pianificazione di un processo, diceva:
Entrambe le chiamate di sistema e gli interrupt che si verificano mentre il processo è in esecuzione useranno questo stack.
"questo stack" è il punto in cui il kernel memorizza i registri del processo e così via.
Non è questa una contraddizione diretta alla prima citazione? Mi manca interpretarlo in qualche modo?
Grazie. È passato molto tempo da quando l'ho studiato, ma avevo l'impressione che gli interrupt hardware in realtà interrompessero l'esecuzione e salta immediatamente alla procedura di gestione anziché eseguire il polling per gli interrupt in seguito. Ho pensato che se il processo era in esecuzione in modalità kernel avrebbe comunque bisogno di memorizzare il suo contesto prima di quel salto, ma forse quello è stato il mio errore? Suppongo ora che non sarebbe diverso da qualsiasi altra chiamata di metodo se il metodo chiamato gestisce correttamente i registri utilizzati .. ho capito bene? – user1130005
La mia comprensione è che il processo è in esecuzione in modalità utente e in effetti esiste un contesto che passa alla modalità kernel prima che l'interrupt venga gestito. Tuttavia, * la gestione * dell'interrupt non richiede un commutatore di contesto aggiuntivo nei kernel monolitici, ma avviene in microkernel (poiché i driver di dispositivo risiedono nello spazio utente). –