Sono interessato alla differenza tra Highmem e Lowmem:
- Perché c'è una tale differenziazione?
- Cosa guadagniamo così facendo?
- Quali caratteristiche ha ciascuno?
Risposta accettata:
Su un'architettura a 32 bit, l'intervallo di spazio degli indirizzi per l'indirizzamento della RAM è:
0x00000000 - 0xffffffff
o 4'294'967'295
(4 GB).
Il kernel Linux divide questo 3/1 (potrebbe anche essere 2/2 o 1/3 ) rispettivamente nello spazio utente (memoria alta) e nello spazio kernel (memoria insufficiente).
L'intervallo di spazio utente:
0x00000000 - 0xbfffffff
Ogni processo utente appena generato ottiene un indirizzo (intervallo) all'interno di quest'area. I processi utente sono generalmente non attendibili e pertanto è vietato accedere allo spazio del kernel. Inoltre, sono considerati non urgenti, come regola generale, il kernel cerca di rinviare l'allocazione della memoria a quei processi.
L'intervallo di spazio del kernel:
0xc0000000 - 0xffffffff
Un processo del kernel ottiene il suo indirizzo (intervallo) qui. Il kernel può accedere direttamente a questo 1 GB di indirizzi (beh, non a 1 GB completo, ci sono 128 MB riservati per l'accesso alla memoria elevata).
I processi generati nello spazio del kernel sono affidabili, urgenti e considerati privi di errori, la richiesta di memoria viene elaborata istantaneamente.
Ogni processo del kernel può anche accedere all'intervallo dello spazio utente, se lo desidera. E per ottenere ciò, il kernel mappa un indirizzo dallo spazio utente (la memoria alta) al suo spazio del kernel (la memoria bassa), i 128 MB sopra menzionati sono riservati per questo.
Se la divisione è 3/1, 2/2 o 1/3 è controllata da CONFIG_VMSPLIT_...
opzione; probabilmente puoi controllare in /boot/config*
per vedere quale opzione è stata selezionata per il tuo kernel.