Note di rilascio del simulatore Virtual Memory, versione 1.0
Premessa:
Queste note sono pensate per chi voglia non solo usare
il programma ma studiarsi il codice, magari per produrne una nuova
versione modificata.
Architettura del software
La classe principale , la quale contiene il "main", è la "SETUP". [estende la classe JFrame] .
La SETUP prima di lanciare la mia finestra principale ( JFrame) carica la classe
Board. [estende la classe JPanel] .
Tale classe contiene tutte le componenti grafiche e quindi è la base della mia interfaccia con l'utente.
Su questa stessa viene caricata una classe contenente ulteriori componenti anch'essi fondamentali ,
parliamo della SET ( si pensava appunto a un "insieme di elementi"). [estende la classe JPanel].
Come organizzazione generale abbiamo questa serie di importanti e "pesanti" classi che sono la base del simulatore.
La classe che interagisce maggiormente con i restanti componenti/classi ( sia quelli menzionati che non ) e
nella quale risiede la parte logica del software, è la Board.
In particolare si farà uso di strutture di collezione di dati di tipo FIFO , perciò le classi LISTA
( implementa con lista doppiamente linkata) e QUEUE ( la quale fa uso di LISTA )
sono classi indispensabili.
Classi meno in evidenza :
MyTableModel : setta un particolare modello da me creato per impostare i settaggi di una JTable
MyTableModel3 : " "
StatTable : pannello che contiene una tabella con i risultati dei test svolti . Usa il modello MyTableModel3
Index : permette di effettuare determinate conversioni su un numero decimale
Tecniche di programmazione
Come già detto in precedenza , la parte logica si trova nella classe Board , per questo motivo molte tecniche
saranno utilizzate in quest'ultima .
File in input
File in input . E' stato implementato tramite una JTextArea la quale ha una dimensione fissa di 100 righe.
Il tasto "Create Input" si occupa della generazione delle righe tramite il metodo "creaInput()". Questo metodo, inizialmente, controlla
se vi è stata inserita una probabilità nella area di testo ,definita come "probability", e in caso affermativo usa il metodo "Address(prob, size)"
per riempire la JTextArea di input. In caso negativo si popola l'area di testo con valori del tutto casuali con il metodo "simpleAddress(size)".
Tabelle di pagine virtuali.
Sono delle JTable che caricano un modello creato su misura : MyTableModel.
Ogni qual volta si desidera impostare dei nuovi valori in queste tabelle , il tasto "Create Input VM" setta la JTable con un nuovo modello.
IMPORTANTE : le tabelle appena citate devono avere la stesso tipo di modello , quindi INIZIALMENTE tutti i valori all'interno delle celle
devono essere identici . Al primo approccio sembra semplice risolvere tale problema , basta creare un istanza del modello , e caricare tale istanza
in entrambe le tabelle , ma ciò scatena un grosso problema. Quando dovrò modificare la cella di UNA SOLA tabella dovrò far riferimento
al modello che essa contiene , di conseguenza modifico entrambe le tabelle, infatti quest'ultime fanno riferimento allo stesso oggetto
in memoria. Per ovviare a tale problema ho creato il metodo "copiaModel(model1, model2)" che presi in input due modelli distinti,
quindi con istanze diverse, copia cella per cella il valore di model2 in quello di model1.
Tasto Next
La gestione del tasto "Next" è molto importante. Il pulsante in questione aggiorna molti dei parametri utili al fine di memorizzare
i risultati del simulatore. Si consideri per esempio la matrice di Stringhe " test " la quale contiene tutti i risultati dei pageMISS/HITdei singoli test.
Il tasto Next può essere cliccato più volte fino alla fine del file di input. La gestione di tale modalità si basa sul conteggio di una
variabile chiamata " click ",la quale tiene conto del numero di riga elaborata, e della variabile "finiti " che indica il numero di test terminati.
Inoltre, parallelamente all'elaborazione dell'intero input, vengono memorizzati, tramite una coda, i dati relativi alle pagine virtuali residenti in memoria.
La coda è implementata dalla classe "QUEUE" e la struttura di appoggio è una lista doppiamente linkata , a sua volta implementata dalla classe "LISTA".
Tasto Auto Next
Il tasto "Auto Next" permette di elaborare tutte le righe di input in blocco. La tecnica usata è molto semplice .
Semplicemente faccio ciclare con un "do - while" tutto il codice eseguito dal tasto "Next" e come condizione uso una variabile
booleana denominata "cicla" la quale viene posta a "true" quando clicco sul pulsante "Auto Next" , e posta a "false" prima della fine del test.
Alla fine dell'elaborazione dell'intero input e output è necessario premere il tasto "Next" per terminare il test corrente.
Questo perchè al termine del test (cioè quando compare la finestra di avviso fine test) , le aree di testo sia dell'input
che dell'output vengono azzerate , al fine di accogliere il nuovo test .
FIFO & LRU
Per gestire gli algoritmi FIFO e LRU si fa riferimento a due istanze della classe QUEUE : "LRUqueue" e "FIFOqueue".
Le istanze hanno gli stessi metodi e quindi apparentemente uguali , ma a differenza della FIFOqueue solo la LRUqueue
usa il metodo "top( int page)". Tale metodo permette di inserire in testa
alla coda la pagina appena usata, caratteristica fondamentale dell'algoritmo LRU.
Nel caso di pageMiss la FIFOqueue, invece, si limita a togliere dalla coda la pagina caricata
meno recentemente ( dequeue() ) e inserire le nuova pagina in testa (enqueue(int page , int ind)). Nel caso di pageHit
la FIFOqueue non fa alcun azione , proprio perchè è particolarità di tale algoritmo, privilegiare le pagine appena caricate e
non quelle appena usate .
Tabella delle statistiche
La tabella delle statistiche("StatTable") è implementata tramite un pannello(JPanel) che contiene una JTable, la quale è settata con un ulteriore
modello creato su misura : MyTableModel3. Tale modello possiede un costruttore, il quale prende in input
la matrice di Stringhe "test" citata prec. , così da popolare la tabella con i dati aggiornati.
Collaudi
Il programma è stato collaudato senza riscontrare nessuna problema nei seguenti sistemi operativi: Windows 7 e Ubuntu 12.04
Il diagramma UML delle classi
Idee per ulteriori sviluppi
- Svilluppare e inserire nuove tecniche di paginazione oltre a LRU e FIFO.
- Inserire dei grafici .
- Possibilità di inserire un numero preferito di indirizzi di input.
- Scelta arbitraria sull'indirizzo di input , magari con un file di testo da pre-caricare o nell'inserimento in una area di testo nell'interfaccia stessa.
Data: Venerdì 20 Luglio 2012
Home