Progetto calcolatore indirizzi fisici
Abbiamo uno spazio di indirizzamento di 16 bit con pagine di 4K.
Essendo la dimensione della memoria di 64K ( 2^16) abbiamo lo spazio di memoria logica diviso in 16 pagine (= 64K/4K).
Scrivere un programma in C, ad esempio chiamato calcola_indirizzi_fisici, che simula il lavoro svolto del gestore della memoria del SO che trasforma tramite la tabella delle pagine l'indirizzo logico in indirizzo fisico di memoria.
Il programma di simulazione della memoria all'inizio per inizializzarsi chiede:
quante pagine occupa il programma che il simulatore gestirà ;
vi permette di inserire la corrispondenza tra numero di pagina e frame (N° frame pagine 0: .... poi N° frame pagina 1: ....., ecc );
Controlla anche che due pagine non corrispondano per errore allo stesso frame ad esempio.
Vi chiede di inserire l'indirizzo logico (con messaggio di errore se l'indirizzo logico supera il numero di pagine del processo - ad esempio se avete detto che il vostro processo occupa 3 pagine non posso dargli in input un indirizzo logico IL >= 3 * 4K - 1 = 3 * 4 * 1024 - 1
) e calcolare il corrispettivo indirizzo fisico come numero decimale e come sequenza di bit dell'indirizzo. Tutto questo mettetelo in un ciclo con la possibilità di fare più conversioni da indirizzo logico a indirizzo fisico. Per fare terminare il programma inserite la stringa quit ad esempio al posto dell'indirizzo.
ESEMPIO INPUT/OUTPUT PROGRAMMA
Nella prima riga viene mandato in esecuzione il programma calcola_indirizzi_fisici, il seguito sono messaggi di input/output (dove c'è .... è l'input dell'utente):
Il programma può essere visto quindi come un simulatore del lavoro che fa l'MMU per un singolo processo: dato un indirizzo logico lo converte nell'indirizzo fisico in base alla page table del processo.
SUGGERIMENTI
Tenere una struttura per contenere i frame allocati e quelli liberi, ad esempio un array di interi con 0 se il frame ha una pagina caricata o 1 se il frame è libero. Meglio ancora se si utilizza una maschera di bit.
Una struttura dati invece per tenere in memoria la tabella delle pagine del processo che vogliamo simulare.
Scrivere una procedura che dato un intero converta in array che rappresenta la codifica binaria.
Scrivere una procedura che da un array che rappresenta la codifica binaria lo converte in intero.
Es di strutture dati per tabella delle pagine e frame liberi:
IMPLEMENTAZIONE
In nodejs.
Last updated
Was this helpful?