Note di rilascio del simulatore JCacheSim, versione 1.0 JCacheSim è strutturato in tre classi: -Tabella.java: con codice per una tabella con colonne non mobili,celle non editabili, possibilità di rinomina delle colonne grazie al metodo Rinomina(), settarne le dimensioni grazie al metodo Dimension() e riempirla con valori presi da una matrice grazie al metodo Riempi(); -JCacheSim.java: con codice del main per l'avvio del programma; -Progetto.java: Questa è la classe dove si trova il costruttore che crea le tabelle,i JButton,la JTextFild,la JTextArea per le hit e le miss, e i vari pannelli che contengono tali oggetti. Inoltre vi sono i metodi per la gestione della simulazione della cache. Di seguito sono presentati i metodi e il loro funzionamento: -Progetto() (Metodo Costruttore): crea tre tabelle del tipo definito dalla classe Tabella.java, una per la memoria principale composta da 16 righe e 8 colonne,una per la cache da 4 righe e 4 colonne e una per gli indirizzi random da 10 righe e 1 colonna. Crea anche i JButton ,la JTextField ,la JTextarea,le etichette per i bottoni e le tabelle e i messaggi di errore. Infine crea i pannelli con i vari layout e,dopo avervi posto all'interno i dovuti oggetti, li inserisce nel frame. -Randomize(): inserisce i valori in memoria con formato esadecimale, tali valori verrano solo successivamente copiati nella relativa tabella per la visualizzazione grafica; -Binario(): genera un indirizzo a sette bit binario pseudo casuale; -IndexRand(): inserisce gli indirizzi casuali nella matrice degli indirizzi che poi verranno copiati nella relativa tabella per la visualizzazione grafica; Restituisce la matrice degli indirizzi; -binrand(): genera un numero esadecimale casuale da inserire in memoria; Restituisce una stringa contenente il valore; -BintoInt(): prende in input una stringa contenente l'indirizzo, l'inizio della parte da convertire e la fine, fa una conversione della sottostringa interessata a long, ne considera il modulo dieci e la divide per dieci al fine di ottenere le cifre decimali. Restituisce la sottostringa come intero decimale; -isValid(): verifica la validità dell'indirizzo immesso ovvero controlla che sia binario e di 7 bit poichè essendo la memoria principale di 16 blocchi divisa in 4 segmenti da 4 blocchi ciascuno con 8 parole di memoria, occorreranno 2 bit per selezionare uno dei 4 segmenti (combinazioni:2^2=4), 2 bit per selezionare uno dei blocchi di memoria (combinazioni:2^2=4) e 3 bit per selezionare una delle 8 parole di memoria nel blocco (combinazioni:2^3=8); -Read(): operazione di lettura da memoria si divide in due casi principali ovvero quello di inserimento di indirizzo da tastiera e quello di indirizzo preso dalla matrice degli indirizzi. Questo metodo divide l'indirizzo in tre parti rispettivamente TAG,BLOCK,WORD verifica la validità della copia in cache controllando se la riga è vuota o è presente una linea di memoria diversa, copia i valori di tag,block,word nell'opportuna locazione in cache, e mette in evidenza anche il byte di memoria interessato.Controlla inoltre le avvenute hit e miss e ne gestisce i cambiamenti grafici della JTextArea; -Write(): operazione di scrittura si divide in due casi principali ovvero quello di inserimento da tastiera dell'indirizzo e quello di prelievo dalla matrice degli indirizzi. Anche questo metodo divide l'indirizzo in tre parti rispettivamente TAG,BLOCK,WORD verifica la validità della copia in cache contollando se la riga è vuota o è presente una linea di memoria diversa,copia i valori di tag,block,word nell'opportuna locazione in cache, e mette in evidenza il nuovo byte scritto in memoria con protocollo di write-through ovvero aggiornando oltre che la cache anche la memoria principale. Controlla inoltre le avvenute hit e miss e ne gestisce i cambiamenti grafici della JTextArea; Tecniche di programmazione Programmazione a oggetti in linguaggio Java con creazione dei metodi precedentemente descritti. Collaudi Il progetto è stato collaudato su MS Windows 7 dagli IDE Netbeans ed Eclipse e su Linux Ubuntu 12.0.4 da linea di comando. Idee per ulteriori sviluppi - Cache con altri tipi di corrispondenza, ovvero associativa (in tal caso con algoritmi di sostituzione diversi: LRU, FIFO ecc.) e associativa a gruppi (idem). - Opzioni di utente per vari parametri, fissi in questa versione del simulatore: per esempio, dimensione della cache, dei blocchi, dei gruppi, algoritmo di sostituzione. Tali opzioni possono essere utili al confronto degli effetti di tali scelte sulla prestazione. - Funzionalità di raccolta di statistiche (tasso di hit, tasso di miss ecc.) relative a varie iterazioni della simulazione, eventualmente con opzioni diverse. - Cache con ulteriori livelli per rendere il simulatore il quanto più realistico possibile.