9.1 Caratteristiche
Il sistema operativo non ha sempre avuto una interfaccia grafica.
9.1.1 In generale
Principalmente è un gestore delle risorse come il disco, la CPU, l’output e l’input.
È qualcosa che si infrappone come interfaccia fra le applicazioni e quello che è presente sotto.
9.1.2 Ambiti principali
9.2 Paginazione
Al programma non interessa se effettivamente è presente in memoria fisica questa quantità di memoria, si di solito basta sempre.
Ci sono 3 casi:
- se la necessità di memoria è anche superiore alla memoria virtuale esistente allora c’è l’errore out-of-memory
- Se è maggiore della fisica ma minore, dovrà essere gestita dalla paginazione e simili.
- Se è minore della memoria fisica allora tutto ok!
Implementazione
-
Slide
9.2.1 Indirizzi virtuali e paginazione
Vogliamo utilizzare tutti i bit per l’indirizzamento, anche se questi superano effettivamente la memoria effettiva, questa astrazione permette di facilitare al programma la comprensione di tutto. (ma il programma è molto più lento perché ogni volta doveva ricaricare la pagina di memoria).
9.2.2 Hit and fault
Si ha un page hit se la pagina è caricata, altrimenti è page fault e si deve ricaricare tutta la memoria per il programma.
9.2.3 Memory Management Unit
-
Esempio
Questo è il chip che si differenzia dalla cache. Una pagina virtuale può essere messo in qualunque pagina reale.
Tabella gestita dal sistema operativo che tiene in memoria le pagine che sono usate e quelle no.
quindi se è 1 (in memoria) si chiama working set.
9.2.4 Algoritmi di paginazione (2)
Ci dicono quale pagina togliere dalla memoria principale per sapere quale rimpiazzare con la nuova pagina.
I principi che sono presenti per questi algoritmi di paginazione, sono molto simili ai principi della località spaziale e temporale presenti per la Cache
Quelle presentate sono LRU e FIFO, si può dire che il primo funziona meglio mentre il secondo è più veloce, quindi bisogna vedere i tradeoff.
Questi algoritmi (in particolare La Least Recently Used è utilizzata anche in Memoria per la cache).
9.2.5 Dirty bit
Si aggiunge un bit che ci dice se una pagina è stata sporcata o meno (così possiamo decidere se scrivere in memoria o no).
9.2.6 Frammentazione interna
Non vorremmo sprecare un pezzo del blocco, sprecheremmo mezzo blocco.
Per ovviare a questo (il fatto di non utilizzare l’intero blocco si dice frammentazione interna)
9.3 Segmentazione
9.3.1 Problemi della paginazione
Questa opzione non è più presente nella realtà, dato che si utilizza sempre la paginazione.
Problemi della paginazione
- Evitare la frammentazione interna
- Le pagine sono scollegati dai programmi (potrebbe essere che un array sia scollegato in più pagine, ho mano manovra).
Si divide la memoria in segmenti che vengono dati a parti del processo (esempio i/o ) e altro a seconda dello scopo
9.3.2 In memoria: frammentazione esterna
Dato che i segmenti non sono della stessa grandezza, c’è un pò di complicazione mentre si trattano queste cose. ecco che si ha il fenomeno di frammentazione esterna in questo caso.
L’operazione di compattare la memoria è moolto costosa…
-
Esempio
9.3.3 Scelta del “buco” (2)
Ci sono due modi principali per scegliere la zone in cui mettere il programma
- Best Fit: (ci metto più tempo perché devo cercare il buco migliore, ma poi trovo quello più economico in cui c’è meno spazio inusato)
- First fit: è il più veloce perché metto subito sul primo blocco, però grande spazio potrebbe essere inutilizzato
9.3.4 Combinazione segmentazione e paginazione
Si possono mischiare: una parte per la segmentazione e poi la pagina per il segmento e da questo si raggiunge un blocco.
-
Esempio
9.4 Gestione del linking !
9.4.1 il file oggetto
Ogni file viene compilato assumendo che parta dall’indirizzo zero, poi questi vengono riorganizzati con successo da linker
- Esempio
9.4.2 Esempio
9.4.3 La rilocazione
La rilocazione per chiamate di funzioni esterne (di sistema è semplice), poi bisogna rilocare anche pointers e branches., si utilizza un dizionario di rilocazione.
9.4.4 Indirizzamento dinamico
Viene compilato normalmente, e viene linkato nel momento di esecuzione grazie al sistema operativo
-
Esempio
Indirizzamento dinamico
Viene compilato normalmente, e viene linkato nel momento di esecuzione grazie al sistema operativo
-
Esempio