Please enable JavaScript.
Coggle requires JavaScript to display documents.
Gestore della memoria - Coggle Diagram
Gestore della memoria
-
Il problema principale che deve risolvere è trasformare il programma eseguibile in un processo in esecuzione
Programmi vengono messi in coda d'entrata dalla quale ne verrà selezionato uno. Durante la generazione del file eseguibile compilatore e linker generano istruzioni e indirizzi senza sapere dove il programma o i dati saranno caricati i memoria. Vengono dati indirizzi logici che al caricamento diventeranno indirizzi fisici. Da qui si hanno 2 possibili situazioni
Rilocazione statica - Al caricamento viene individuato indirizzo base e viene sommato a riferimenti presenti nel programma (offset)
Rilocazione Dinamica - Caricato in zona libera e al momento dell'esecuzione nel registro di rilocazione RL viene inserito il valore della prima locazione di memoria centrale. Istruzione per istruzione si calcola l'indirizzo fisico sommando a ogni indirizzo logico il valore del registro RL
Il dispositivo hadware in grado di associare indirizzi virtuali a indirizzi fisici è il Memory Management Unit (MMU)
Oltre a registro di rilocazione RL (che contine indrizzo fisico più piccolo) c'è il registro limite che contiene massimo indirizzo utilizzabile (utilizzato per efferttuare controlli)
Il calcolo degli indirizzi logici viene effettuato nella fase di linking, mentre il passaggio da indirizzo logico a fisico avviene nella fase di binding
Loading - Nei sistemi multiprogrammati il continuo caricamento e scaricamento dei programmi produce una frammentazione della memoria creando piccole zone libere non contigue. Inefficienti per caricare il programma. Ecco delle soluzioni per ottimizzare l'uso della memoria:
Caricamento dinamico - Si caricano in memoria le parti fondamentali del programma e lasciare sul disco solo moduli che al momento di una richiesta verranno caricati in memoria
Overlay - Si individuano parti che possono essere tra loro "alternative"(che non servono contemporaneamente) e che verranno caricate in memoria nella stessa zona alternativamente
Swapping - Scaricamento dei processi temporaneamente inattivi dalla RAM al disco per liberare spazio.
Partizionamento - Si riserva ad ogni processo una dimensione fissa di memoria per semplificare swapping e ridurre frammentazione
Tecniche di allocazione della memoria centrale:
a) Sistema monoprogrammato;
-allocazione contigua
' a partizione singola
b) Sistema multiprogrammato;
-allocazione contigua
' a partizioni fisse
' a partizioni variabili (o dinamiche)
-allocazione non-contigua (memoria virtuale)
' paginazione
' segmentazione
' segmentazione con paginazione :
Partizionamento - Si suddivide memoria in partizioni e si assegna una partizione a un processo indipendentemente dalla dimensione. Partizioni troppo piccole -> frammentazione Partizioni troppo grandi -> spreco memoria
Partizione fissa - Dimensioni partizioni definite all'inizializzazione del sistema. Creata tabella indicando stao partizioni e se sono libere/occupate. Si possono verificare 2 problemi:
Frammentazione Interna - Si potrebbe sprecare una partizione grande per un job molto piccolo, ma ciò si può risolvere creando una coda di ingresso per i job e percorrendola cercando i job di grandi dimensioni o dimensioni tali per poter essere contenuto in una partizione. Facendo ciò però i piccoli job vengono discriminati
Frammentazione Esterna - Dopo diverse allocazioni e deallocazioni lo spazio libero appare suddiviso in piccole aree e la dimensione di u processo può essere può essere più grande di una qualunque partizione
Partizione variabile - E' possibile modificare il numero di dimensione di ogni singola partizione. E' complicato per il SO che deve decidere dove caricare i processi tramite algoritmi di allocazione dinamica. Quattro possibili alternative:
-
-
-
-