You are on page 1of 39

Operációs Rendszerek

8. előadás - Versenyhelyzetek
Links

• http://www.iit.uni-miskolc.hu/%7Evadasz/GEIAL201/Jegyzet/3rd.pdf
• A. Tanenbaum: Op rendszerek

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 2


Processzek kommunikációja 1
failure of operator++()

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 3


Processzek kommunikációja 2
failure of operator++()

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 4


Processzek kommunikációja 3
megoldás?

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 5


Critical Section (CS)

• Elvárásokkal definiáljuk:
• 1, Ne lehessen 2 processz a saját kritikus szekciójában egy időben
• 2, Előfeltétel nélküli legyen a proc. sebesség és számát illetően
• 3, Nem blokkolhat egyetlen más processzt sem a CS-ón kívül
• 4, 1 proc-nak se kelljen örökké várni, míg beléphet a saját CS-jába

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 6


Interrupt disabling?

• Megoldás lenne az Interrupt tiltása?


• pro:
• egyszerű, könnyen kezelhető
• con:
• csak egyprocesszoros rendszerben működhet
• óra interrupt kimaradhat
• interruptok egymásra futhatnak
• ezért user space-en szigorúan tilos
• csak kernel space-en lehet korlátosan rövid ideig
• (ott viszont alkalmazzák)

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 7


Locking
Zárolás változók 1

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 8


Locking
Zárolás változók 2

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 9


Strict Alternation

while(true) while(true)
{
{
do {} while(turn!=1); //wait
do {} while(turn!=0); //wait
critical_region();
critical_region();
turn=0;
turn=1; non_critical_region();
non_critical_region(); }
}

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 10


Strict Alternation

• con:
• tevékenyen várakozik/foglalja a processzort
• max csak 2 processzre jó

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 11


Peterson algoritmus

int interested[2]; //globális változók, kezdeti értékük 0


int turn;
void enter_region(int process)
{ int other;
other=1-process;
interested[process]=true; //mutatja, hogy a folyamat érintett
turn=process; //jelző beállítása
do {} while((turn==process) && (interested[other]==True));
}
void leave_region(int process)
{
interested[process]=false;
}

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 12


Peterson algoritmus

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 13


Peterson algoritmus

• A legrosszabb eset
• egyszerre 2 processz lép a while ciklusba
• ilyenkor mind a két interested változó true
• és az egyik turn írás elveszik
• ami nem baj, mert a felülíró processz fog várakozni, míg a felül írt érték jelzi a
„felülírt” processznek, hogy benne van a CS-ben

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 14


Peterson algoritmus jellemzői

• pro
• megoldja a problémánkat elvileg tökéletesen
• con
• tevékenyen várakozik

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 15


Nota Bene

• A tipikus hiba:
• kiolvasunk egy változót és azt feltételezzük, hogy a következő lépésben is
ugyanaz az értéke a memóriában, mint amit kiolvasunk!

• Erre megoldás:
• írunk a process „saját” változójába (interested) és utána vizsgáljuk a más
processzek „saját változóik, valamint egy „task változó” (turn) változót.

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 16


Test and Set Lock (TSL)
Nem megszakítható utasítás:
lockolja a buszt

enter_region:
tsl reg, lock
cmp reg, #0
jne enter_region
ret

leave_region:
move lock, #0
ret

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 17


Priority inversion: a fordított prioritás
problémája

• Adott
• 2 task:
• H (magas prioritású) sűrűn kap vezérlést
• L (alacsony prioritású) ritkán kap vezérlést (esetleg soha, ha H is futhat)
• 1 erőforrás
• Végrehajtási sorrend:
• 1, L – enter_region
• 2, H – enter_region -> … pending
• 3, L – ritkán (esetleg soha) nem kap vezérlést
• 4, H – nagyon gyorsan várakozik, de L csak lassan (soha) nem fejezi be.
Ez olyan, mintha a H alacsonyabb prioritású lenne, mint L!

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 18


Gyártó-fogyasztó probléma
(sleep/wakeup)
NB: enter_item() ->push()
remove_item() -> pop()
#define N 100
int count=0; void consumer(void)

void producer(void) {
{ while(true)
while(true) {
{
if (count==0)
i=produce_item();
if (count==N) sleep();

sleep(); i=remove_item();
enter_item(i); count--;
count++; if (count==(N-1))
if (count==1)
wakeup(producer);
wakeup(consumer);
consume_item(i);
}
} }

}
2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 19
Gyártó-fogyasztó probléma 2

• A jelzett ponton task switch


• utána a customer fut 1x, majd
• mivel azt gondolhatja a count=N-1-nél, hogy a producer aludhat, küld egy
wakeup-ot, ez viszont elveszik, mivel a producer nem aludt
• a consumer elfogyasztja az összes elemet, majd sleep-el
• a producer visszakapja a vezérlést és sleep-el
• ez a DEAD LOCK – avagy holtpont

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 20


Szemaforok
(„Stack-elt alvások”) 1965

• Elemi (nem megszakítható) műveleteket definiálunk rajtuk


• növelhető az „elmentett” alvások száma UP
• avagy csökkenthető: DOWN
• Ha értéke zérus és DOWN jönne -> sleep következik be.
n

Sleep állapot

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 21


Gyártó-fogyasztó szemaforral

typedef int semaphore;


semaphore mutex=1, empty=N, full=0;
void producer(void) void consumer(void)
{ {
while(true) while(true)
{ {
i=produce_item(); down(&full);
down(&empty); down(&mutex);
down(&mutex); i=remove_item();
enter_item(i); up(&mutex);
up(&mutex); up(&empty);
up(&full); consume_item(i);
} }
} }

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 22


Nota bene

• mutex
• kölcsönös kizárás: egyszerre csak 1 processz lehet egy mutex-szel védett
program területen. Mutex-et lehet semaphore-ból is csinálni, de a fogalom ennél
sokkal többet is jelent.

• full, empty flagek működése:


• sorrendiséget definiálnak és sleep-eltetik avagy wakeup-oltatják a használó
processzeket.

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 23


Monitor

• ha véletlenül felcserélnénk az egyik mutex kezelést az egyik sorrendiséget


kezelő semaphore-ral – DEADLOCK alakulhat ki
• Komplex feladatokat ellátó struktúrákat hoztak létre, amik standard
feladatokat látnak el. Pl a producer avagy costumer, amelyeket mutex-ekkel
védenek, az elől, hogy az egyik proc futását megszakítsa a másik.

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 24


Gyártó-fogyasztó monitorral

void producer(void) void consumer(void)


{ {
while(true) while(true)
{
{
i=remove();
i=produce_item(); consume(i);
enter(i); }
} }
}

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 25


Gyártó-fogyasztó monitorral
void remove()
void enter(item i) {
CS_enter(mutex)
{
if(cnt==0)
CS_enter(mutex)
if(cnt==N) wait(empty)
cnt--
wait(full)
i=remove_item()
cnt++
if(cnt==N-1)
enter_item(i)
if(cnt==0) signal(full)
CS_leave(mutex)
signal(empty)
}
CS_leave(mutex)
}

Mivel mutex-szel védett területen történik a testelés és az alvás, nem lesz holtpont.

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 26


Messages

• Üzenet küldéssel adjuk át az adatokat a két processz között


• ha a processz lassabb lenne, mint a másik:
• ezt hívják elárasztásnak (levél áradásnak)

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 27


Gyártó-fogyasztó probléma üzenet küldéssel
void customer(void)
{
// N üres üzenet küldése: alloc fifo
for(i=0;i<N;i++) send(producer, &m);
void producer(void)
{
while(true) while(true)
{ {
i= produce_item(); recieve(producer, &m);//something?
recieve(consumer, &m);//empty? extract_item(&m, &i);
build_message(&m, i); send(prducer, &m); //inc. fifo
send(consumer, &m); //full consume_item(i);
} }
} }

NB: 1, a producer queue-ának hossza jelenti a fifo hosszát


2, a consumer message queu-ja csak 1 fifo üzenetért, az ”empty”-ért felelős
2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 28
5 filozófus

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 29


5 filozófus

#define N 5 /* number of philosophers */

void philosopher(int i) /* i: philosopher number, from 0 to 4*/


{
while (TRUE) {
think(); /* philosopher is thinking */
take_fork(i); /* take left fork */
take_fork((i+1) % N); /* take right fork; % is modulo operator */
eat(); /* yum-yum, spaghetti */
put_fork(i); /* put left fork back on the table */
put_fork((i+1) % N); /* put right fork back on the table */
}
}

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 30


2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 31
Írók és olvasók

Vagy
• Sok olvasó ér el egy közös adatbázist
vagy
• Egyszerre csak 1 író érheti el, de ekkor egyetlen olvasó sem.

Pld: légi foglalási rendszer

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 32


Író-olvasók

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 33


Író-olvasók

• Pro:
• megoldja a problémát
• Con:
• ha folyamatosan jönnek az olvasók, az író sosem fog az adatbázishoz hozzáférni.
• megoldás: ha várakozik író is, akkor több olvasót nem engedünk be…

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 34


Alvó borbély

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 35


2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 36
Összefoglalás

• Kölcsönös kizárás, megoldási lehetőségek, egyszerű IPC-k:


• locking variables, critical section, mutex, wake/sleep, test and lock, mutex,
message, semaphores
• Klasszikus problémák
• gyártó-fogyasztó, 5 filozófus, író-olvasó, alvó borbély
• és megoldásaik

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 37


Ellenőrző kérdések

Mi az érv és az ellenérv az interrupt tiltásos kölcsönös kizárásos megoldásokra?


Mi a deadlock? Adjon meg pontos definíciót.
Mi a mutex/monitor/semaphore/sleep-wake?
Milyen kommunikációs primitívekkel néztük meg a gyártó-fogyasztó probléma
megoldásait?
Milyen gondolati hiba a deadlock-ok tipikus oka? és megoldása?
Mi a TSL? Mi a zárolás változó (Lock)?
Mit jelent az, hogy atomi művelet?
Mi a Peterson algoritmus trükkje?
Mi az 5 filozófus problémája? és megoldása?
Mi a prioritás inverzió?

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 38


Kapcsolódó ZV tétel

• 19. Versenyhelyzetek: Konkurens folyamatok közötti kommunikáció,


versenyhelyzet, kritikus szekció fogalma, kritikus szekció sikeres
megvalósításának a feltételei. Konkurrens programozás alapjai:
megszakítások tiltása, zárolásváltozó, szigorú alternáció, Peterson módszere,
Test and Set Lock utasítás; prioritás inverzió; gyártó-fogyasztó probléma;
szemaforok, mutexek, monitorok; 5 filozófus problémája, író-olvasó probléma,
alvó-borbély problémája.

2022. 10. 29. Operációs Rendszerek előadás - Dr. Megyesi Zoltán 39

You might also like