next up previous contents
Next: B.1.2 Dolocitev in zagon Up: B.1 Upravitelj Previous: B.1 Upravitelj Vsebina: contents

B.1.1 Glavni program

Glavni program interpretira ukazno vrstico. Argumente ustrezno filtrira in posreduje delavcem.

int main(argc, argv)
* int argc;
* char **argv;
* {
* if (argc == 1)
* {
* usage ();
* return -1;
* }

Vecina programov v sistemu PVM najprej zahteva od streznika na katerem se program pozene, da mu sporoci stevilko procesa (Task ID). To je celostevilcna spremenljivka, ki se uporablja za komunikacijo med procesi. Delavci jo npr. uporabljajo za vracanje rezultatov upravniku del. Druga pomembna uporaba te spremenljivke se pokaze v razhroscevanju programov. Ker ta stevilka enoznacno doloca stevilko procesa, lahko s posebnimi razhroscevalci sledimo sporocilom procesa v navideznem racunalniku.

mytid = pvm_mytid ();

Ker je sistem PVM vezan na operacijski sistem in na komunikacijo ni zagotovljena izvrsitev nobene funkcije v navideznem racunalniku. Programer nosi odgovornost, da zagotovi pravilno delovanje distribuiranega programa tako, da kontrolira kriticne funkcije. Vsaka funkcija PVM vraca tudi status izvrsbe. Ce je celostevilcna vrednost negativna se je pojavila napaka, ki jo je potrebno ustrezno odpraviti. Te napake se lahko resujejo na razlicne nacine. Pri redundancnih sistemih se iscejo nadomestni racunski viri. Druga moznost je cakanje na sprostitev virov (ponavljanje izvrsbe funkcije), vendar se lahko tu pojavijo mrtve (neskoncne) zanke (deadlock). Nekatere funkcije, ki so vezane na zakasnitve v komunikacijah med racunalniki, imajo tudi moznost dolocitve najvecjega casa cakanja na sprostitev komunikacijskih virov (timeout). Pravilo je, da se preveri pravilnost delovanja PVM vsaj na zacetku programa.

if (mytid < 0) /* Kontrola napake */
* {
* pvm_perror(argv[0]);
* return -1;
* }

Ker je vecino argumentov ukazne vrstice distribuiranega programa namenjeno prav delavcem, jih nadzornik le pregleda in izloci ukaze, ki so namenjene njemu. Iz osnovne tabele argumentov nato zgradi okrnjeno stevilo argumentov, ki se kasneje posredujejo vsem delavcem navideznega racunalnika.

parse_options(argc, argv);

Distribuirani program je izdelan tako, da ugotovi kateri racunalniki so v navideznemu racunalniku. Preveri delovanje delavcev in sele nato zgradi strategijo razporejanja nalog. Ker so v navideznem racunalniku lahko zelo razlicne procesorske zmogljivosti, je potrebno tudi pravilno uravnteziti naloge, ki vodijo k cim vecji izkoriscenosti navideznega racunalnika. V trenutni verziji (v3.3) sistem sicer predvideva razpoznavanje relativnih hitrosti posameznih vozlisc, vendar to zaenkrat se ni implementirano. Predvideno je tudi hevristicno dolocanje ciljnih racunalnikov s prostimi kapacitetami. Ker pa to v sistemu PVM se trenutno se ni implementirano, je bilo potrebno izdelati ustrezen algoritem, ki sam razpozna razlike med racunskimi mocni vozlisc navideznega racunalnika.

if (start_workers (argv) < 0)
* {
* pvm_exit();
* return 1;
* }

Datoteko z opisom prosotora je potrebno podati kot nalogo vsem delavcem. Datoteka, ki opisuje sceno je tekstovna in je zato lahko zelo velika in s tem tudi vzrok za ozko grlo pri komunikaciji med upravnikom in delavci. V ta namen je bilo izvedeno sprotno stiskanje podatkov, kar je omogocilo tudi do desetkrat manjse datoteke in s tem ustrezno krajse case prenosa po mrezi.

send_scene(inputFileName);

Upodabljanje scene v kateri so podani vsi objekti se odvija v proceduri, ki skrbi za izmenjavo podatkov in zdruzevanje rezultatov.

render_scene ();

Po koncanem delu je potrebno ustaviti vse delavce navideznega racunalnika in zapreti pripadajoce komunikacijske kanale.

stop_workers ();

Rezultat distribuiranega programa za upodabljanje z metodo sledenja zarku je polje barvnih trojckov RGB, ki jih je potrebno shraniti v datoteko zeljenega graficnega formata. Format PPM je bil izbran zaradi razsirjenosti in primernosti aplikaciji.

save_scene();

Poleg klasicnega ukaza exit() je v sistemu PVM potrebno zapreti vse uporabljene vire navideznega racunalnika.

return pvm_exit();
* }


Copyright © 1995 Leon Kos, Univerza v Ljubljani