Sei sulla pagina 1di 2

BACI

BEN Ari Concurent Interpreter


Nastavni programski jezik za upoznavanje koncepata konkurentog programiranja.

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.

Gdje se BACI koristi


Uoite listu univerziteta, meu kojima se nalazi i Univerzitet u Sarajevu.
http://www.mines.edu/fs_home/tcamp/baci/#Where

C-- sintaksa
BACI's C je podskup jezika C++. Dakle, prati se C/C++ sintaksa uz neka ogranienja i nove tipove.

1. Nema drugih datoteka osim standardnog ulaza-izlaza: cout, cin i endl.


2. Samo prosti C/C++ tipovi postoje u C BACI: int i char. Podrane su konstante prostih tipova. (Sve varijable
moraju biti definisane na poetku kodnog bloka gdje se pojavlju.)
3. Podran je string tip i nege ugraene funkcije: stringCopy, stringCompare, stringConcat, etc.
4. Podrani su nizovi prostih tipova i string tipova. Deklaracija nizova prati uobiajenu C sintaksu.
5. Podrane su procedure i funkcije sa stgandardnim pravilima ukljuujui opseg varijabli i rekurziju. Parametri se
prosljeuju po vrijednosti ili referenci. Izvrenje poinje od main().
6. Izvrne naredbe su if-else, switch/case, for, while, do-while, break i continue. Sintaksa ovih naredbi je kao u
standardnom C/C++.

Konstrukcije za realizaciju konkurentosti


1. cobegin

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.

Potrebbero piacerti anche