GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è la differenza tra PAE a 32 bit e kernel a 64 bit?

Il kernel vede la memoria fisica e fornisce una vista ai processi. Se ti sei mai chiesto come un processo possa avere uno spazio di memoria di 4 GB se l'intera macchina ha solo 512 MB di RAM, ecco perché. Ogni processo ha il proprio spazio di memoria virtuale. Gli indirizzi in quello spazio degli indirizzi sono mappati su pagine fisiche o su spazio di scambio. Se per scambiare spazio, dovranno essere scambiati nuovamente nella memoria fisica prima che il tuo processo possa accedere a una pagina per modificarla.

L'esempio di Torvalds nella risposta di XQYZ (DOS highmem) non è troppo inverosimile, anche se non sono d'accordo sulla sua conclusione che PAE sia generalmente una cosa negativa. Ha risolto problemi specifici e ha i suoi meriti, ma tutto ciò è polemico. Ad esempio, l'implementatore di una libreria potrebbe non percepire l'implementazione come facile, mentre l'utente di quella libreria potrebbe percepire questa libreria come molto utile e facile da usare. Torvalds è un implementatore, quindi è tenuto a dire ciò che dice la dichiarazione. Per un utente finale questo risolve un problema ed è quello che interessa all'utente finale.

Per un PAE aiuta a risolvere un altro problema legacy su macchine a 32 bit. Consente al kernel di mappare tutti i 4 GB di memoria e aggirare il buco di memoria del BIOS che esiste su molte macchine e fa sì che un kernel a 32 bit puro senza PAE "veda" solo 3,1 o ​​3,2 GB di memoria, nonostante i 4 GB fisici.

Ad ogni modo, per il kernel a 64 bit è una relazione simmetrica tra la pagina fisica e le pagine virtuali (lasciando da parte lo spazio di swap e altri dettagli). Tuttavia, il kernel PAE esegue la mappatura tra un puntatore a 32 bit all'interno dello spazio degli indirizzi del processo e un indirizzo a 36 bit nella memoria fisica. Qui è necessaria più contabilità. Parola chiave:"Tabella pagine estesa". Ma questa è un po' più una questione di programmazione. Questa è la differenza principale. Più contabilità rispetto a uno spazio di indirizzi lineare completo. Per PAE sono blocchi di 4 GB come hai detto.

A parte questo entrambi PAE e 64 bit consentono pagine di grandi dimensioni (invece delle pagine standard da 4 KB a 32 bit).

Capitolo 3 del volume 1 del Manuale del processore Intel ha una panoramica e il capitolo 3 del volume 3A ("Gestione della memoria in modalità protetta") ha maggiori dettagli, se vuoi leggerlo.

A me sembra che questa sia una grande distinzione che sembra essere ignorata da molte persone.

Hai ragione. Tuttavia, la maggior parte delle persone sono utenti, non implementatori . Ecco perché a loro non importerà. E fintanto che non hai bisogno di enormi quantità di memoria per la tua applicazione, a molte persone non importa (soprattutto perché ci sono livelli di compatibilità).


Potresti voler esaminare cosa dice Linus Torwalds al riguardo qui:

PAE ha capovolto questo fatto molto semplice e ha rovinato le cose in modo regale. Chiunque abbia avuto l'idea era totalmente incompetente e aveva dimenticato tutti i problemi di DOS HIGHMEM. C'è una dannata buona ragione per cui ci siamo lasciati alle spalle il 286 e abbiamo iniziato a usare i 386, invece di avere HIGHMEM schifo con finestre in uno spazio fisico più grande.

[...]

Quindi ripeti dopo di me:PAE non ha mai veramente risolto nulla. È stato un errore. È stato solo un fallimento totale, e il risultato di ingegneri hw che non capivano il software.


Linux
  1. Qual è la differenza tra memoria buffer e cache in Linux?

  2. Qual è la differenza tra la scrittura su un file e una memoria mappata?

  3. Qual è la differenza tra strtok_r e strtok_s in C?

  4. Qual è la differenza tra adduser e useradd?

  5. Qual è la differenza tra `su -` e `su --login`?

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

Qual è la differenza tra Linux e Unix?

Qual è la differenza tra Login e Non-Login Shell

Che cos'è un hypervisor? Qual è la differenza tra il tipo 1 e 2?

Qual è la differenza tra curl e Wget?

Qual è la differenza tra DMA e IO mappato in memoria?