Professional Documents
Culture Documents
8. előadás - Versenyhelyzetek
Links
• http://www.iit.uni-miskolc.hu/%7Evadasz/GEIAL201/Jegyzet/3rd.pdf
• A. Tanenbaum: Op rendszerek
• 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
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(); }
}
• con:
• tevékenyen várakozik/foglalja a processzort
• max csak 2 processzre jó
• 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
• pro
• megoldja a problémánkat elvileg tökéletesen
• con
• tevékenyen várakozik
• 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.
enter_region:
tsl reg, lock
cmp reg, #0
jne enter_region
ret
leave_region:
move lock, #0
ret
• 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!
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
Sleep állapot
• 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.
Mivel mutex-szel védett területen történik a testelés és az alvás, nem lesz holtpont.
Vagy
• Sok olvasó ér el egy közös adatbázist
vagy
• Egyszerre csak 1 író érheti el, de ekkor egyetlen olvasó sem.
• 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…