Linux : gestione ed uso della memoria

di staff Commenta

Una delle risorse base che ciascun processo ha a disposizione è la memoria, la gestione di tale è appunto uno degli aspetti più complessi di un sistema Linux.
In diversi modi i sistemi operativi organizzano la memoria, e i dettagli di basso livello dipendono spesso in maniera diretta dall’architettura dell’hardware, ma quello più tipico, usato dai sistemi come Linux è la cosiddetta “memoria virtuale” che consiste nell’assegnare a ogni processo uno spazio virtuale d’indirizzamento lineare, in cui gli indirizzi vanno da zero a un qualche valore massimo.

Per la gestione da parte del kernel la memoria è divisa in pagine di dimensione fissa e ciascuna pagina nello spazio d’indirizzi virtuale è associata a un supporto che può essere una pagina di memoria reale o a un dispositivo di stoccaggio secondario. Per ciascun processo il kernel si cura di mantenere una mappa di queste corrispondenze nella cosiddetta page table.

La corrispondenza fra le pagine della memoria virtuale di un processo e quelle della memoria fisica della macchina è gestita in maniera trasparente dal kernel. Poiché in genere la memoria fisica è solo una piccola frazione della memoria virtuale, è necessario un meccanismo che permetta di trasferire le pagine che servono dal supporto su cui si trovano in memoria, eliminando quelle che non servono. Questo meccanismo è detto paginazione (o paging), ed è uno dei compiti principali del kernel.

Quando un processo cerca di accedere a una pagina che non è nella memoria reale, avviene quello che è chiamato un page fault; la gestione della memoria genera un’interruzione e passa il controllo al kernel il quale sospende il processo e s’incarica di mettere in RAM la pagina richiesta, per poi restituire il controllo al processo.

Lascia un commento

Il tuo indirizzo email non verrà pubblicato.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>