Limiti e prospettive di ASIM

Transcript

Limiti e prospettive di ASIM
Limiti e prospettive di ASIM
Una serie di prove di simulazione eseguite con il programma ASIM hanno
consentito di verificare, in prima approssimazione, fino a che punto le
specifiche di progetto formulate nel primo capitolo siano state soddisfatte.
Alcune prove sono state dedicate alla verifica del corretto funzionamento del
programma, altre a stabilire l' effettiva possibilità di simulare le diverse
architetture esaminate in 1.3; nel terzo capitolo sono stati presentati alcune
configurazioni e programmi per la simulazione da utilizzare come esempi d'
uso.
In questo capitolo si cercherà di evidenziare i limiti riscontrati e di suggerire le
modifiche e gli sviluppi possibili.
5.1 La procedura per aggiungere nuovi componenti ad ASIM.
Il limite principale dell' attuale versione di ASIM è la scarsa disponibilità di
componenti simulabili.
Questo aspetto è stato però tenuto in conto in fase di progettazione ed infatti l'
ambiente è stato costruito in modo da rendere il più possibile semplice l'
aggiunta di nuovi componenti.
Il primo aspetto da sottolineare riguarda l' insieme di conoscenze necessarie per
programmare la simulazione di un dispositivo in ASIM.
Ovviamente sono date per scontate la conoscenza del linguaggio C++ e del
comportamento interno del dispositivo da simulare; qui si vuole mettere l'
accento sul livello di conoscenza di ASIM e dell' ambiente di sviluppo
Microsoft Visual C.
In generale, se il componente non è particolarmente complesso, non è
necessario conoscere sull' ambiente Windows molto di più di quanto detto nel
capitolo due. L' interazione con l' ambiente Windows è gestita, infatti, nelle
classi predefinite ed in quelle già disponibili in ASIM per cui il programmatore
non ha necessità di una conoscenza dettagliata su concetti riguardanti la
gestione delle finestre, il multitasking, lo scambio di messaggi, l' input/output.
Il compito è ulteriormente semplificato dalla disponibilità del sorgente delle
classi che implementano i dispositivi predefiniti; questo può essere infatti
ampiamente riutilizzato. Opportuna è invece una certa conoscenza delle
Microsoft Fundation Classes.
Capitolo 5: Limiti e prospettive di ASIM.
2
Per quanto riguarda ASIM, è indispensabile avere una conoscenza a livello di
utente del programma; per quanto riguarda la struttura interna, dovrebbe essere
sufficiente quanto detto nel capitolo quattro (insieme alla descrizione
dettagliata delle principali classi presente in appendice) e quanto si dirà di
seguito.
La programmazione di componenti complessi e la modifica dell' ambiente
stesso richiedono la conoscenza di tutte le classi e del codice sorgente di ASIM
che è allegato a questo lavoro di tesi.
Per inserire la simulazione di un nuovo componente occorre innanzi tutto
individuare, in base alle sue proprietà, a quale dei quattro tipi di dispositivi
previsti nel modello (paragrafo 1.4), esso appartiene; ciò consente di stabilire
da quale classe base (paragrafi 4.4, 4.5, 4.6, 4.7) ereditare quella in cui saranno
raccolti i metodi e i dati necessari per simulare il nuovo componente.
La classe base offre già implementate molte delle funzionalità di cui si può aver
bisogno e richiede di riscrivere un certo numero di funzioni "virtual"; questo
dovrebbe semplificare la stesura del codice indicando le linee guida.
Alcuni dei metodi "virtual" (funzione e parametri di scambio sono descritti, per
ogni classe base, in appendice) da riscrivere sono comuni a tutti i tipi di
dispositivi perchè sono definiti nella classe CBaseWnd:
- OnReset, effettua i controlli sui collegamenti e riporta il dispositivo nelle
condizioni "iniziali" (paragrafo 3.2.4);
- ClockProcess, include le istruzioni necessarie ad implementare le operazioni
che il dispositivo deve eseguire durante un passo di simulazione;
- PaintScreen, cura la presentazione dei dati (tipicamente registi interni) nella
finestra video associata al dispositivo;
- ModifyReg, consente la modifica del contenuto dei registri;
- ShowReg, mostra a video i registri se questi non appaiono già nella finestra;
- ModifyTheMenu, consente di presentare, se necessario, dei comandi specifici
nel menù associato al dispositivo.
Altri metodi sono specifici per un tipo di componente:
- RunInstruction, include le operazioni necessarie ad eseguire un' istruzione
macchina (solo processore);
- RunException, include le istruzioni necessarie per iniziare a servire un'
interruzione (solo processore);
- OnAccessDev, consente la lettura e scrittura dei registri accessibili da bus
(device e nodo);
- OnSetFromOut, riceve in un device i messaggi da un altro device;
Capitolo 5: Limiti e prospettive di ASIM.
3
- OnLinkxMsg, riceve in un nodo i messaggi da un altro nodo.
Come detto in 4.7.2, per un nodo di macchina Data Flow è conveniente
utilizzare come classe base CDfNodeWnd anzichè CNodeWnd.
In generale, riscrivere questi metodi è tutto quanto occorre per la simulazione di
un componente; nuovi metodi possono essere introdotti per gestire delle
operazioni interne al dispositivo (un esempio possibile è l' utilizzo di metodi per
l' esecuzione dei singoli codici operativi di un processore).
Una volta costruita la classe relativa al nuovo componente, l' inserimento nell'
ambiente è molto semplice e richiede due sole operazioni.
Supponendo che il dispositivo da aggiungere sia un device di nome NUOVO e
che la classe che ne descrive il comportamento sia CNuovoWnd (file di
intestazione in "nuovo.h", file sorgente in "nuovo.cpp"), le due operazioni sono:
1) aggiungere la linea #include "nuovo.h" nel file "asim.h";
2) aggiungere, nella procedura CMainWindow::NewElem, le linee:
else if (Name == "NUOVO")
pElemWnd = (CDeviceWnd*) new CNuovoWnd(Nmbr);
Detta procedura è l' unica presente in un file denominato "tomodify.cpp";in
appendice (si veda CMainWindow::NewElem) è spiegato, con un esempio,
dove inserire le due linee di codice.
Infine occorre aggiungere "nuovo.cpp" al file di progetto ("asim.mak") e
ricompilare il tutto (queste operazioni sono descritti nei manuali dell' ambiente
Microsoft Visual C). Nella nuova versione di ASIM che si ottiene, sarà
possibile, a questo punto, simulare configurazioni che includono il device
NUOVO.
5.2 Suggerimenti per l' aggiunta di nuovi componenti.
Quando si è interessati a simulare più componenti dello stesso tipo, aventi
proprietà comuni, può essere utile non ereditare direttamente ogni dispositivo
dalla classe base, ma introdurre una classe intermedia che raccolga tutte le
proprietà comuni; ciò consente sia di semplificare la programmazione dei
dispositivi sia di contenere l' espansione del codice di ASIM. Un esempio di
tale situazione può essere la simulazione di tipi differenti di stampanti o di
dischi o di nodi di macchine data flow; per quest' ultimo caso è stata infatti
introdotta in ASIM la classe CDfNodeWnd da cui ereditare un generico nodo
data flow.
Capitolo 5: Limiti e prospettive di ASIM.
4
La finalità didattica dell' ambiente di simulazione suggerisce l' insieme di
componenti non presenti per i quali è più sentita l' esigenza di disporre di un
simulatore. Tra questi si ricordano:
- processori, come Intel 8086 o Zilog Z80;
- interfaccia seriale;
- "disk controller" + disco;
- "DMA controller";
- "priority interrupt controller" (PIC);
L' inserimento di un nuovo processore richiede in generale uno sviluppo di
codice notevole per implementare l' esecuzione di tutti i codici operativi, ma la
classe CCPUWnd offre tutto il supporto necessario per la parte che riguarda l'
interazione con l' ambiente; per questo l' inserimento di un processore non
presenta difficoltà particolari. Il sorgente della classe che implementa il
Motorola 68000 (M68000) può essere un valido esempio ed offrire del codice
riutilizzabile.
Neanche l' inserimento di un' interfaccia seriale presenta particolarità rilevanti;
inoltre il codice da produrre in questo caso è limitato. L' unico aspetto che
richiede maggiore attenzione è la codifica da adottare per i messaggi (paragrafo
4.6.1) che devono essere scambiati sul collegamento tra due porte seriali; spunti
interessanti si possono trarre dal sorgente della classe C6821PIAWnd che
implemeta in sostanza un' interfaccia parallela (Motorola 6821 PIA).
Per la simulazione di un "disk controller" l' unica fonte di complicazione può
essere l' interazione con un "DMA controller" (se previsto); in questo caso
potrebbe essere utile il trasferimento in blocco di un record fisico sia da disco
sia sul bus.
Il problema del trasferimento in blocco di informazioni complesse riguarda non
solo il caso del "disk controller", ma in generale il collegamento tra device e tra
nodi e il trasferimento su un bus; merita pertanto una particolare attenzione.
Nei paragrafi 4.6.1 e 4.7.1 è stato detto che i collegamenti tra device e tra nodi
avvengono attraverso uno scambio di messaggi, che ogni messaggio ha due
parametri e che a quello a trentadue bit è in genere associato il dato da
trasmettere; quindi sembrerebbe che al più una doubleword possa essere
trasferita con un sol messaggio. In realtà poichè tutti i task possono accedere
alla memoria del PC, è possibile trasferire con un messaggio un oggetto
comunque complesso, inviando il puntatore a questo oggetto; più precisamente
il modo di procedere è il seguente:
- Si costruisce una classe dinamica ereditandola da CObject (una classe
Capitolo 5: Limiti e prospettive di ASIM.
5
dinamica consente di creare, con il comando "new", oggetti che vengono
allocati nell' area di "heap"); essa deve contenere l' insieme dei dati da
trasmettere (ad esempio il record fisico, nel caso del disk controller, o una
matrice, nel caso di macchina data flow i cui nodi eseguono operazioni su
matrici).
- Ogni qualvolta si deve trasferire l' informazione, il dispositivo mittente crea
un oggetto della classe con il comando "new" che restituisce il puntatore all'
oggetto nello heap; questo puntatore, conservato in una variabile, è un dato a 32
bit e può essere convertito nel tipo LONG; il mittente invia il messaggio che
avrà come secondo parametro (che è un LONG) il valore del puntatore.
- Il dispositivo ricevente converte il parametro LONG nuovamente in puntatore
all' oggetto della classe che racchiude le informazioni e può quindi disporre
delle informazioni giunte.
- Intanto il mittente avrà cancellato, appena dopo l' invio del messaggio, la
variabile contenente il puntatore (variabile posta a NULL).
Quest' ultimo punto è importante per conservare la validità semantica del
trasferimento: un oggetto, una volta inviato, non è più disponibile al mittente (i
due task non devono poter operare contemporaneamente sull' oggetto
contenente le informazioni).
Quanto detto vale per il trasferimento di informazioni complesse tra device e tra
nodi, ma un discorso simile è possibile fare per il trasferimento di blocchi di
bytes verso bus/memoria. Il trasferimento di dati sul bus, infatti, è sempre
implementato con uno scambio di messaggi (paragrafo 4.4.2); basta utilizzare il
membro dato del processore che contiene il dato (m_DataBus, paragrafo 4.5)
per contenere il puntatore; il primo parametro del messaggio che normalmente
porta l' informazione riguardante il tipo di accesso (lettura, scrittura, modifica;
di byte, word, doubleword) potrà ammettere nuovi valori per identificare il
trasferimento di blocchi di byte di desiderate dimensioni.
Per la simulazione di un disco, chiarito come sia possibile il trasferimento in
blocco di un record fisico (è ovviamente possibile il tresferimento del record
byte per byte, ma ciò rallenterebbe enormemente la simulazione), resta da
esaminare il problema di come simulare la memoria di massa; le strade possibili
sono due:
- utilizzare la memoria del PC;
- utilizzare il disco del PC.
La prima soluzione consente una simulazione più veloce, ma è praticabile solo
se si sta simulando un disco di limitate dimensioni; per un migliore
Capitolo 5: Limiti e prospettive di ASIM.
6
sfruttamento della memoria è consigliabile adottare la stessa tecnica adoperata
per simulare le RAM e ROM (paragrafo 4.4.1).
La seconda soluzione è un pò meno efficiente, ma consente di simulare dischi
di maggiori dimensioni; per realizzare un tale dispositivo possono essere utili le
considerazioni svolte sulla ridirezione dell' input/output e sulle classi CIO_Data
e CIO_DataStr (paragrafo 4.6.2).
Il tentativo di introdurre un DMA controller o un PIC mette in evidenza un
grave limite del modello definito in 1.4: non è stato previsto per un dispositivo
processore (tipo in cui secondo il modello devono rientrare anche DMA e PIC)
la possibilità di avere registri accessibili da parte di altri processori, cosa che è
invece indispensabile. Purtroppo la struttura interna di ASIM (proprio perchè
nata dal modello) non consente di aggiungere semplicemente questa possibilità.
La soluzione migliore è riformulare il modello aggiungendo un nuovo tipo base
e riprogettare ASIM di conseguenza.
E' tuttavia possibile trovare soluzioni più semplici:
- il PIC può essere ricavato da CDeviceWnd aggiungendo la possibilità di
ricevere il messaggio WM_INTERRUPT e di utilizzare oggetti della classe
CMemInt;
- il DMA può essere ricavato da CDeviceWnd aggiungendo la possibilità di
creare un oggetto della classe CCPUWnd cui affidare il trasferimento dei dati in
parallelo al funzionamento del DMA; esso sarebbe in questo modo simulato da
due task: uno per il controllo ed uno per il trasferimento vero e proprio.
Infine l' ultima osservazione riguarda l' inserimento di componenti come gli
INMOS Transputer. La soluzione consigliata è la seguente:
ereditare la classe che ne implementa il comportamento da CNodeWnd e
consentire ad essa di poter creare un oggetto della classe CMainMemory
(paragrafo 4.4.1) per la memoria locale e un oggetto di una classe ereditata da
CCPUWnd (paragrafo 4.5) per l' elaborazione vera e propria.
In questo modo il dispositivo avrà due task ad esso associati in grado di operare
in parallelo: uno per gestire la comunicazione ed uno per le elaborazioni.
Capitolo 5: Limiti e prospettive di ASIM.
7
5.3 Limiti e prospettive di ASIM.
Dei limiti derivanti dalla scarsità di componenti simulabili e dalle imprecisioni
del modello si è detto nei paragrafi precedenti. Tali limiti condizionano
direttamente sia l' uso sia la possibilità di espandere l' ambiente.
Altri limiti ad un uso ottimale di ASIM vengono dalla mancanza di un "help in
linea" e di un prodotto software che completi l' ambiente integrato, offrendo la
possibilità di scrivere, compilare e correggere i programmi in linguaggio
macchina destinati ai vari processori; attualmente è necessario, per eseguire il
ciclo di sviluppo, utilizzare un "editor" ed un assemblatore (asm.exe per
Motorola 68000) non integrati, il che rallenta le operazioni. Sarebbe quindi
opportuno, per completare l' ambiente integrato per la simulazione di sistemi a
microprocessore, realizzare un programma in ambiente Windows che
sopperisca a detta carenza.
Nel capitolo 3, nel descrivere la creazione di una configurazione, non si è posto
alcun limite al numero massimo di componenti simulabili, ma di fatto questo
non può superare la ventina. Detto numero è limitato:
- dall' area video che non consente di visualizzare troppe finestre; in reltà nel
corso di una simulazione solo un sottoinsieme delle finestre è utile che sia
visibile; la possibilità di sovrapporre e di ridurre ad icona le finestre consente di
simulare molti più componeti di quanti possono essere contemporaneamente
visibili (al più sette o otto);
- dalla velocità di esecuzione di un passo di simulazione che si riduce all'
aumentare dei componenti.
Poichè nel progetto di ASIM non è stato svolto uno studio accurato delle
prestazioni, ma ci si è solo preoccupati di trovare, di volta in volta, soluzioni
efficienti a singoli sottoproblemi, è possibile (ed auspicabile) un riesame del
codice per incrementare la velocità di esecuzione di un passo di simulazione. L'
ambiente di sviluppo software Microsoft Visual C offre il supporto necessario
all' ottimizzazione delle prestazioni (Microsoft Profiler).
In ogni caso la velocità sarà limitata dalla macchina hardware disponibile ed in
particolare dal fatto di disporre di un sistema con una sola CPU. ASIM è stato
infatti progettato per PC; a livello di macchina astratta (PC più Windows) i
componenti elaborano in parallelo, imponendo che la durata di un passo di
simulazione sia quella del passo di simulazione del componente più lento, ma in
realtà il tempo impiegato ad eseguire un singolo passo è dato dalla somma dei
tempi impiegati da ciascun componente. La soluzione adottata per la
Capitolo 5: Limiti e prospettive di ASIM.
8
simulazione è valida su sistemi monoprocessore, ma non su sistemi
multiprocessore; in quest' ultimo caso è possibile trovare tecniche più efficienti
("roll back").
Si è citato più volte l' ambiente di sviluppo software Microsoft; a tal proposito è
però dovuta una precisazione: ASIM è stato sviluppato in Microsoft C/C++
versione 7.0 che è accompagnato dalle Microsoft Fundation Classes (MFC)
versione 1.0, ma è stato poi convertito in Microsoft Visual C che è
accompagnato dalle MFC versione 2.0. Purtroppo le due versioni di MFC non
sono perfettamente compatibili ed è stato necessario modificare parti di codice;
la modifica è stata eseguita seguendo le direttive della Microsoft ("Tecnical
note #19") ed utilizzando un metodo "veloce" che però non garantisce (a detta
della stessa Microsoft) né il corretto funzionamento della nuova versione del
programma né la compatibilità con future versioni del Visual C. Potrebbe
essere allora utile modificare il programma secondo le regole della versione 2.0
di MFC; le direttive per eseguire le modifiche in maniera "completa" sono
disponibili ancora nella "Tecnical note #19".
Tra i requisiti del simulatore didattico dati in 1.5 compare anche la richiesta di
poter scambiare dati con altri prodotti utilizzati per la simulazione funzionale di
sistemi. Si potrebbe, ad esempio, esplorare la possibilità di realizzare in ASIM
la simulazione del controllo a microprocessore di un sistema simulato in Matlab
4.0. La soluzione più semplice è la realizzazione di un filtro che renda
compatibili i file dato di Matlab con i file dato di ASIM (file con estensione
".ios", paragrafi 3.2.5 e 4.6.2). Una soluzione più efficiente è lo scambio dei
dati in memoria, sfruttando il supporto offerto da Windows al collegamento e
all' inserimento di oggetti ("OLE support").
Sebbene ASIM, per i limiti che presenta, non riesca a soddisfare pienamente
tutti i requisiti di un simulatore didattico destinato alla parte esercitativa dei
corsi del settore informatico, questo lavoro di tesi può costituire un utile punto
di partenza per una più efficiente soluzione al problema posto.
In conclusione si richiamano gli elementi di maggior rilievo nel lavoro svolto:
- l' approccio globale al problema con l' analisi di più architetture;
- la definizione di un modello generale e dei requisiti del simulatore didattico;
- il progetto e la realizzazione del prodotto software ASIM.