Allocazione massima della memory per il kernel di Linux a 32 bit

Stavo leggendo questo articolo che parla di come la quantità massima di RAM dedicata all'utilizzo del kernel in 32 bit di Windows sia di 2 GB anche quando la quantità totale di RAM è superiore a 4 GB.

http://www.brianmadden.com/blogs/brianmadden/archive/2004/02/19/the-4gb-windows-memory-limit-what-does-it-really-mean.aspx \

  1. È questo lo stesso per ambienti linux 32 bit come ubuntu 10.04 a 32 bit? IE è il massimo kernel allocazione 2GB ram anche se la memory totale totale> 4GB?

  2. Se si aumenta la quantità totale di memory a 64GB di ram ricompilando il kernel con l'opzione PAE abilitata, qual è la quantità massima di ram che è ansible dedicare all'utilizzo del kernel? È ancora 2GB? O puoi aumentarla?

3 Solutions collect form web for “Allocazione massima della memory per il kernel di Linux a 32 bit”

Entrambi i kernel hanno diviso lo spazio di indirizzi virtuale in una porzione utente e una porzione del kernel. La porzione del kernel è condivisa tra tutti i processi del sistema e quindi il kernel è limitato a quella memory direttamente indirizzabile. Ogni process utente del sistema ha la propria porzione utente dello spazio di indirizzi. Classicamente questa divisione è stata fatta in mezzo, dando a metà 2gb. Windows può essere indirizzato per spostare la divisione a 3gb per utente e 1gb per il kernel con l'interruttore boot.ini / 3gb. Il kernel di linux è piuttosto configurabile al momento della creazione, e l'ultima volta che ho controllato, i kernel di Ubuntu costruiscono con la divisione 3: 1.

PAE consente di affrontare 64 gb di RAM fisico, ma qualsiasi tabella di pagina è ancora limitata a 4 GB. Poiché esiste una sola parte del kernel dello spazio di indirizzi condiviso tra tutti i processi del sistema, è limitato a 1 o 2 GB di ram direttamente indirizzabile, non import quale sia. È ansible utilizzare la memory fisica aggiuntiva, ma deve essere mappata solo parzialmente nello spazio di indirizzi virtuale in un determinato momento e le mappature vengono modificate quando necessario. Poiché each process dispone di uno spazio di indirizzi separato per gli utenti, è ansible avere, ad esempio, 5 diversi processi ciascuno con 2 GB di memory propria che mappano su diverse parti di 16 GB di RAM fisico che hai installato e il kernel che utilizza un altro 2 GB.

Si noti che la cache del filesystem non deve mantenere le pagine mappate per tutto il tempo, in modo da poter utilizzare molto di più quel ram fisico e il kernel automaticamente mappare i bit quando necessario, quindi scompare in modo che possa mappare altre pagine. Questa truffa consente al kernel di utilizzare molti gb di memory per la cache e qualche centinaio di MB per altri usi, anche quando il kernel ha solo 1 GB di spazio di indirizzi virtuale da giocare.

Da notare inoltre che nelle ultime versioni di Windows, Microsoft ha istituito varie limitazioni per licenze di prodotto artificiale. Il Windows 7 Pro che sono bloccato sul mio PC durante il lavoro rifiuta di utilizzare indirizzi fisici di RAM> 4GB anche se abilito PAE, il che rende solo in grado di utilizzare 3,4 di 4,0 gb di ram installati, dato che un pezzo di il palmare viene trasferito nel segno 4gb per lasciare spazio alle cose come il palmare del video che si trova sotto 4gb.

Di solito la ragione per le windows non è in grado di allocare tutta la memory perché è stato utilizzato uno di quell'area di memory per Video Ram.

Per quanto riguarda la tua domanda su PAE non sono sicuro. Se aveste 64GB ram e PAE potresti probabilmente utilizzare più di 4 concerti in totale, ma penso che each singolo programma sarebbe limitato a 4 gig ram.

Questo problema viene dallo spazio di indirizzi fornito da un integer a 32 bit. 2 ^ 32 fornisce 4294967295 valori, quindi 4 limiti ram ram.

Secondo questo text , Linux si divide in 3G, quindi si dovrebbe avere accesso a 3G di RAM in una sola volta, come avete con Windows con l' interruttore / 3GB applicato al boot.ini .

Alless, in teoria. A causa di alcune ragioni sconosciute a me, un test ha solo dimostrato che posso solo utilizzare una parte di questa memory:

08048000-0804b000 data? 0804b000-081ce000 heap 65e00000-b7395000 mmap-ed heap b7395000-b73ac000 mmap-ed code bf93f000-bf960000 stack 

Perché non potrei avere malloc() la gamma da 081ce000-65e00000 , non lo so.

Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.