Gestione Avanzata della Memoria nei Sistemi Informatici

Classificato in Informatica

Scritto il in italiano con una dimensione di 12,21 KB

Requisiti di Gestione della Memoria

La gestione efficiente della memoria è cruciale per le prestazioni dei sistemi informatici. I requisiti fondamentali includono:

  • Delocalizzazione: La capacità di un processo di essere ricaricato per l'esecuzione in una zona di memoria diversa da quella originale.
  • Protezione: La necessità di prevenire interferenze (accidentali o intenzionali) tra processi, impedendo a un processo di accedere alla memoria occupata da un altro.
  • Comportamento Condiviso: Quando più processi necessitano di accedere alla stessa memoria, la gestione deve consentire tale accesso senza compromettere la protezione.
  • Organizzazione Logica: Riguarda le tecniche per strutturare la memoria, come la segmentazione, che verranno discusse in dettaglio.
  • Organizzazione Fisica: Si riferisce allo studio della gerarchia di memoria e della sua struttura fisica.

Gerarchia di Memoria

Da Wikipedia, l'enciclopedia libera

La gerarchia di memoria è un'organizzazione piramidale dei livelli di memoria nei computer. L'obiettivo è ottenere le prestazioni di una memoria ad alta velocità al costo di una memoria più lenta, basandosi sul principio della vicinanza di riferimento.

Principi Fondamentali della Memoria

I punti chiave legati alla memoria possono essere riassunti in:

  • Quantità: Maggiore è la memoria disponibile, maggiore è l'utilizzo.
  • Velocità: La velocità ottimale è quella alla quale il processore può lavorare senza tempi di attesa.
  • Costo: Il costo della memoria non deve essere eccessivo per rendere il dispositivo economicamente fattibile.

Questi tre fattori sono in competizione, richiedendo un equilibrio. Le seguenti affermazioni sono generalmente valide:

  • Minore è il costo, maggiore è il tempo di accesso.
  • Maggiore è il costo, maggiore è la capacità.
  • Maggiore è la capacità, minore è la velocità.

Si cerca quindi di avere una capacità di memoria sufficiente, con una velocità adeguata alle prestazioni richieste e un costo non eccessivo. Grazie al principio della vicinanza di riferimenti, è possibile utilizzare una combinazione di diversi tipi di memoria per ottenere prestazioni vicine a quelle della memoria più veloce.

Livelli della Gerarchia di Memoria

I livelli tipici che compongono la gerarchia di memoria sono:

  • Livello 0: Registri
  • Livello 1: Cache L1
  • Livello 2: Cache L2
  • Livello 3: Memoria Principale (RAM)
  • Livello 4: Hard Disk (con meccanismo di memoria virtuale)
  • Livello 5: Reti (considerato un livello superiore della gerarchia)

Gestione della Memoria con Partizioni Fisse

Quando le Regioni Hanno Dimensioni Fisse Uguali

Se un processo deve essere caricato in memoria:

  • Se la sua dimensione è pari o inferiore a quella delle partizioni disponibili (es. 8MB), verrà caricato in una partizione libera. Se tutte le partizioni sono occupate, il sistema operativo libererà una partizione per caricare il nuovo processo.
  • Se il processo è più grande delle partizioni disponibili (es. > 8MB), verrà caricata solo una parte del processo. Il sistema operativo si occuperà di caricare le parti rimanenti quando necessario.

Quando le Regioni Hanno Dimensioni Fisse Diverse

Esistono due approcci per assegnare un processo a una partizione:

  1. Assegnazione alla Partizione Più Piccola Adatta: Ogni processo viene caricato nella partizione più piccola che può contenerlo. Esiste una coda per ogni dimensione di partizione.
    Problema: Possono crearsi partizioni inutilizzate (vuote) o parzialmente utilizzate se non ci sono processi di dimensioni simili.
  2. Assegnazione alla Partizione Più Piccola Adatta (Coda Singola): I processi sono organizzati in una singola coda. Quando una partizione diventa libera, si cerca nella coda il processo più grande che vi si adatti.
    Problema: I processi potrebbero attendere a lungo se non ci sono partizioni che soddisfano perfettamente i loro requisiti di dimensione.

Partizioni Dinamiche

Per superare le limitazioni del partizionamento statico, è stato sviluppato il partizionamento dinamico. In questo sistema, le partizioni sono variabili in numero e dimensione. Un processo viene assegnato esattamente alla quantità di memoria necessaria.

Sebbene questo metodo sia efficiente inizialmente, può portare alla creazione di numerosi piccoli spazi vuoti (frammentazione esterna) nella memoria. Per gestire questa situazione, sono state introdotte tecniche come:

  • Algoritmi di Localizzazione: Per scegliere il processo migliore da caricare in memoria.
  • Algoritmi di Sostituzione: Per decidere quale processo rimuovere dalla memoria per far posto a uno nuovo.
  • Compattazione: Spostamento dei processi contigui per creare blocchi di memoria libera più ampi.

Concetto di Memoria Reale (Primaria)

La memoria reale o primaria è lo spazio fisico in cui i programmi e i processi vengono eseguiti. Sebbene sia più costosa della memoria secondaria, l'accesso alle informazioni in essa contenute è molto più rapido. Solo la cache è più veloce, ma a un costo significativamente maggiore.

Concetto di Memoria Virtuale

La memoria virtuale si associa a due concetti principali:

  1. Utilizzo dello storage secondario per dare alle applicazioni l'illusione di avere più RAM di quella fisicamente presente.
  2. Offrire alle applicazioni l'illusione di essere le uniche nel sistema, permettendo loro di utilizzare l'intero spazio di indirizzamento.

Concetti Relativi alla Memoria Virtuale

  • Spazio Indirizzo: Gli indirizzi coinvolti nella gestione della memoria includono:
    • Indirizzo Fisico: Una posizione reale nella memoria principale.
    • Indirizzo Logico: Un riferimento a una posizione di memoria indipendente dalla sua attuale allocazione fisica. Viene trasformato in un indirizzo fisico dall'Unità di Gestione della Memoria (MMU).
    • Indirizzo Relativo: Un tipo di indirizzo logico espresso come posizione rispetto a un punto noto.

NOTA: I programmi utente interagiscono sempre con indirizzi virtuali, senza mai vedere gli indirizzi fisici reali.

Memory Management Unit (MMU)

L'MMU, parte del processore, ha le seguenti funzioni:

  • Convertire gli indirizzi logici emessi dai processi in indirizzi fisici.
  • Verificare la validità della conversione.
  • Assicurare che il processo abbia il permesso di accedere a un determinato indirizzo di memoria.

Frammentazione

La frammentazione si verifica quando la memoria viene sprecata a causa dei metodi di gestione utilizzati.

Tipi di Frammentazione

  • Frammentazione Esterna: Esiste spazio totale sufficiente per soddisfare una richiesta, ma non è contiguo.
  • Frammentazione Interna: La memoria allocata è leggermente più grande di quella richiesta; questo spazio non utilizzato è interno alla partizione allocata.

Paging (Impaginazione)

Il paging è una tecnica di gestione della memoria in cui lo spazio di memoria è diviso in sezioni di uguale dimensione fisica, chiamate frame. I programmi sono divisi in unità logiche chiamate pagine, delle stesse dimensioni dei frame. Ciò consente di caricare una pagina di informazioni in qualsiasi frame disponibile.

Le pagine fungono da unità di archiviazione e trasferimento tra la memoria principale e quella secondaria. Ogni frame è identificato da un gestore di frame, che indica la posizione fisica della prima parola nel contesto della pagina. Le pagine di un programma non devono essere contigue nella memoria fisica, anche se il programmatore le percepisce come tali. I meccanismi di paging permettono la corrispondenza esatta tra gli indirizzi virtuali (forniti dai programmi) e gli indirizzi di memoria reale a cui fanno riferimento.

Per gestire le pagine, viene mantenuta una tabella per ciascun processo, chiamata tabella delle pagine (PMT).

NOTA: Quando si utilizzano indirizzi di memoria virtuale, questi non passano direttamente al bus di memoria, ma vengono indirizzati all'MMU.

Il paging risolve il problema della frammentazione esterna associato alla gestione di blocchi di memoria di varie dimensioni. Grazie ai suoi vantaggi, il paging è ampiamente utilizzato in molti sistemi operativi.

Caratteristiche del Paging

  • Lo spazio di indirizzamento logico di un processo può non essere contiguo.
  • La memoria fisica è divisa in blocchi di dimensione fissa detti frame.
  • La memoria è divisa in blocchi di uguale dimensione detti pagine.
  • Le informazioni sui frame liberi vengono mantenute.
  • Per eseguire un programma di 'n' pagine, sono necessari 'n' frame liberi in cui caricare il programma.
  • Viene stabilita una tabella delle pagine per tradurre gli indirizzi logici in fisici.
  • Si verifica frammentazione interna.

Vantaggi del Paging

  • È possibile avviare l'esecuzione di un programma caricando solo una parte di esso in memoria, con il resto caricato su richiesta.
  • Le pagine non devono essere contigue in memoria.
  • È facile gestire tutte le pagine, poiché hanno la stessa dimensione.
  • Il meccanismo di traduzione degli indirizzi separa i concetti di spazio di indirizzamento e spazio di memoria, risultando trasparente per l'utente.
  • Libera lo sviluppatore dalle restrizioni imposte dalle dimensioni fisiche della memoria.
  • Non è necessario caricare un intero programma in memoria per l'esecuzione, aumentando il grado di multiprogrammazione.
  • Elimina il problema della frammentazione esterna.

Svantaggi del Paging

  • Aumenta il costo del software e dell'hardware a causa della gestione di nuove informazioni e del meccanismo di traduzione degli indirizzi. Consuma più risorse di memoria e tempo CPU per l'implementazione.
  • È necessario riservare aree di memoria per le tabelle delle pagine (PMT) dei processi.
  • Si verifica il problema della frammentazione interna: se un programma richiede 5KB e le pagine sono da 4KB, vengono allocate due pagine (8KB), lasciando 3KB inutilizzati. Questo spazio inutilizzato può sommarsi significativamente.

Segmentazione

Nella segmentazione, la memoria è divisa in blocchi chiamati segmenti di lunghezza variabile.

  • L'indirizzo virtuale è composto da due parti: un segmento e uno spostamento (offset).
  • Se si fa riferimento a un segmento non presente in memoria, si verifica un segmentation fault.
  • Può portare a frammentazione esterna.
  • Facilita la protezione della memoria e riduce la frammentazione interna.

Segmentazione Paginata (Paged Segmentation)

Questa tecnica combina la segmentazione e il paging per sfruttare i vantaggi di entrambi. Invece di trattare un segmento come un'unità contigua, può essere diviso in pagine. Ogni segmento può essere descritto dalla sua tabella di pagina. I segmenti sono solitamente multipli di pagine. Non è necessario che tutte le pagine di un segmento siano presenti contemporaneamente nella memoria principale. Più pagine dello stesso segmento, anche se contigue nello spazio virtuale, non devono essere caricate contiguamente nella memoria reale. Sono necessarie più tabelle di pagina.

Voci correlate: