Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Baci
Baci
Sta je to BACI
Samir Ribic, 8 November 2006 (created 7 November 2006)
BACI je akronim Ben-Ari Concurrent Interpreter. U pitanju je programski jezik baziran na Pascalu ili C-u, sa
svrhom upoznavanja konkurentog programiranja, koje se javlja u problemima multitaskinga, raunarskih mrea i
paralelnog programiranja.
C-- sintaksa
BACI's C je podskup jezika C++. Dakle, prati se C/C++ sintaksa uz neka ogranienja i nove tipove.
Lista procesa koji se konkurentno izvravaju uokvirena je u cobegin blok. Takvi blokovi se ne mogu gnijezditi i
moraju se nalaziti u glavnom programu. PCODE naredbe koje pripadaju nabrojanim procedurama se prepliu
interpreterom u sluajnom redoslijedu, tako da viestruko izvravanje istog programa koji ima cobegin blok e
izgledati nedeterministiko. Glavni program se zaustavlja dok se svi procesi u cobegin bloku ne zaustave, nakon
ega glavni program nastavlja izvravanje naredbi iza bloka. Na primjer:
cobegin {
proc1( ... ); proc2( ... ); ... ; procN( ... );
}
2. semafori
semaphore je predefinisana vrijednost u BACI. On je nenegativna varijabla kojoj se moe pristupiti samo na
ogranien nain. BACI takoer ima podtip binarysem koji je binarni semafor koji samo predpostavlja vrijednosti 0 i
1. Semaforske funkcije ukljuuju:
* initialsem ( semaphore, integer_expression ): Inicijalizira semafor na navedenu vrijednost.
* p ( semaphore) ili wait (semaphore): Ako je semaphore > 0 umanji semafor za 1 i vrati se, ime pozivalac moe
nastaviti izvrenje. Ako je semaphore = 0, pozivalac se prebacuje u ekanje.
* v ( semaphore) ili signal (semaphore): Ako je semaphore = 0 i jedan ili vie procesa ekaju na semafor, sluajno
probudi jedan od ekajuih procesa. Ako ni jedan proces ne eka na semafor, uveaj semafor za jedan. U
svakom sluaju, pozivalac nastavlja s izvrenjem.
3. monitors
BACI podrava i Hoareove monitore s nekim ogranienjima. Monitor je C blok s nekim dodatnim
mogunostima. Sve funkcije u monitorskim blokovima su vidljive spolja, ali monitorske varijable nisu pristupane
van bloka i mogu ih itati samo monitorske funkcije. Monitor se moe deklarisati samo na globalnom nivou i
monitori se ne mogu gnijezditi. Samo jedna monitorska procedura se moe izvravati u jednom trenutku, pa se
monitori mogu koristiti za uzajamno iskljuivanje. Tri konstrukcije se koriste za kontrolu konkurentnosti u monitoru
condition varijable, waitc (wait on condition), i signalc (signal a condition).
* condition varijables su pristupane samo u monitorskim funkcijama. Condition varijabla nikada nema vrijednost,
ona je prosto neto na ta se eka i to se signalizira.
* void waitc (condition cond, int prio): monitorski proces je blokiran i dodijeljen mu je prioritet prio za ponovno
buenje. Ova akcija blokiranja omoguava izvravanje drugih monitorskih procesa ako je neki spreman.
* void waitc (condition cond): ista semantika kao waitc, ali se dodjeljuje podrayumijevani prioritet 10.
* void signalc (condition cond): Probudi proces koji eka na cond , inae ne radi nita.
* void empty (condition cond): Vraa 1 ako nema procesa koji ekaju na condition cond a 0 ako ih ima.
4. Druge konkurentne konstrukcije
* atomic : Ako je funkcija definisana kao atomic, ona nije prekljuiva. Interpreter nee prekinuti atomiku funkciju.
* void suspend ( void ): smjeta pozivaoca u stanje ekanja.
* void revive ( int process_id ): reaktivira proces s datom oznakom.
* int which_proc( void ): Vraa oznako trenutnog procesa.
* int random (int range): vraa sluajan broj izmeu 0 i range -1, ukljuivo.