Title: Sistemi Operativi / 2 - Architettura / 05 - Gestione della memoria

Q: Binding alla compilazione
A: Il kernel viene compilato con il binding durante la compilazione, quando si avvia alloca fin da subito un area di memoria
Non adatto  alla multiprogrammazione

Q: binding al caricamento
A: richiede una traduzione degli indirizzi da parte del loader, e quindi
formati particolare dei file eseguibili

Q: Binding durante l'esecuzione
A: Esiste un registro di riallocazione (supponiamo con valore R (tutto nell'mmu)) che traduce lo spazio logico da 0..max allo spazio fisico R..R+max
 E registro di limite per dare un massimo all'indirizzamento  logico (dopo il qulle errore)

Q: Loading dinamico e linking statico
A: Il linking statico invece tutte le funzioni delle librerie vengono copiate.
Facendo il linking dinamico invece è possibile avere eseguibili più compatti e le librerie vengono caricate solamente una volta.esiste una sola istanza della libreria in memoria e tutti i processi eseguono il codice di questa istanza
Problema del versioning delle librerie e di solito si utilizza li major e il minus per indicare se è una versione è compatibile

Q: Allocazione dinamica statica e principali tecniche
A: Statica:
- un processo deve mantenere la propria aerea di memoria dal caricamento alla terminazione
- non è possibile rilocare il processo durante l'esecuzione
Dinamica: durante l'esecuzione, un processo può essere spostato all'interno della memoria
Allocazione a partizioni fisse: la memoria disponibilie viene suddivisa in partizioni, ogni processo viene caricato in una delle partizioni libere che ha dimensione sufficente per contenerlo
Allocazione a partizioni dinamiche:la memoria disponibile (nella quantità richiesta) viene assegnata ai processi che ne fanno richiesta, nella memoria possono essere presenti diverse zone inutilizzate
(il problema della frammentazione esterna può essere risolto tramite la compattazione che però è onerosa e non può esere utilizzata in sistemi interattivi)
Per tener conto delle aree libere nell'allocazione dinamica si usano tecniche come la bit map, che fa corrispondere ad ogni unità di allocazione un bit.
Questo va bilanicato perchè unità piccole mappa troppo grande e lenta, unita grandi frammentazione interna
Liste di puntatori: ogni elemento della lista mantiene un range di blocchi liberi.
Si può utilizzare il best fit e il first fit, e a parte la scelta, l'allocazione e la dellocazione possono essere fatte in modo constante (guarda le slide pag 33)

Q: Paginazione
A: La paginazione cerca di  ridurre al minimo (4 byte la frammentazione interna) e di eliminare la frammentazione esterna avendo un mapping.(attraverso però hardware apposito)
Per tradurre gli indirizzi, si prende la prima parte dell'indirizzo lo si confronta nella tabella guardando a quale indirizzo corrisponde e lo si traduce mentre la seconda parte meno significativa viene ricopiata
Se mettiamo troppe pagine la complessità della tabella amunta esponenzialmente, se le riduciamo la frammentazione interna aumenta.
Si usa una cache chiamata TLB: TLB è un hardware dedicato per con un insieme di registri ad alta velocità chiave-valore, le operazioni di lookup viene richiesta una chiave se è presente si ha una TLB hit, se no una TLB miss e va presa dalla memoria

Q: Segmentazione
A: È una modalità in cui si divide l'eseguibile in parti come:
- area text: che contiene il codice eseguibile (readonly) (può essere condivisa)
- area dati: può essere condivisa (di solito contiene le variabili allocate a compile time
- stack: non è condivisa ed è lo stack del programma
Il vantaggio dei segmenti e che possono avere delle informazioni sulle varie proprietà che deve avere tipo semgenti only in read come quello del codice che nel caso ci siano più processi può essere anche condiviso

Segmentazione e Paginazione diff

Q: Def: Memoria virtuale
A: Def: Tecnica che permette l'esecuzione di processi che non sono completamente in memoria
## Implementazione
Si utilizza un spazio di indirizzamento virtuale che è più grande di quello fisico, i dati indirizzati possono essere mappati sugli indirizzi della memoria principale o quella secondaria ( in caso siano richiesti e siano sulla secondaria vengono traferiti nella primaria prima)
Paginazione a richiesta(demand paging)
si utilizza la tecnica della paginazione, spostando alcune tabelle nella memoria secondaria
Si tiene una tabella delle pagine per indicare se la pagina è caricata o no, quando un processo accede ad una pagina non caricata avviene una page fault (chiamata dal processore) e il pager carica la pagina mancante in memoria aggiornando la tabella delle pagine
Swap in, swap out : sono le due azioni, da secondaria a primairia e il contrario
Gestione del page fault: intuitivamente la pagina che dovrebbe essere sostitutia dovrebbe essere quella che è "meno utile", (algoritmi di replacement)

Q: Algoritmi di replacement
A: Ogni algoritmo di rimpiazzamento cerca di minimizzare il numero di page foult.
Stringa di riferimenti: è l'insieme di indirizzi chiamati dal mio programma (a noi non ci interessa tutto l'indirizzo ci basta sapere la pagina di riferimento)
## FIFO
Quando c'è la necessità di unframe il frame che per primo è stato caricato in memoria viene rimosso.
Soggetto Anomalia di belady, cioè aumentando la memoria può aumentare il numero di page fault
## Algoritmo Min (Ottimale)
Selezione come pagina vittima quella che verrà acceduta nel futuro più lontano. (totalmente teorico perchè non si ha a priori la stringa di riferimenti)
## Algoritmo LRU (last recently used)
Def: seleziona la pagina che è stata meno utilizzata recentemente nel passato
È necessario il supporto hardware dall'MMU che si tenga un contantore ad ogni accesso, bisogna copiare il valore nella tabella delle pagine e ricercare il minimo nella tabella.
Conclusioni: non è soggetto all'anomalia di belady ma è troppo costoso in termini di hardware da realizzare (aggiunge troppa complessità alla MMU)
## Algoritmo di stack
Un algoritmo di stack non genera l'anomalia di Belady (LRU è a stack)
## Caso reale
## Additional refernce Bits algorithm
## Approssimare LRU (Scecond-chance algorithm)
(Utilizzata nei casi si abbia 1 reference bit)
Le pagine di memoria vengono gestite come una lista circolare, a partire dalla posizione successiva all'ultima pagina caricata, si scandisce la lista con la seguente regola:
- se la pagina è stata acceduta il reference bit da 1 viene messo a 0
- se la pagina non è stata acceduta, reference bit è zero e viene presa come vittima

Algoritmo di allocazione, allocazione locale/globale

Q: Working set e Treshing
A: Def: Il treshing accade quando il sistema passa più tempo a swappare pagine che a fare computazioni
Per capire se un sistema è in treshing si può utilizzare confrontare la dimensione del working set con il numero di frame. Se il ws è maggiore allora si ha che il sistema è in treshing (quindi va diminuita la multiprogrammazione fermando qualche processo).