Fabijan Lukin, Fran Pregernik,
Tomislav Sukser Tehnička dokumentacija za obojivo računarstvo |
|
2 Simulacija obojivog računarstvaNajveći izazov je bio napraviti simulator koji je u stanju simulirati prirodno paralelne procese na sekvencijalnom računalu. Drugi problem je kako simulirati komunikacijski medij i njegova svojstva, nadalje je bilo potrebno simulirati sve greške koje mogu nastupiti u stvarnosti kao npr. slučajno (ili namjerno) umiranje računala, interferencije u komunikacijama, propagaciju signala itd. 2.1 SimulatorCijeli projekt je rađen u jeziku c# (cis, c-sharp itd.) i koristi napredne metode .NET Frameworka kao što su Remoting, generičke liste, funkcijski delegati, reflekcija (metarazredi) i drugo. Podrazumijeva se da će čitatelj ima osnovno znanje c# jezika i .NET frameworka, no cak i ako nema, kad naiđe na nepoznati pojam, može pogledati dokumentaciju .NET Frameworka. Cijeli simulator se bazira na plugin arhitekturi, to jest simulator pri instanicranju pregledava „Plugins“ poddirketorij za .net assembly dll-ove i u njima traži implementacije obojivih računala, senzora, objekta za bojanje i programa. Grafička sučelja onda imaju liste plugina koje mogu učitati u simulator. Simulator koji smo izradili radi na principu ciklusa. Jedan ciklus je završen kada svako računalo obradi jednu jedinicu rada (o tome kasnije). Redoslijed izvođenja pojedinih računala je nasumičan i ne garantira da će sva računala doći na red u jednom ciklusu. Time je ostvarena činjenica da sva računala ne moraju imati isti takt. U svakom ciklusu simulatora se također vrši obrada komunikacijskog medija, koji je na pojedinim računalima ostvaren kao FIFO red ulaznih i izlaznih paketa, a sa gledišta simulatora, „niz signala“ se preuzima i stavlja na antenu računala. Bežični paketi, zbog vrste komunikacijskog kanala, ne stižu na antene susjeda odmah, nego nakon određenog vremena ili uopće ne stignu. Time je simuliran realni komunikacijski kanal. Nadalje, pretpostavljeno je da je korekcija grešaka u mrežnim paketima besprijekorna te se neće dogoditi da se jednom programu na obradu da paket koji nije ispravan. Simulator ima podršku i za senzore koji su realizirani kao nadogradnja na obično računalo. U kraju svakog ciklusa, simulator uz pomoću podataka o okolini daje senzorima vrijednosti za koje su oni predviđeni. 2.2 Komunikacija računala sistemom podatkovne straniceKomunikacija je izvedena na takav način da svaki program ima pristup lokalnoj podatkovnoj stranici (homepage) i jedino tu može pisati, kao i čitati. Računala periodički razmjenjuju kopije lokalnih podatkovnih stranica i spremaju ih u područje koje se naziva lokalni UI prostor (eng. IO space). Taj prostor je isključivo za čitanje. Princip je takav da program čita iz UI prostora i iz lokalne podatkovne stranice i na temelju tih vrijednosti izvrši obradu te rezultat zapiše u lokalnu podatkovnu stranicu. Susjedni programi nakon toga pročitaju iz UI prostora i postupak se ponavlja. 2.3 Obojivo računaloSimulirano obojivo računalo se sastoji od dva dijela. Prvi dio je sučelje s kojim simulator komunicira. Simulator pomoću tog sučelja kontrolira pokretanje obrade kompjutera kao i čitanje podatkovne stranice kompjutera te čitanje UI prostora kojeg to računalo ima. Drugi dio je API sučelje s kojim komuniciraju programi koji se izvršavaju na tom računalu. API sučelje ima, između ostalog, sve funkcije koje su potrebne za čitanje i pisanje na lokalnu podatkovnu stranicu, čitanje UI prostora, selidbu programa na drugo računalo i deinstalaciju istih. Obrada jedinice rada obojivog računala je podijeljena u par dijelova. U prvom dijelu se obrađuju dolazni paketi koji mogu sadržavati kopije podatkovnih stranica susjednih računala ili preseljene programe od susjednih računala. Te kopije treba zapisati u UI prostor, a preseljene programe treba instalirati na lokalno računalo. Drugi dio je izvršavanje svih instaliranih programa. Ovdje se provodi najveći dio procesiranja simulatora jer su ti programi ovisno o primjeni vrlo procesno zahtjevni. Treći dio je obrada zahtjeva za prijenos programa. Naime, nakon što program preko API-a zatraži prijenos na nekog od susjeda, kompjuter to zabilježi i obradi kasnije. Taj zahtjev može biti odobren i poništen ovisno o nekim faktorima kao što je pun izlazni međuspremnik. Trenutačno u našoj implementaciji zahtjev je uvijek odobren. No implementacija nekakve restrikcija se vrlo lagano ostvaruje sa jednim if-then! Ako je zahtjev odobren onda se radi kopija programa i programu koji je zatražio prijenos se daje mogućnost postavljanja varijabli kopije samog sebe kako bi ta kopija mogla biti pokrenuta sa promijenjenim inicijalnim stanjem. Ta mogućnost se koristi u velikoj većini programa. Četvrti dio je obrada zahtjeva za deinstalaciju programa. Programi mogu preko API-a zatražiti da budu deinstalirani iz trenutnog računala na slični način kao i u trećem dijelu obrade (obrada prijenosa programa). Jedina razlika je što je takav zahtjev uvijek odobren. Peti i zadnji dio obrade je provjera je li je lokalna podatkovna stranica mijenjana te ako je onda se šalje njena kopija svim susjedima. Također se ovdje provjerava koliko dugo nije osvježena lokalna kopija podatkovne stranice susjeda u UI prostoru. Ako je ta vrijednost veća od neke granice onda se briše ta kopija i time se stvara mjesto za kopiju nekog drugog susjeda. Naime UI prostor je ograničene veličine u smislu da može držati npr. 16 kopija podatkovnih stranica susjeda. Ako se neki od susjeda ugasi a u susjedstvu je 20 susjeda onda onaj se kopija podatkovne stranice 17tog susjeda može kopirati u trenutno računalo. Mrežna komunikacija je napravljena preko redova s time da je izlazni red prioritetni red i programi mogu indirektno kontrolirati prioritet nekih akcija koje stvaraju mrežne pakete, kao npr. zahtjevi za prijenos. Programi ne mogu nikako slati vlastite pakete u mrežu. Jedini koji to može je računalo. No oni niti ne moraju slati pakete jer se sva komunikacija programa odvija preko podatkovne stranice. 2.4 Podatkovna stranicaPodatkovna stranica je organizirana tako da svaki program, prilikom izrade, izabire jedan jedinstveni identifikacijski broj te se za takav program stvara podprostor u podatkovnoj stranici. U originalnom radu je taj podatkovni prostor organiziran tako da svi programi pišu u jedan jedini prostor što povećava procesiranje koje jedan program mora napraviti. Da pojasnim, ako program funkcionira bez pomoću drugih programa onda umjesto da pretražuje i parsira što su ostali programi napisali u zajednički prostor u nadi da će naći što je njegov susjedni koprogram napisao, on može u podprostoru točno pročitati vrijednost koju je njegov koprogram napisao bez potrebe za dodatnom obradom. Nadalje, ako ipak program funkcionira uz pomoć drugih programa onda je potrebno da taj program zna jedinstveni broj programa o kojem ovisi, što i nije veliki problem te uz pomoć tog broja čita, ali i piše po potrebi, u drugi podprostor. Naravno uvijek je moguće napisati program koji ometa druge programe pišući u njihove podprostore. No svrha takvog programa je nepotrebna i nepoželjna. Nije moguće spriječiti takvo ponašanje, ali takvo ponašanje nije kobno jer je ovo ipak samo simulacija. Ovo vrijedi i za kopije podatkovnih stranica u UI prostoru s razlikom da je tamo moguće samo čitanje. 2.5 Programi – „Process Fragments“Programi pisani za obojiva računala komuniciraju isključivo preko API-a sa računalom. API sučelje je proširivo, ali već sada obuhvaća sve funkcije koje su dovoljne za pisanje vrlo složenih programa (kao na primjer Shadowfax). Obojivo računalo komunicira sa programima preko pet standardnih metoda, a te su: Install, Uninstall, TransferGranted, TransferRefused i najvažnije Update. Programi nisu ograničeni samo na te metode ali ih moraju imati što je osigurano nasljeđivanjem. Install metoda se poziva u trenutku kada se program prvi puta instalira na računalo. U njoj se vrši inicijalizacija programa. Uninstall metoda se izvršava nakon što je program preko API-a zatražio deinstalaciju. Obično se tu brišu vrijednosti zapisane u lokalnoj podatkovnoj stranici. TransferGranted metoda se poziva nakon što je obrađen zahtjev za prijenos te se tu pruža mogućnost programu da promijeni vrijednosti lokalnih varijabli kako bi ta kopija prilikom instalacije već mogla imati neke podatke o okolini i prilagoditi se tome. TransferRefused metoda se poziva ako je zahtjev za prijenos odbijen te se time signalizira programu da, pogodili ste, mu je zahtjev odbijen. Update metoda je najvažnija metoda od svih, jer se u njoj treba nalaziti glavno procesiranje programa. Ona se poziva u svakom ciklusu kompjutera. U njoj treba vršiti čitanje UI prostora, reagiranje na pročitano, selidba, deinstalacija i pisanje u lokalnu podatkovnu stranicu. Ovo su samo smjernice, jer, moguće je napraviti program koji, ako je to tako potrebno, glavnu procesnu funkciju ima smještenu u npr. Install metodu. Nema nikakvih restrikcija osim da ako program u Uninstall metodi zatraži prijenos na neko računalo taj zahtjev nece biti zabilježen. Program je zapravo inkapsuliran u apstraktni razred PocessFragmentBase. Taj razred zahtvjeva da se implementiraju gore navedene metode te da se dodatno stavi u svojstvo ProcessFragmentId jedinstveni broj koji definira program. Diagram razreda ProcessFragmentBase Važno je napomenuti da svaki program (process fragment) ima prazni konstruktor, kako bi se mogao učitati. Zapravo se neće ni dozvoliti programima koji to nemaju da budu u popisu valjanih programa simulatora. Provjera strukturne valjanosti svih dostupnih programa se obavlja prilikom inicijalizacije simulatora u razredu PluginLoader u metodi CheckProcessFragmentValidity(Type pfrag). Zahtjeva se da je program direktni potomak razreda ProcessFragmentBase, da je razred programa označen kao sealed (što znači da ga se ne može naslijediti) i najvažnije da ima jedan konstruktor i to prazni konstruktor. U toj metodi se mogu pogledati sva pravila restrikcije na strukturu razreda programa. Općenito u razredu PluginLoader se učitavaju svi dodatci i tamo su također strukturna pravile ostalih dodataka provjeravana. 2.6 Okruženje simulacije – „Environment“Kao što je već napomenuto, simulator ima podršku za računala koja imaju senzore. Princip izrade senzora je slijedeći: senzor mora imati iste funkcije kao i obično računalo, senzor je zapravo nadogradnja računala i to je najlakše izvesti tako da računalo senzor nasljeđuje od običnog računala. Prilikom izrade senzora, zna se kakve on fizičke pojave prati i koje vrijednosti prima. Računalo senzor može imati i više mjerača u sebi. Istodobno sa izradom senzora izrađuje se i tzv. tok fizikalnih podataka „data feeder“ koji zapravo preuzimaju ulogu fizikalne pojave te ju na neki način modeliraju. Model te fizikalne pojave može biti empirijski podatci koji su se mijenjali tijekom vremena zapisani u nekoj tablici ili matematička funkcija ili nešto kompletno nasumično. Objekt toka fizikalnih podataka u svakom ciklusu simulatora na temelju lokacije senzora i proteklog vremena izračunava neku vrijednost te ju predaje senzoru. Kako je ta vrijednost dobivena je prepušteno autoru toka podataka. Više o izradi tokova podataka biti će rečeno kasnije.
|