- CPU je pridelovane postupne jednotlivym procesom za pomoci prerusenia od casovaca alebo ineho prerusenia
- proces zakaze vsetky prerusenia pred vstupom do kritickej sekcie a povoli ich az po opusteni kritickej sekcie
- technika je vhodna na kratky cas v ramci jadra
- ale nie je vhodna pre bezne ucely
- pretoze DI blokuje ostatnych uzivatelov
- vo viacprocesorovom CPU ma efekt iba na aktualnom CPU
- zpomali reakcie na prerusenie
- zle napisane programy zablokuju CPU
Aktivne cakanie / blokovanie
- iba jeden proces moze vstupit do kritickej sekcie
- ostatne procesy cakaju, kym nie je volno
- ak sa aktivne caka
- metody aktivneho cakania su
- striktne striedanie
- v takomto pripade nemoze proces vstupit do KS opakovane a jeden proces moze spomalit ostatne procesy
- zdielana premenna
- zdielana premenna indikuje obsadenost kritickej sekcie
- proces v slucke testuje aktualnu hodnotu premennej
- nevyhodou je plytvanie casu
- ak OS pouziva prioritne planovanie, tak moze vzniknut inverzny prioritny problem a to, ze proces s vyssou prioritou bude aktivne cakat, kym proces s nizsou dokonci svoju pracu. Pokial bude priorita fixna, tak dojde k uviaznutiu
- ak sa aktivne blokuje
- proces vykona systemove volanie, ktore ho zablokuje, az kym sa KS uvolni
- proces sa tak dostane do stavu blocked a zaradi sa znovu medzi ostatne procesy
- blokovanie a deblokovanie procesov je vacsinou sucast OS API
- sleep (process)
- wakeup(process)
- musime vediet synchronizovat aj sleep a wakeup, pretoze wakeup moze byt zavolany na proces, ktory este nie je uspany => nastavime wakup waiting bit. Pri pokuse uspat proces sa iba resetuje wakeup waiting bit
Petersonov algoritmus
- je korektnym SW riesenim problemu
- algoritmus funguje takto
- zistime, kolko mame procesov
- pri vstupe do KS musi proces prejavit zaujem o vstup
- dostane sa do poradia
- ak v kritickej sekcii nie je prave iny proces, tak moze vstupit
- inak, musi vyckat poradie
- pri odchode z KS, proces oznami, ze ide prec
Instrukcie TSL
- jedna sa o Test Set and Lock instrukciu
- instrukcia nacita obsah slova z pamate a nastavi ho na nenulovu hodnotu
- CPU zamkne pamatovu zbernicu, aby znemoznilo ostatnym CPU pristup do pamate
- TSL je atomicka instrukcia - je to korektne HW riesenie
- TSL moze byt preto pouzita pri synchronizacii v multiprocesorovych systemoch so zdielanou pamatou
Semafor
- semafor je datovy typ, ktory obsahuje citac a frontu cakajucich procesov
- operacie: init(), down(), up()
- pri init sa citac nastavi na zadane cislo a fronta sa vyprazdni. Zadane cislo vravi, ze kolko procesov moze zdielat nejaky prostriedok sucasne
- z pociatocnej a aktualnej hodnoty vieme urcit, kolko procesov je v danom okamihu v KS
- ak je zavolany down, tak sa citac zmensi o 1, ak je vacsi ako 0. Ak je 0, tak sa zablokuje proces a ulozi do fronty
- ak je nejaky proces vo fronte, tak na up() sa zobudi, inak sa citac zvacsi o 1
- tieto "instrukcie" su vykonavane atomicky
- typom semaforu je binarny semafor = mutex
- citac je nastaveny na 1-cku
- na up() na konci nesmieme zabudnut, pretoze dojde k deadlocku
Monitor je Semafor vyssej urovne. Je to konstrukt vyssich programovacich jazykov
- mnozina procedur, premennych a datovych struktur, ktore su zoskupene dohromady v specialnom module objektu
- len jeden proces moze byt aktivny v ten isty cas
- o vzajomne vylucenie sa stara prekladac
- operacie
- wait(c) - pozastavi volajuci proces na podmienenej premennej c
- signal(c) - spusti niektory z pozastavenych procesov na podmienenej premennej c
- podmienene premenne
- preddefinovany datovy typ, ktory umozni pozastavit, spustit proces
Zasielanie sprav
- vyuziva operacie send a receive
- adresovanie sprav
- priame - sprava je ulozena priamo do priestoru daneho prijemcu
- nepriame - sprava je docasne zdielana v zdielanej datovej strukture, co nam lepsie umoznuje implementovat kolketivne komunikacne algoritmy
- synchronizacia
- blokujuci send a blokujucie recieve
- neblokujuci send, blokujuci recieve
- neblokujuci send/receive
Bariera
- definujeme minimalny pocet procesov, ktore mozu prelomit barieru
- ked proces dorazi k bariere, tak je zablokovany do tej doby, kym vsetkych n procesov nedorazi k bariere