GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:differenza tra spazio utente e spazio kernel?

Lo spazio del kernel viene utilizzato quando il kernel è in esecuzione per conto del programma utente, ad esempio System Call? O è lo spazio degli indirizzi per tutti i thread del kernel (ad esempio lo scheduler)?

Se è il primo, significa che il normale programma utente non può avere più di 3 GB di memoria (se la divisione è 3 GB + 1 GB)? Inoltre, in tal caso, come può il kernel utilizzare la memoria elevata, perché a quale indirizzo di memoria virtuale verranno mappate le pagine dalla memoria elevata, poiché 1 GB di spazio del kernel verrà mappato logicamente?

Risposta accettata:

Lo spazio del kernel viene utilizzato quando il kernel è in esecuzione per conto del programma utente, ad esempio System Call? O è lo spazio degli indirizzi per tutti i thread del kernel (ad esempio lo scheduler)?

Sì e sì.

Prima di andare oltre, dovremmo affermare questo sulla memoria.

La memoria ottenuta è divisa in due aree distinte:

  • Lo spazio utente , che è un insieme di posizioni in cui vengono eseguiti i normali processi utente (ovvero tutto ciò che non è il kernel). Il ruolo del kernel è quello di gestire le applicazioni in esecuzione in questo spazio evitando che si incasino tra di loro e con la macchina.
  • Lo spazio del kernel , che è la posizione in cui è archiviato il codice del kernel e viene eseguito in.

I processi in esecuzione nello spazio utente hanno accesso solo a una parte limitata della memoria, mentre il kernel ha accesso a tutta la memoria. Anche i processi in esecuzione nello spazio utente non avere accesso allo spazio del kernel. I processi nello spazio utente possono accedere solo a una piccola parte del kernel tramite un'interfaccia esposta dal kernel – il sistema chiama . Se un processo esegue una chiamata di sistema, viene inviato un interrupt software al kernel, che quindi invia il gestore di interrupt appropriato e continua il suo lavoro dopo che il gestore ha terminato.

Il codice dello spazio del kernel ha la proprietà di essere eseguito in "modalità kernel", che (nel tuo tipico computer desktop -x86-) è ciò che chiama codice che viene eseguito sotto l'anello 0 . In genere nell'architettura x86, ci sono 4 anelli di protezione . Ring 0 (modalità kernel), Ring 1 (può essere utilizzato da hypervisor o driver di macchine virtuali), Ring 2 (può essere utilizzato dai driver, ma non ne sono così sicuro). Ring 3 è ciò in cui vengono eseguite le applicazioni tipiche. È l'anello meno privilegiato e le applicazioni in esecuzione su di esso hanno accesso a un sottoinsieme delle istruzioni del processore. L'anello 0 (spazio del kernel) è l'anello più privilegiato e ha accesso a tutte le istruzioni della macchina. Ad esempio, un'applicazione "semplice" (come un browser) non può utilizzare le istruzioni di montaggio x86 lgdt per caricare la tabella del descrittore globale o hlt per fermare un processore.

Se è il primo, significa che il normale programma utente non può avere più di 3 GB di memoria (se la divisione è 3 GB + 1 GB)? Inoltre, in tal caso, come può il kernel utilizzare la memoria elevata, perché a quale indirizzo di memoria virtuale verranno mappate le pagine dalla memoria elevata, poiché 1 GB di spazio del kernel verrà mappato logicamente?

Per una risposta a questo, fare riferimento all'eccellente risposta di wag qui

Correlati:Visibilità della barra di stato di Nautilus:controllare rapidamente lo spazio libero?
Linux
  1. Differenza tra i comandi "su" e "su -" in Linux

  2. La differenza tra [[ $a ==Z* ]] e [ $a ==Z* ]?

  3. La differenza tra account utente e account di servizio?

  4. Differenza tra utente Sudo e utente root?

  5. Linux:differenza tra Pts e Tty?

Comprendere la differenza tra il comando sudo e su su Linux

Qual ​​è la differenza tra i kernel macOS e Linux

Qual è la differenza tra Linux e Unix?

differenza tra netstat e ss in linux?

Qual è la differenza tra spazio utente e spazio kernel?

Differenza tra i comandi 'ifconfig' e 'ip'