La gestione della memoria nel kernel Linux viene eseguita utilizzando il paging o la segmentazione o entrambi?
La gestione della memoria nel kernel Linux viene eseguita utilizzando il paging o la segmentazione o entrambi?
Risposte:
Linux usa entrambi. Utilizza la segmentazione per mappare tutto lo spazio degli indirizzi disponibile, offrendo al contempo diversi diritti di accesso: sostanzialmente un kernel e una vista dello spazio utente. È possibile grep il codice sorgente di Linux per KERNEL_DS (segmento di dati del kernel) per alcuni esempi.
Il paging viene quindi utilizzato per l'implementazione della memoria virtuale (Grep per "struct gdt_page" nel kernel, per un punto di partenza)
La gestione della memoria in Linux funziona esclusivamente tramite paging.
Linux supporta pagine "piccole" (di solito 4kB) e "grandi" (2M). Il primo "funziona" senza che tu sappia o faccia qualcosa di speciale e il secondo necessita di un trattamento speciale (deve essere prenotato al momento dell'avvio e mappato tramite un dispositivo speciale).
L'unico contesto in cui appare "segmento" sotto Linux è la syscall brk () che viene utilizzata per aumentare il segmento di dati di un processo (normalmente non ti servirà, malloc lo fa senza che te ne occupi). Ma in entrambi i casi, la memoria arriva in pagine ed è gestita in pagine e non ha nulla a che fare con la segmentazione x86.