Fabijan Lukin, Fran Pregernik, Tomislav Sukser

Dokumentacija za izradu programa i senzora za obojivo računarstvo

Povratak

2        Dodavanje smisla obojivom računarstvu

Obojiva računala sama za sebe i nisu nešto previše pametno. No dobro, ipak imaju svoj operacijski sustav koji ćemo mi s razine pisca programa promotriti ponajviše sa strane njegovog sučelja – API.

Valjalo bi započeti s programskom reprezentacijom obojivog računala u jezgri simulatora. Za tu svrhu bacit ćemo pogled na razred GenericPaintableComputer koji se nalazi u datoteci PaintableSimulator.Engine\PaintableComputers\GenericPaintableComputer.PaintableComputerBase.cs. Ono što nam je od nekog značaja u ovom trenutku jest jedna metoda razreda - public override void Cycle(). Ona se poziva svako toliko iz jezgre simulatora za svako obojivo računalo. Njezina svrha je da primi sve komunikacijske pakete koji su došli, zatim da pakete koji predstavljaju zrcaljene podatkovne stranice stavi na ispravno mjesto i omogući da programi preko funkcija operacijskog sustava mogu pristupati tim podacima, te da pokrene instalaciju svih primljenih programa. Nakon toga, pokreće svaki program (točnije, njegovu Update metodu), i kada svi programi završe, šalje zrcalnu sliku svoje podatkovne stranice susjedima ukoliko je došlo do promjene na njoj, te šalje programe koji su se naznačili za kopiranje, ako takvih ima. Pseudokod koji bi to najbolje ilustrirao:

Cycle()

{

    dok (ima_paketa)

    {

        primi paket p;

        ako je (p == program)

            instaliraj p; // p.Install();

        inače ako je (p == podatkovna stranica)

            osvježi zrcalnu sliku podatkovne stranice p;

    }

    za svaki instalirani program prog

        pokreni prog.Update();

    za svaki program označen za deinstalaciju

        pokreni prog.UnInstall();

    za svako zatraženo kopiranje programa prog

        kopiraj i pošalji paket s programom prog;

    ako je (podatkovna stranica promijenjena

                  ili nije slana već dugo vremena)

        pošalji podatkovnu stranicu;

}

Arhitektura obojivog računala

2.1    Arhitektura programa

U prethodno navedenom pseudokodu spomenute su metode Install, UnInstall i Update od programa. Međutim, to nisu sve metode koje jedan program mora imati. Prikaz metoda i njihovo značenje dan je u sljedećoj tablici.

Metoda

Objašnjenje

void Install();

Pokreće se prilikom ubacivanja programa u obojivo računalo, program bi u ovoj metodi trebao obaviti sve da može dalje normalno raditi

void Uninstall(byte remainingTimeslots);

Pokreće se prije nego što operacijski sustav uništi program i bilokakve njegove tragove. Parametar remainingTimeslots označava vrijeme u taktovima unutar kojeg bi program trebao obaviti ovaj posao. Simulator ne provjerava duljinu trajanja izvođenja.

void TransferGranted(ref ProcessFragmentBase copy);

Pokreće se nakon što je odobreno slanje programa dalje. Parametar je referenca na novi program, pri čemu se u ovoj metodi mogu definirati početni parametri programa za računalo na koje se on seli.

void TransferRefused();

Metoda se poziva nakon što je programu odbijen zahtjev za kopiranjem, tj. preseljenjem na drugo računalo.

void Update(byte remainingTimeslots);

Ova metoda jest i najvažnija. Ona predstavlja izvođenje programa. Poziva se u svakom ciklusu operacijskog sustava. Parametar remainingTimeslots je broj ciklusa unutar kojeg bi metoda trebala završiti svoje izvođenje, no simulator ne provjerava trajanje izvođenja.

Metode programa

Osim tih metoda program može sadržavati vlastite metode. U svakom slučaju, program koji se piše za simulator mora naslijediti apstraktni razred ProcessFragmentBase koji u sebi sadrži gore navedene apstraktne metode koje se moraju naslijediti i nadjačati (override).

Program koji se piše u naslijeđivanju mora nadjačati i svojstvo public uint ProcessFragmentId koje označava jedinstveni identifikacijski broj programa. To je nužno što program mora posjedovati i kako se on mora napisati da bi se mogao u simulatoru ubaciti u neko obojivo računalo. No, to uistinu nije dovoljno ukoliko želimo prikazati izvođenje tog programa u simulatoru, tj. ukoliko želimo obojati računalo.

2.2    Dodavanje boje programu

Nije potrebno puno mudrosti, ali je potrebno napraviti još jedan razred koji naslijeđuje razred HomepageColorizer. Potrebno je nadjačati metodu public abstract Color Colorize(Homepage homepage); koja kao svoj parametar prima podatkovnu stranicu za koju se očekuje da sadrži zapis programa iz kojeg se može odrediti boju kojom će obojivo računalo biti prikazano u simulaciji ako se promatra utjecaj izabranog programa. Metoda Colorize mora vratiti objekt tipa Color koji je točno boja koja će se prikazati u simulatoru. Neka konvencija koja se poštovala u simulatoru jest da je zid crn, računala su u pravilu bijela ili prikazana nekom življom bojom ukoliko se radi o prikazivanju stanja promatranog programa.

2.3    Ostale napomene za pisanje programa

Programi za obojiva računala ne smiju iz sigurnosnih razloga baratati nikakvim ulazno-izlaznim operacijama operacijskog sustava na kojem je simulator pokrenut. Ono što oni smiju koristiti jest biblioteka metoda operacijskog sustava obojivog računala i još neke naprednije aritmetičke i slične funkcije. Detalji o pisanju vlastitog programa i spajanju razreda za bojanje s programom bit će dani kasnije u tekstu, poslije opisa biblioteke operacijskog sustava obojivog računala.