Università degli Studi di Bologna
Anno Accademico 2001/02

Laboratorio di Sistemi Operativi
Progetto CoreWars

 

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: