Saturday, June 25, 2011

SW: Metody vzajomneho vylucenia procesov a vlakien

Zakaz prerusenia

  • 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