Sto leggendo il libro Sistemi operativi di Galvin. Galvin spiega, quali sono le modalità kernel e utente, i privilegi di istruzione dati per entrambe le modalità e anche sulla modalità bit. Ma sono interessato a sapere come la modalità cambia da una all'altra. Fondamentalmente voglio risolvere la seguente domanda:
Una CPU ha 2 modalità, privilegiate e non privilegiate. Al fine di cambiare la modalità da previled a non previledged
a) È necessario un interrupt di processo
b) È necessario un interrupt software.
c) È necessaria un'istruzione privilegiata.
d) È necessaria un'istruzione non privilegiata.
Da quello che ho capito,
dalla modalità utente alla modalità kernel - Hardware Interrupt è necessario [come in I / O su disco]. Ora, nel caso in cui il programma utente si stanchi di accedere a una memoria che è al di fuori del suo intervallo consentito, si verifica una trappola, che è fondamentalmente un interrupt software che verrà gestito dal sistema operativo. Ora, in modalità utente non possiamo eseguire alcuna istruzione privilegiata. Pertanto, un'istruzione non privilegiata come la richiesta di I / O può cambiare l'utente in modalità kernel. Quindi penso di cambiare
da non privilegiato (utente) a privilegiato (kernel): le istruzioni H / W Interrupt, S / W Interrupt e non Privilegiate lo faranno.
Ora arriviamo a, kernel in modalità utente. Il sistema operativo può cambiare il kernel in modalità utente. Quindi, eseguirà semplicemente un'istruzione privilegiata per passare dalla modalità kernel a quella utente. Non è necessario generare interrupt H / w o S / w. Quindi concludo, per cambiare
da preciled a non previled - farà un'istruzione privilegiata.
Ho ragione ?
Inoltre quando si esegue in modalità kernel, tutti gli interrupt saranno disabilitati, giusto? Quindi la risposta non può essere (a) o (b). Inoltre, poiché il sistema operativo è fondamentalmente un software, non può generare interrupt H / W.
Inoltre, poiché il sistema operativo stesso gestisce gli interrupt, non ha senso per me perché debba generare un interrupt (e servirlo) per passare dalla modalità kernel a quella utente.
Per favore fatemi sapere se sbaglio da qualche parte. Qualsiasi aiuto in merito è apprezzato.