Ho iniziato lo sviluppo del simulatore per la simulazione di algoritmi distribuiti in linguaggio C . Il mio lavoro consiste nella creazione di linguaggio semplice per la descrizione dell'algoritmo e simulatore che accetta l'algoritmo descritto e lo simula.
All'inizio ho deciso come rappresentare l'ambiente distribuito. Questo simulatore verrà eseguito su una singola macchina, quindi è necessario simulare in qualche modo le entità che creano l'ambiente distribuito e svolgere alcune attività in base all'algoritmo fornito. Ogni entità verrà rappresentata come struttura dati chiamata Entità . Questa struttura dati conterrà tutti i dati relativi all'entità, ad esempio lo stato dell'entità, i registri locali dell'entità.
Per rappresentare la topologia e le connessioni, voglio utilizzare una libreria per i grafici in C per rappresentare la topologia come set di vertici e bordi . Questi vertici e spigoli faranno sicuramente parte di Entità in modo che possa ottenere l'accesso ai suoi vicini, ad esempio, quando sta inviando loro dati.
Il passo successivo era creare un linguaggio semplice in modo che l'utente potesse facilmente descrivere l'algoritmo e simularlo.
Per una migliore rappresentazione ecco l'esempio di flooding dell'algoritmo.
STATUS = INITIATOR, IDLE, DONE;
INIT = INITIATOR, IDLE;
TERM = DONE;
REGISTERS = ;
INITIATOR
RANDOM
begin
SEND(x, NEIGHBORS);
BECAME(DONE);
end
IDLE
RECEIVE(x)
begin
SEND(x, NEIGHBORS - SENDER)
BECAME(DONE);
end
In questa fase sto lavorando alle specifiche per questa lingua e mi sono bloccato. Non sono sicuro di come specificare correttamente questa lingua. Dovrebbe essere semplice, ma quando per esempio voglio implementare il comando per inviare un messaggio ad un'altra entità, devo considerare che gli obiettivi possono essere diversi. I target potrebbero essere tutti i vicini o tutti i vicini tranne mittente o forse solo mittente o successivamente in fase di sviluppo, dovendo possibile dichiarare un target specifico da tutte le entità dell'ambiente.
A questo punto ho due opzioni in mente.
Prima utilizza Flex e Bison per analizzare e analizzare l'input. quindi raccogli tutti i dati necessari ed esegui i thread e lascia che si comportino secondo tutti i comportamenti possibili nel file di input con l'algoritmo.
La seconda opzione non è usare Flex e Bison e implementare ogni comando come Macro C . L'utente utilizzerà queste macro per scrivere il file di input con l'algoritmo e questo file sarà collegato al simulatore con gcc compiler , quindi quando l'utente utilizza la macro in modo errato il compilatore genererà un errore.
Vorrei chiedere se qualcuno stava sviluppando qualcosa di simile o quale tipo di approccio o tecnica scegliere se esiste. Voglio implementarlo in C ma forse un altro linguaggio sarebbe migliore per questo tipo di cose.