Passaggio dalla modalità kernel alla modalità utente (e viceversa)


8

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.

Risposte:


7

Usermode to kernelmode: Wrong! ;-) Sì, gli interrupt vengono elaborati in modalità kernel e originariamente il modo per accedere alla modalità kernel era mediante un interruzione forzata in qualche modo dal software. Nel dicembre 2020 c'era una serie di UIO (Unimplemented Instruction Opcodes), che chiamavano uno di quelli che causavano una trappola al sistema operativo. Includevano istruzioni in virgola mobile (se non in hardware) e altre istruzioni esotiche, ma anche i mezzi per effettuare chiamate al sistema operativo. La famiglia i? 86 ha l' intistruzione (interruzione), tradizionalmente usata come dici tu. I membri più recenti della famiglia hanno SYSTENT per effettuare chiamate del supervisore in modo più efficiente. I mezzi per passare alla modalità supervisore non possono essere privilegiati, ma devono in qualche modo essere strettamente controllati dal kernel (dove si entra nel kernel, quali argomenti si passa, ...).

Kernelmode to usermode: Non è necessario che l'operazione "drop privileges" sia privilegiata. Se non si dispone di privilegi, eliminarli è vietato. Ma il meccanismo esatto dipende dall'architettura in modo estremo.

Interrupt disabilitati nel kernel: gli interrupt indicano alcune condizioni che devono essere gestite il più presto possibile (ad esempio, se i dati arrivati ​​sulla rete non vengono salvati dalla scheda prima dell'arrivo del successivo, verranno sovrascritti). Pertanto, gli interrupt sono disabilitati molto raramente. Nei sistemi Unix originali (e contemporanei), c'era una CPU, e il modo più semplice per ottenere un'area critica ("nessuno scherza con i miei dati mentre li modifico") era solo disabilitare gli interrupt. I dolori sono stati presi per mantenere i periodi di "interruzione disabilitati" il più breve possibile a causa di quanto sopra. Sulle attuali macchine multi-CPU, disabilitare gli interrupt su una CPU non fa molto in questa direzione; la disabilitazione degli interrupt a livello globale è estremamente costosa nel coordinamento tra CPU, quindi non viene eseguita (o estremamente raramente).


"Non è necessario che l'operazione" elimina privilegi "sia privilegiata". Quindi intendi dire, per passare dalla modalità kernel a quella utente, farà un'istruzione non privilegiata. Se si tratta di un'istruzione non privilegiata, anche un utente può eseguirla e passare dalla modalità kernel a quella utente? O l'ho interpretato male?
avi,

Sì, un "utente normale" non può entrare nella modalità kernel. Inoltre, abbandonare i privilegi non può fare alcun male, quindi non ha bisogno di essere privilegiato (da solo). Se fare questo su qualche macchina significa ad es. Fregare registri privilegiati, lì sarà privilegiato. Ma non deve essere privilegiato.
vonbrand,

Non sto capendo bene. Il tuo precedente commento e risposta si contraddicono. Nel commento che hai detto, "un" utente normale "non può entrare nella modalità kernel", ma in risposta hai menzionato "" Non è necessario che l'operazione "drop privileges" sia privilegiata "'. Cosa mi manca : S Per dire semplicemente, per cambiare il kernel in modalità Utente, è necessario cambiare il bit di modalità. Cosa non si può fare in modalità utente giusto? Quindi non può essere un'istruzione non privilegiata.
avi

Dannazione, anche io non ho capito perché la modalità utente in modalità kernel non è corretta? Nella tua spiegazione, nelle prime righe hai menzionato l'utente in modalità kernel può essere fatto tramite le istruzioni INT e infine hai menzionato: "I mezzi per passare alla modalità supervisore non possono essere privilegiati". Non è tutto ciò di cui ho parlato? Interrupt H / W (che è ovvio, ad es. Richieste I / O), interrupt S / W (istruzione INT) e istruzione non privilegiata.
avi

Esso può essere fatto con un interrupt, ma ci sono altre possibilità. Non può essere privilegiato (se lo fosse, nessun utente potrebbe farlo ;-).
vonbrand,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.