Note su Solaris 10

x86: Limiti all'allocazione di memoria delle applicazioni sui sistemi x86

Le applicazioni Solaris allocano la memoria usando funzioni quali malloc() , brk() o mmap(). La quantità massima di memoria che un'applicazione può allocare è determinata dalle dimensioni dello spazio di indirizzamento virtuale. Il testo, lo stack, i dati e le librerie del programma contenuti nello spazio di indirizzamento virtuale possono ulteriormente ridurre la dimensione massima disponibile per l'allocazione della memoria.

Ambiente di elaborazione a 32 bit

In un ambiente a 32 bit, lo spazio di indirizzamento virtuale a 32 bit viene condiviso tra utente e kernel. Di conseguenza, la dimensione dello spazio di indirizzamento virtuale dell'utente è pari a 4 Gbyte meno la dimensione dello spazio di indirizzamento virtuale del kernel. La configurazione della dimensione dello spazio di indirizzamento virtuale del kernel dipende dalla dimensione della memoria fisica. Quanto più aumenta la dimensione della memoria fisica, tanto più diminuisce quella dello spazio di indirizzamento dell'utente. Su sistemi con 8 Gbyte di memoria, la dimensione dello spazio di indirizzamento dell'utente è di circa 3 Gbyte.

Se i limiti di spazio per l'allocazione della memoria sono insufficienti per un'applicazione, esistono due possibilità:

Ambiente di elaborazione a 64 bit

Nell'ambiente di elaborazione a 64 bit, lo spazio di indirizzamento virtuale per le applicazioni a 32 bit è interamente a disposizione dell'utente. Ciò significa che un'applicazione a 32 bit può allocare interamente i 4 Gbyte, a cui sarà da sottrarre solo lo spazio di indirizzamento dell'utente necessario per il testo, lo stack e le librerie.

Con alcuni vecchi processori AMD a 64 bit, il limite per l'allocazione della memoria può essere ulteriormente ridotto di 1 Gbyte. Per stabilire se questa limitazione riguarda il processore in uso, procedere come segue:

  1. Eseguire il comando pmap $$ da qualunque shell a 32 bit.

  2. Nella mappa dei processi, determinare se sono presenti indirizzi pari o superiori a 0xC0000000. In caso negativo, significa che Solaris ha limitato le applicazioni a 32 bit all'utilizzo dei 3 Gbyte inferiori dello spazio di indirizzamento virtuale totale (4 Gbyte).

Le applicazioni a 64 bit possono allocare 250 Tbyte di memoria, a seconda dello spazio già in uso.