Università degli Studi di Bologna Laboratorio di Sistemi Operativi
Studenti: Mazzucco Michele - Pegoraro Alessandro - Pernici Andrea - Valenti Roberto |
Gli obiettivi:
Le specifiche per il progetto di laboratorio prevedono la realizzazione di un'architettura emulata e di un sistema operativo limitati all'esecuzione di programmi scritti in RedCode (un linguaggio di basso livello appositamente modificato) usando un linguaggio di programmazione a scelta. La natura di questa emulazione richiede la gestione del multi-threading, che ci permette in questo caso di astrarre l'unicità dello scorrere del tempo su numerosi oggetti (funzionanti in realtà al di sopra di una sola macchina virtuale), quindi opportuni meccanismi di sincronizzazione devono essere implementati per soddisfare questi requisiti. Fin dall'inizio ci siamo proposti di soddisfare almeno due Varianti, in particolare ci affascinava l'idea di un numero differente di processori e guerrieri.
Gli strumenti:
Notevoli semplificazioni sono accordate alla struttura di CoreWars rispetto
a quanto si verifichi nei sistemi operativi moderni, concesse in parte dalla
finalità "ludica" della macchina, ed in parte dalla natura
emulata di tutta la macchina da produrre; nonostante questo il progetto presenta
numerosi aspetti "critici", richiedendo una struttura articolata e,
soprattutto, sincronizzata. Abbiamo scelto Java come linguaggio di programmazione
dotato di primitive per la gestione dei thread, creando fin da subito quelle
che ci sembravano le classi indispensabili. Poi, lentamente, abbiamo continuato
a sviluppare parallelamente le classi, aggiungendo variabili e metodi. Questo
modus operandi ci ha permesso di tenere traccia sull'intera struttura favorendo
l'omogeneità del codice e permettendoci di focalizzare l'attenzione sui
numerosi casi da considerare. Ci sembrava logico iniziare dall'hardware, così
abbiamo scritto CoreCell, CoreMemory e CoreStorage; la
presenza delle interfacce ed il carattere primitivo (hardware) delle chiamate
da implementare facilitava le operazioni. Nonostante ciò ci siamo resi
conto che non sarebbe stato possibile eseguire il debug nè effettuare
alcun controllo run-time senza aver ultimato almeno altre tre classi fondamentali.
Questo aspetto del progetto ha rimandato continuamente la lunga procedura di
individuazione degli inevitabili errori commessi, vista anche la nostra debole
esperienza, ma ci ha anche permesso di perfezionare il codice riprendendolo
spesso ed in più punti.
La struttura dell'hardware (schematizzata, cliccare sulle componenti):
Il Sistema Operativo ed i contenitori:
Le Strutture: