Per prima cosa vedo 3 domande.
- Chi/Cosa decide inizialmente il livello di privilegio del processo?
- Quando si decide che il processo verrà eseguito con livello di privilegio basso o alto?
- Cosa indica che il programma corrente verrà eseguito con un livello di privilegio specifico?
In secondo luogo per confermare la definizione di alcuni termini
Quando si dice livello di privilegio, credo lei si riferisce alla the concept of level of privilege associated with CPU processor mode in contrasto con il livello generico di qualsiasi altro meccanismo privilegio a disposizione.
Quando si dice processo, credo che si stia riferendo a the concept of the currently running program in contrasto con qualche definizione alternativa.
processi utente eseguiti in modalità utente con il privilegio utente per una determinata architettura della CPU
Kernel processi vengono eseguiti in modalità kernel con il privilegio supervisore per una data architettura della CPU.
Se il processo è utente o kernel dipende da quali flag sono impostati nei descrittori di segmento quando non si utilizza il paging o nelle voci della tabella di pagina o della directory di pagina in cui viene utilizzato il paging.
Ciò significa che il livello di privilegio di un processo è determinato dal punto in cui il codice di quel processo si trova in memoria. Se è nello spazio del kernel e contrassegnato come tale usando i flag rilevanti, allora è un processo del kernel. Se è nello spazio utente e contrassegnato come tale utilizzando i flag rilevanti, allora è un processo utente.
Se il processo/programma in esecuzione non è il kernel, è un processo utente sui più moderni sistemi operativi. Quindi, quando viene presa la decisione, è al momento dell'esecuzione del programma, in particolare il tempo di inizializzazione del sistema operativo quando il kernel viene caricato per la prima volta.
O il processo è tale kernel ed è eseguito a livello di privilegio supervisore o non lo è e viene eseguito a livello di privilegio dell'utente.
La CPU controlla ogni esecuzione di qualsiasi codice o segmento di dati dalla memoria rispetto ai relativi registri di stato (registro di stato del codice su Intel X86 e registro dello stato del programma corrente su ARM).
Quando i processi utente devono accedere alle risorse del kernel, il modo generale in cui viene eseguito è consentire al processo dell'utente di chiedere il processo del kernel per suo conto effettuando una chiamata di sistema, che attiva un contesto di privilegio quando viene eseguito il processo del kernel la richiesta per il processo dell'utente.
Come nota a margine, Kernel Mode Linux, consente di eseguire i processi utente in modalità kernel/supervisor.
Riferimenti e ulteriori letture
Grazie. Significa anche che ... Un caricatore e un'unità MMU/sistema di paging è inizialmente responsabile per il programma utente di caricare solo nello spazio Utente e quindi questo è il modo in cui decide indirettamente il livello di privilegio ..? –