Tp: Gestione della memoria

La gestione della memoria è una delle principali responsabilità di un sistema operativo (SO). Si occupa di controllare e gestire come la memoria del sistema, sia quella fisica (RAM) che quella virtuale, è allocata e utilizzata dai processi e dal sistema stesso. Il suo obiettivo principale è assicurare che ogni processo abbia accesso alle risorse di memoria necessarie, senza interferire con altri processi, e ottimizzare l’uso della memoria per migliorare le prestazioni del sistema.

macro shot photo of a computer RAM

I compiti principali della gestione della memoria includono:

1. Allocazione della memoria

Il sistema operativo assegna memoria a un processo quando quest’ultimo viene avviato e la libera quando il processo termina. Esistono diversi approcci per l’allocazione della memoria:

  • Allocazione contigua: ogni processo riceve un blocco continuo di memoria. Questo metodo è semplice, ma può portare a problemi di frammentazione.
  • Allocazione non contigua: i processi possono occupare più blocchi di memoria che non sono necessariamente adiacenti. Questa strategia riduce la frammentazione della memoria.

2. Gestione dello spazio di indirizzamento

Ogni processo deve avere un proprio spazio di indirizzamento separato, il che significa che ogni processo “crede” di avere accesso a una porzione dedicata di memoria. Tuttavia, questo spazio di indirizzamento può essere virtuale, ovvero può fare riferimento a memoria fisica che non è sempre immediatamente disponibile.

  • Memoria virtuale: consente di eseguire processi che richiedono più memoria di quella fisicamente disponibile sulla macchina. Utilizza una parte del disco rigido come estensione della RAM, chiamata file di swap o paging.
  • Indirizzamento logico vs fisico: gli indirizzi che un processo vede (indirizzi logici) vengono tradotti in indirizzi fisici attraverso un processo chiamato traduzione degli indirizzi.

3. Paginazione

La paginazione è una tecnica di gestione della memoria che permette al sistema operativo di suddividere sia la memoria fisica sia quella virtuale in piccoli blocchi di dimensioni fisse chiamati pagine (in memoria virtuale) e frame (in memoria fisica). Quando un processo richiede memoria, una o più pagine possono essere caricate nei frame disponibili.

  • Page Table: per gestire la paginazione, il sistema operativo utilizza una tabella delle pagine (Page Table) che tiene traccia delle corrispondenze tra indirizzi logici (pagine) e indirizzi fisici (frame).
  • Page Fault: se un processo richiede una pagina che non è presente in memoria fisica, si verifica un page fault. Il sistema operativo allora recupera la pagina dal disco (dove è stata memorizzata come parte della memoria virtuale) e la carica nella RAM.

4. Segmentazione

La segmentazione è un’altra tecnica di gestione della memoria che divide la memoria in segmenti di dimensioni variabili, ognuno dei quali può contenere un’intera sezione logica di un programma, come un array, una funzione o una variabile. Questo approccio è più flessibile rispetto alla paginazione, perché i segmenti non hanno dimensioni fisse, ma può portare a problemi di frammentazione esterna.

5. Frammentazione della memoria

La frammentazione è un problema comune nella gestione della memoria, che si verifica quando la memoria disponibile è divisa in blocchi troppo piccoli per essere utilizzati.

  • Frammentazione interna: si verifica quando viene allocato più spazio di quanto un processo effettivamente richiede (ad esempio, se un processo necessita di 100 KB ma gli viene assegnato un blocco di 128 KB).
  • Frammentazione esterna: si verifica quando la memoria libera è suddivisa in piccoli blocchi non contigui, rendendo difficile allocare memoria per nuovi processi, anche se c’è spazio totale sufficiente.

6. Swap e paging

Quando la memoria fisica si esaurisce, il sistema operativo può temporaneamente spostare alcuni processi dalla memoria principale al disco rigido, in una parte chiamata spazio di swap (o memoria di swap), per liberare spazio per i processi attivi. Il paging si riferisce alla tecnica che permette di gestire questo scambio in maniera trasparente, caricando e scaricando pagine dalla RAM al disco rigido secondo necessità.

7. Gestione della memoria virtuale

La memoria virtuale è una tecnica che permette ai programmi di utilizzare più memoria di quella fisicamente disponibile. Essa crea un’illusione di un grande spazio di memoria, utilizzando il disco rigido per estendere la memoria RAM.

  • File di swap: quando la RAM è piena, il sistema operativo sposta parte dei dati della RAM in una porzione del disco rigido, chiamata file di swap. Questo rallenta il sistema, ma evita crash dovuti alla mancanza di memoria.
  • Gestione della memoria cache: per ottimizzare le prestazioni, vengono spesso utilizzate delle cache che mantengono una copia di porzioni di memoria ad accesso più rapido rispetto alla RAM o al disco rigido.

8. Protezione della memoria

La gestione della memoria include anche la protezione della memoria di ciascun processo. Ogni processo ha un proprio spazio di memoria e non può accedere alla memoria di altri processi. Ciò viene garantito utilizzando meccanismi come:

  • Boundary registers: registri che definiscono l’intervallo di memoria accessibile per un processo.
  • Protezione basata su paginazione o segmentazione: con l’uso delle tabelle delle pagine o delle tabelle dei segmenti, il sistema operativo può garantire che un processo acceda solo alle proprie pagine o segmenti, evitando di accedere alla memoria riservata ad altri processi.

9. Allocazione dinamica della memoria

I processi possono richiedere memoria aggiuntiva durante l’esecuzione (ad esempio, per allocare nuovi oggetti o dati). L’allocazione dinamica della memoria è la capacità di allocare e rilasciare memoria durante l’esecuzione di un programma. Gli heap e gli stack sono strutture dati utilizzate per questo scopo:

  • Heap: area di memoria in cui i programmi possono richiedere blocchi di memoria di dimensioni variabili.
  • Stack: area di memoria che segue una politica LIFO (Last In, First Out), in cui i dati vengono rilasciati in ordine inverso rispetto al loro inserimento.

In sintesi:

La gestione della memoria è una componente critica del sistema operativo e riguarda come la memoria viene allocata, monitorata, protetta e rilasciata per i vari processi in esecuzione. I meccanismi come la paginazione, la segmentazione, e l’uso della memoria virtuale permettono di gestire efficacemente la memoria fisica limitata, fornendo allo stesso tempo protezione e ottimizzazione delle risorse per i processi in esecuzione.

Il mercatino di informaticaxtutti.cloud
Torna in alto
Verificato da MonsterInsights