Memoria
Memory manager: la parte del so che gestisce la mem principale si chiama memory manager
Compiti di un mem manager: tenere traccia della mem libera e occupata, allocare mem ai processi e deallocarla quando non piu necessaria Nota: in alcuni casi il mem manager puo gestire anche parte della mem secondaria al fine di emulare mem principale
Nota: il mem manager e' software (la Memory Manager Unit, MMU e'hw)
Binding, loading, linking
Con il termine binding si indica l'associazione di indirizzi logici di mem (nomi di variabili, laber) ai corrispondenti indirizzi fisici.
il bindig puo avvenire:
- durante la compilazione
- durante il caricamento
- durante l'esecuzione
Binding durante la compilazione
Gli indirizzi vengono allocati al momento della compilazione e resteranno gli stessi ad ogni exec del programma. Il codice generato e' chiamato assoluto Es: codice per microcontrollori, kernel, file COM, in MS-DOS
vantaggi
- non richiede hardware speciale
- semplice
- molto veloce
svantaggi
- non funziona con la multiprogrammazione
Binding durante il caricamento
il codice generato dal compilatore non contiene indirizzi assoluti ma relativi (al PC oppure ad un indirizzo base). Il codice divanta ricollocabile
Durante il caricamento il loader si preoccupa di aggiornare tutti i riferimenti agli indirizzi di memoria coerentemente al punto iniziale di caricamento
vantaggi
permette di gestire multiprogrammazione
non richiede uso di hardware particolare
svantaggi
richiede una traduzione degli indirizzi da parte del loader, e quindi
formati particolare dei file eseguibili

vantaggi
- permette di gestire multiprogrammazione
- non richiede uso di hardware particolare
svantaggi
- richiede una traduzione degli indirizzi da parte del loader, e quindi
- iormati particolare dei file eseguibili
Binding durante l'esecuzione
L'individuazione dell'indirizzo di memoria effettivo viene effettuata durante l'esecuzione da un componente hardware apposito: la memory management unit (MMU) (che non e' il memory manager (MM))

Indirizzi logici e indirizzi fisici
Spazio di indirizzamento logico:
- ogni processo è associato ad uno spazio di indirizzamento logico
- gli indirizzi usati in un processo sono indirizzi logici, ovvero riferimenti a questo spazio di indirizzamento
Spazio di indirizzamento fisico
- ad ogni indirizzo logico corrisponde un indirizzo fisico
- la MMU opera come una funzione di traduzione da indirizzi logici a indirizzi fisici
Registro di rilocazione
Se il valore del registro di rilocazione è R, uno spazio logico 0…Max viene tradotto in uno spazio fisico R…R+MAX
esempio: nei processori Intel 80x86, esistono 4 registri base per il calcolo degli indirizzi (CS, DS, SS, ES)

Registro di rilocazione e limite
Il registro limite viene utilizzato per implementare meccanismi di protezione della memoria

Viene controllato che l'indirizzo 897 sia minore o uguale al reg del reg limite (1000) se e'cosi allora va avanti.
Loading dinamico
Consente di poter caricare alcune routine di libreria solo quando vengono richiamate
Come viene implementato?
- tutte le routine a caricamento dinamico risiedono su un disco (codice rilocabile), quando servono vengono caricate
- le routine poco utili (e.g., casi di errore rari…) non vengono caricate in memoria al caricamento dell'applicazione
Nota:
- spetta al programmatore sfruttare questa possibilità
- il sistema operativo fornisce semplicemente una libreria che implementa le funzioni di caricamento dinamico
Linking dinamico
Linking statico:
- se il linker collega e risolve tutti i riferimenti dei programmi…
- le routine di libreria vengono copiate in ogni programma che le usa (e.g. printf in tutti i programmi C)
Linking dinamico:
- è possibile posticipare il linking delle routine di libreria al momento del primo riferimento durante l'esecuzione
- consente di avere eseguibili più compatti
- le librerie vengono implementate come codice reentrant:
- esiste una sola istanza della libreria in memoria e tutti i processi eseguono il codice di questa istanza
Vantaggi
- risparmio di memoria
- consente l'aggiornamento automatico delle versioni delle librerie
- le librerie aggiornate sono caricate alla successiva attivazione dei programmi
Svantaggi
- può causare problemi di "versioning"
- occorre aggiornare le versioni solo se non sono incompatibili
- cambiamento numero di revisione e non di release
Nota: dlopen: consente di caricare librerie dinamiche a run time. E’ il metodo per implementare plug-in
Allocazione contigua
L'allocazione e' una delle funzioni principali del gestore di memoria Consiste nel reperire e assegnare uno spazio di mem fisica a:
- un prog che viene attivato
- per soddisfare ulteriori richieste effettuate dai prog durante la loro exec
Allocazione contigua:
- tutto lo spazio assegnato ad un processa deve essere formato da celle consecutive
Allocazione non contigua:
- è possibile assegnare a un processo aree di memorie separate
Nota:
- la MMU deve essere in grado di gestire la conversione degli indirizzi in modo coerente
- esempio: la MMU basata su rilocazione gestisce solo allocazione contigua
Allocazione Statica:
- un processo deve mantenere la propria aerea di memoria dal caricamento alla terminazione
- non è possibile rilocare il processo durante l'esecuzione
Allicazione Dinamica:
- durante l'esecuzione, un processo può essere spostato all'interno della memoria
Allocazione a partizioni fisse
La memoria disponibile (quella non occupata dal s.o.) viene suddivisa in partizioni. Ogni processo viene caricato in una delle partizioni libere che ha dimensione sufficiente a contenerlo
Caratteristiche
- statica e contigua
- vantaggi: molto semplice
- svantaggi: spreco di memoria, grado di parallelismo limitato dal numero di partizioni

Gestione memoria:
- è possibile utilizzare una coda per partizione, oppure una coda comune per tutte le partizioni
Sistemi monoprogrammati:
- esiste una sola partizione, dove viene caricato un unico programma utente
- esempio:
- MS-DOS free-DOS
- sistemi embedded