Operációs rendszerek Folyamatközi kommunikáció 1.1

Hasonló dokumentumok
Operációs rendszerek MINB240

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Operációs rendszerek. 3. előadás Ütemezés

Dr. Illés Zoltán

Tartalom. Operációs rendszerek. Precedencia. 3.2 Szinkronizáció. 3.1 Folyamatokból álló rendszerek. Együttműködő folyamatok használatának indokai

C# Szálkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Szálkezelés / 21

Termelő-fogyaszt. fogyasztó modell

Operációs rendszerek Folyamatok 1.1

Operációs rendszerek MINB240

... S n. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak.

Dr. Illés Zoltán

Operációs rendszerek. Az Executive és a kernel Policy és mechanizmusok szeparálása Executive: policy - objektum kezelés Kernel: mechanizmusok:

Operációs rendszerek MINB240

Szenzorhálózatok programfejlesztési kérdései. Orosz György

Matematikai és Informatikai Intézet. 4. Folyamatok

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Operációs rendszerek

Bevezetés a számítástechnikába

LabView Academy. 4. óra párhuzamos programozás

Előadás_# Az első ZH megírása

Kölcsönös kizárás, atomicitás, szemafor.

Assembly. Iványi Péter

Operációs rendszerek

6. Közös változóval rendelkező párhuzamos program, Közös változó,

Folyamatok. 6. előadás

Mértékegységek a számítástechnikában

Windows ütemezési példa

Bevezetés, a C++ osztályok. Pere László

Számítógép felépítése

Folyamatszálak. Folyamatszálak. Folyamat. Folyamatszál. Szálak felépítése. Folyamatszálak általános jellemzői

Nem biztos, hogy mindenhol helytáll, helyenként hiányos, de az eddigi kérdések össze vannak gyűjtve őszi félév első zhval bezárólag.

Bonyolultságelmélet. Thursday 1 st December, 2016, 22:21

Architektúra, megszakítási rendszerek

Mir l lesz szó? Operációs rendszerek. A sorbaállási modell. A sorbaállási modell. Er forrás csoportosítás 1. Er forrás csoportosítás 2

Informatika érettségi vizsga

Atomi műveletek őrfeltételének meghatározása. Konkrét program elkészítése. 1. Példa: Számítógép labor használata.

Uniprogramozás. várakozás. várakozás. Program A. Idő. A programnak várakoznia kell az I/Outasítások végrehajtására mielőtt továbbfuthatna

Operációs rendszerek. Az NT folyamatok kezelése

Operációs rendszerek

Informatika 1 2. el adás: Absztrakt számítógépek

Szálak szinkronizálása (Ro- Sincronizarea threadurilor)

A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása

Nyíregyházi Főiskola Matematika és Informatika Intézete. Holtpont (Deadlock) Alapfogalmak, példák, ábrázolás. Biztonságos és nem biztonságos állapot

Folyamatszálak szinkronizálása

Tartalomjegyzék. Előszó... 10

Konkurens TCP Szerver

Léteznek nagyon jó integrált szoftver termékek a feladatra. Ezek többnyire drágák, és az üzemeltetésük sem túl egyszerű.

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Operációs rendszerek II. Folyamatok ütemezése

Feladatok (task) együttműködése

Programozási nyelvek és módszerek Java Thread-ek

Az UPPAAL egyes modellezési lehetőségeinek összefoglalása. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

A programozás alapjai 1 Rekurzió

Operációs rendszerek. Folyamatok

2018, Diszkrét matematika

Operációs Rendszerek II.

7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II.

ÉRZÉKELŐK ÉS BEAVATKOZÓK I. GY1.1 SENSACT0 PÉLDAPROGRAM

Informatikai rendszerek alapjai (Informatika I.)

Operációs rendszerek. 4. gyakorlat: Szignálok küldése, kezelése

Fejlett programozási nyelvek C++ Iterátorok

Kiterjesztések sek szemantikája

Operációs rendszerek be és kivitelkezelése, holtpont fogalma, kialakulásának feltételei, holtpontkezelési stratégiák, bankár algoritmus.

Operációs Rendszerek II.

Operációs rendszerek - párhuzamos folyamatok.

Analitikai megoldások IBM Power és FlashSystem alapokon. Mosolygó Ferenc - Avnet

Operációs rendszerek

1. Az utasítás beolvasása a processzorba

Tervminták a valósidejű gyakorlatban

INFORMATIKA javítókulcs 2016

Az operációs rendszer szerkezete, szolgáltatásai

OPERÁCIÓS RENDSZEREK 1. PROCESSZKEZELÉS

Elosztott rendszerek

Digitális rendszerek. Utasításarchitektúra szintje

Stack Vezérlés szerkezet Adat 2.

OE-NIK 2010/11 ősz OE-NIK ősz

1. tétel Halmazok és halmazok számossága. Halmazműveletek és logikai műveletek kapcsolata.

Verem Verem mutató 01

TARTALOM ÓVINTÉZKEDÉSEK...1 TÍPUS ÉS MŰSZAKI ADATOK...1 GOMBOK ÉS FUNKCIÓJUK...2 JELZÉSEK ÉS FUNKCIÓK...5 ÜZEMELTETÉSI UTASÍTÁSOK...

2. rész BEVEZETÉS A SZÁMÍTÓGÉPEK VILÁGÁBA. Az információ elérésének és felhasználásának képessége.

Programozás alapjai Bevezetés

Operációs rendszerek

BEVEZETÉS A SZÁMÍTÓGÉPEK VILÁGÁBA

Az interrupt Benesóczky Zoltán 2004

Szimuláció RICHARD M. KARP és AVI WIGDERSON. (Készítette: Domoszlai László)

Operációs rendszerek. Folyamatok

Szoftverarchitektúrák 3. előadás (második fele) Fornai Viktor

Autóipari beágyazott rendszerek. Komponens és rendszer integráció

2016, Diszkrét matematika

Dr. Oniga István DIGITÁLIS TECHNIKA 8

5/1. tétel: Optimalis feszítőfák, Prim és Kruskal algorithmusa. Legrövidebb utak graphokban, negatív súlyú élek, Dijkstra és Bellman Ford algorithmus.

A számítógép egységei

BASH script programozás II. Vezérlési szerkezetek

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

ISA szimulátor objektum-orientált modell (C++)

Optimista konkurenciavezérlés

A modell-ellenőrzés gyakorlata UPPAAL

Osztott jáva programok automatikus tesztelése. Matkó Imre BBTE, Kolozsvár Informatika szak, IV. Év 2007 január

Végrehajtási szálak - kiegészítések. Szinkronizálás, érvénytelenített metódusok helyettesítése

Átírás:

Operációs rendszerek Folyamatközi kommunikáció 1.1 Pere László (pipas@linux.pte.hu) PÉCSI TUDOMÁNYEGYETEM TERMÉSZETTUDOMÁNYI KAR INFORMATIKA ÉS ÁLTALÁNOS TECHNIKA TANSZÉK

Operációs rendszerek p. Az IPC Az IPC (inter process communication) kérdésköre: Hogyan tud információt átadni az egyik folyamat a másiknak?

Operációs rendszerek p. Az IPC Az IPC (inter process communication) kérdésköre: Hogyan tud információt átadni az egyik folyamat a másiknak? Hogyan bizonyosodhatunk meg arról, hogy két folyamat nem áll egymás útjába?

Operációs rendszerek p. Az IPC Az IPC (inter process communication) kérdésköre: Hogyan tud információt átadni az egyik folyamat a másiknak? Hogyan bizonyosodhatunk meg arról, hogy két folyamat nem áll egymás útjába? Milyen sorrendet kell tartanunk, ha függőségek léteznek?

Operációs rendszerek p. IPC és multi-thread Az itt tárgyalt módszerek multi-thread rendszerek esetében a szálak kezelésében is segítenek, hiszen a szálak közti kapcsolattartás hasonló problémákat vet fel. A szálakat éppen ezért sokszor könnyű folyamatoknak is nevezzük (lightweight processes).

Operációs rendszerek p. Versenyhelyzet Spooler directory Process A 4 5 6 7 abc prog.c prog.n out = 4 in = 7 Process B 1. ábra. A versenyhelyzet és következménye

Operációs rendszerek p. Versenyhelyzet Két vagy több folyamat egy időben használ egy közös erőforrást, a futás végeredménye attól függő, hogy pontosan mikor, melyik folyamat futott. A folyamatok futása így nem jósolható, esetlegessé válik. Ezt a szituációt versenyhelyzetnek (race condition) nevezzük. Vegyük észre, hogy a versenyhelyzet nem azt jelenti, hogy két folyamat verseng az erőforrás használatáért, a baj tehát megtörtént.

Operációs rendszerek p. Kölcsönös kizárás A versenyhelyzet megelőzésének érdekében biztosítanunk kell, hogy a folyamatok ne használják egyidőben a közös erőforrásokat. A szokásos módszer az, hogy a folyamatok időről időre kizárólagos jogokat szereznek az erőforrás használatához. Ez a kölcsönös kizárás (mutual exclusion) módszere. Vegyük észre, hogy a kölcsönösség nem jelentheti az egyidejűséget, nem egy időpontban zárják ki egymást, mert az katasztrófához fevetne!

Operációs rendszerek p. Kritikus szakaszok A kommunikáló folyamatokban vannak olyan szakaszok, amelyekben a megosztott erőforrásokat kezelik, olyan műveleteket végeznek, amelyek versenyhelyzethez vezetnek. Ezeket a szakaszokat kritikus szakaszoknak nevezzük. Ha elkerülhetjük, hogy egyszerre két folyamat legyen kritikus szakaszban, a versenyhelyzet elkerülhető.

Operációs rendszerek p. Kölcsönös kizárás A enters critical region A leaves critical region Process A B attempts to enter critical region B enters critical region B leaves critical region Process B B blocked T 1 T 2 T 3 T 4 Time 2. ábra. A kölcsönös kizárás megvalósítása kritikus szakaszok kezelésével

Operációs rendszerek p. A helyes kapcs. feltételei A tökéletes kapcsolattartáshoz a következő feltételeknek kell teljesülniük: Egyszerre legfeljebb egy folyamat van kritikus szakaszban.

Operációs rendszerek p. A helyes kapcs. feltételei A tökéletes kapcsolattartáshoz a következő feltételeknek kell teljesülniük: Egyszerre legfeljebb egy folyamat van kritikus szakaszban. Nincs beépített előfeltételezés az időzítés és a CPU-k számára nézve.

Operációs rendszerek p. A helyes kapcs. feltételei A tökéletes kapcsolattartáshoz a következő feltételeknek kell teljesülniük: Egyszerre legfeljebb egy folyamat van kritikus szakaszban. Nincs beépített előfeltételezés az időzítés és a CPU-k számára nézve. A folyamat, amely nincsen kritikus szakaszban, nem blokkolhatja a többi folyamatot.

Operációs rendszerek p. A helyes kapcs. feltételei A tökéletes kapcsolattartáshoz a következő feltételeknek kell teljesülniük: Egyszerre legfeljebb egy folyamat van kritikus szakaszban. Nincs beépített előfeltételezés az időzítés és a CPU-k számára nézve. A folyamat, amely nincsen kritikus szakaszban, nem blokkolhatja a többi folyamatot. Egyetlen folyamatnak sem kell végtelen hosszú ideig várnia, hogy beléphessen a kritikus szakaszba.

Operációs rendszerek p. A megszakítás tiltása A kölcsönös kizárás biztosítására használható a megszakítás tiltása, de ez nem szerencsés, mert: Ha a felhasználói folyamat tiltja a megszakítást, esetleg nem kapcsolja vissza. Mindazonáltal a megszakítás tiltása az OS magjában használható megoldás.

Operációs rendszerek p. A megszakítás tiltása A kölcsönös kizárás biztosítására használható a megszakítás tiltása, de ez nem szerencsés, mert: Ha a felhasználói folyamat tiltja a megszakítást, esetleg nem kapcsolja vissza. Több processzor esetén nem hatásos a védelem. Mindazonáltal a megszakítás tiltása az OS magjában használható megoldás.

Operációs rendszerek p.1 A zárolás Legyen egy változó, amely jelzi, hogy hány folyamat van kritikus szakaszban. A folyamat a kritikus szakasz előtt ellenőriz, csak akkor lép be a kritikus szakaszba, ha a változó 0, de előtte beállítja 1-re.

Operációs rendszerek p.1 A zárolás Legyen egy változó, amely jelzi, hogy hány folyamat van kritikus szakaszban. A folyamat a kritikus szakasz előtt ellenőriz, csak akkor lép be a kritikus szakaszba, ha a változó 0, de előtte beállítja 1-re. Versenyhelyzet van a változó olvasása és az írása között. Ez az új kritikus szakasz, a változó pedig a közösen használt erőforrás.

Operációs rendszerek p.1 A szigorú váltás 1 while( TRUE ){ while(true){ 2 while(ford!= 0); while(ford!= 1); 3 kritikus(); kritikus(); 4 ford = 1; ford = 0; 5 egyeb(); egyeb(); 6 } } A két folyamat közül mindig csak az egyik lehet a kritikus szakaszban, a versenyhelyzet teljesen kizárt.

Operációs rendszerek p.1 A szigorú váltás hátrányai A szigorú váltás a legtöbb esetben nem használható a következő okok miatt: Ha az egyik folyamat sokkal lassab, mint a másik, nem használható.

Operációs rendszerek p.1 A szigorú váltás hátrányai A szigorú váltás a legtöbb esetben nem használható a következő okok miatt: Ha az egyik folyamat sokkal lassab, mint a másik, nem használható. Két művelet nem végezhető egymás után.

Operációs rendszerek p.1 A szigorú váltás hátrányai A szigorú váltás a legtöbb esetben nem használható a következő okok miatt: Ha az egyik folyamat sokkal lassab, mint a másik, nem használható. Két művelet nem végezhető egymás után. Sérti a 3. feltételt, a folyamat akkor is akadályozhat, ha nincs kritikus szakaszban.

Operációs rendszerek p.1 Peterson megoldása (1981) 1 void belep(int folyamat){ 2 int masik = 1 - folyamat; 3 keres[folyamat] = TRUE; 4 ford = folyamat; 5 while(ford == folyamat && 6 keres[masik] == TRUE ); 7 } 8 9 void kilep(int folyamat){ 10 keres[folyamat] = FALSE; 11 }

Operációs rendszerek p.1 TSL (test and set lock) A TSL gépi kódú utasítás beolvas egy memóriacellát a regiszterbe és beleír egy 0-tól különböző értéket. A TSL atomos (multiprocesszoros környezetben is). 1 enter: leave: 2 TSL RX, Lock MOV Lock, 0 3 CMP RX, 0 RET 4 JNE enter 5 RET

Operációs rendszerek p.1 Elfoglalt várakozás A megoldásban megfigyelhető az elfoglalt várakozás (busy waiting), ami azt jelenti, hogy a folyamat az erőforrásra való várakozás közben utasításokat hajt végre. Az elfoglalt várakozás csak különleges esetekben elfogadható, mert: Pazarolja az erőforrást, akkor is használja a processzort, amikor várakozik.

Operációs rendszerek p.1 Elfoglalt várakozás A megoldásban megfigyelhető az elfoglalt várakozás (busy waiting), ami azt jelenti, hogy a folyamat az erőforrásra való várakozás közben utasításokat hajt végre. Az elfoglalt várakozás csak különleges esetekben elfogadható, mert: Pazarolja az erőforrást, akkor is használja a processzort, amikor várakozik. Prioritás inverzióhoz vezet (a magasabb prioritású folyamat nem engedi a társának, hogy beengedje a kritikus szakaszba).

Operációs rendszerek p.1 Alvás ébresztés A legegyszerűbb módszer a busy waiting elkerülésére az alvás-ébresztés (sleep and wakeup) eljárás. A folyamat, amelyik nem tud belépni a kritikus szakaszba, a blokkolását kéri abban a reményben, hogy a másik folyamat felébreszti. Az alvás-ébresztés módszer tahát a folyamatok állapotait és az operációs rendszer szolgáltatásait használja a kölcsönös kizárás megvalósítására.

Operációs rendszerek p.1 Termelő-fogyasztó probléma A számítástechnikában nagyon sokszor előforduló, tipikus IPC feladat a termelő-fogyasztó (producer-consumer problem): Ha a termelő azt látja, hogy az átmeneti tároló tele, aludni tér.

Operációs rendszerek p.1 Termelő-fogyasztó probléma A számítástechnikában nagyon sokszor előforduló, tipikus IPC feladat a termelő-fogyasztó (producer-consumer problem): Ha a termelő azt látja, hogy az átmeneti tároló tele, aludni tér. Ha a fogyasztó azt látja, hogy a tároló üres, aludni tér.

Operációs rendszerek p.1 Termelő-fogyasztó probléma A számítástechnikában nagyon sokszor előforduló, tipikus IPC feladat a termelő-fogyasztó (producer-consumer problem): Ha a termelő azt látja, hogy az átmeneti tároló tele, aludni tér. Ha a fogyasztó azt látja, hogy a tároló üres, aludni tér. Ha a termelő által elhelyezett elem az utolsó amelynek helye volt, felébreszti a fogyasztót.

Operációs rendszerek p.1 Termelő-fogyasztó probléma A számítástechnikában nagyon sokszor előforduló, tipikus IPC feladat a termelő-fogyasztó (producer-consumer problem): Ha a termelő azt látja, hogy az átmeneti tároló tele, aludni tér. Ha a fogyasztó azt látja, hogy a tároló üres, aludni tér. Ha a termelő által elhelyezett elem az utolsó amelynek helye volt, felébreszti a fogyasztót. Ha a fogyasztó azt látja, hogy az elfogyasztott elem az utolsó, felébreszti a termelőt.

Operációs rendszerek p.1 A probléma A versenyhelyzet egyrészről a közös terület, másrészről a közös változók miatt jelentkezik. A termelő-fogyasztó folyamatok versenyhelyzetbe kerülhetnek, mivel az elhelyezett elemek számát tároló változó nem védett. Ilyenkor fennáll annak a veszélye, hogy a folyamatok mindegyike alvó állapotba kerül, ahonnan semmi nem mozdítja ki őket.

Operációs rendszerek p.1 Szemaforok (Dijsktra, 1965) A szemafor védett atomos kezelésű, versenyhelyzet mentes változó két művelettel: DOWN csökkentés: a) ha a szemafor értéke nagyobb mint 0, eggyel csökken az értéke b) ha a szemafor értéke 0, a hívó folyamat blokkolódik UP növelés: A szemafor értéke növekszik eggyel. Ha van folyamat, amely e miatt a szemafor miatt blokkolódott, egyet kiválaszthatunk és az azonnal csökkentheti az értéket.

Operációs rendszerek p.2 Szemaforok a gyakorlatban A szemaforokat az operációs rendszer szolgáltatja: Az OS a szemafor kezelésének idejére tiltja a megszakítást. A szemaforokat egyenként védjük egy-egy lock változóval és TSL utasítással. A szemafor kezelése olyan gyors, hogy nem okoz gondot a busy waiting.

Operációs rendszerek p.2 Szemaforok a gyakorlatban A szemaforokat az operációs rendszer szolgáltatja: Az OS a szemafor kezelésének idejére tiltja a megszakítást. Több processzor esetén TSL és busy waiting, de ez használható, mert rövid időről van szó. A szemaforokat egyenként védjük egy-egy lock változóval és TSL utasítással. A szemafor kezelése olyan gyors, hogy nem okoz gondot a busy waiting.

Operációs rendszerek p.2 Producer-consumer A következő definíciók teszik lehetővé a program működését: 1 #define N 100 2 #typedef int semaphore 3 semaphore mutex = 1; 4 semaphore empty = N; 5 semaphore full = 0;

Operációs rendszerek p.2 Producer-consumer 1 void producer(void){ 2 int item; 3 while( TRUE ){ 4 item = produce_item(); 5 down(&empty); 6 down(&mutex); 7 insert_item(); 8 up(&mutex); 9 up(&full); 10 } 11 }

Operációs rendszerek p.2 Producer-consumer 1 void consumer(void){ 2 int item; 3 while( TRUE ){ 4 down(&full); 5 down(&mutex); 6 item = remove_item(); 7 up(&mutex); 8 up(&empty); 9 consume_item(item); 10 } 11 }

Operációs rendszerek p.2 Szemaforhasználat A termelő-fogyasztó példában a szemaforok kétféle használata is látható. A mutex szemafor a versenyhelyzet elkerülésére, a kölcsönös kizárás megvalósítására szolgál (bináris szemafor). Az empty és a full szemaforok szinkronizálásra szolgálnak.

Operációs rendszerek p.2 Mutexek Ha a szemafort bináris szemaforként használjuk, megfelelő lehet a mutex is, amely alkalmas a kölcsönös kizárás megvalósítására. A Mutex könnyedén implementálható user területen, így alkalmas user space thread scheduler készítésére. (Mutual exclusion=kölcsönös kizárás) A megvalósításhoz kell a TSL, a következő módon:

Operációs rendszerek p.2 Mutex példa A következő példaprogram mutexet valósít meg multi-thread környezetben TSL utasítás segítségével: 1 mutex_lock: mutex_unlock: 2 TSL RX, mutex MOV mutex, 0 3 CMP RX, 0 RET 4 JZE ok 5 CALL thread_yield 6 JMP mutex_lock 7 ok: 8 RET

Operációs rendszerek p.2 Ebédelő filozófusok esete 3. ábra. Az asztal elrendezése

Operációs rendszerek p.2 Ebédelő filozófusok esete Kör alakú asztal, rajta 5 tányér spagetti és 5 villa, minden két villa között egy tányér. A filozófus vagy eszik, vagy gondolkodik, az evéshez két villára van szükség, ellenben egyszerre csak egy villát képes felvenni a filozófus. A közös erőforráshasználat versenyhelyzethez vezet. Vegyük észre, hogy az egyszerű, versenyhelyzetet kiküszöbölő megoldás deadlock-hoz vezet!

Operációs rendszerek p.2 Ebédelő filozófusok I. 1 #define N 5 2 #define LEFT (i+n-1)%n 3 #define RIGTH (i+1)%n 4 #define THINKING 0 5 #define HUNGRY 1 6 #define EATING 2 7 8 typedef int semaphore; 9 int state[n]; 10 semaphore mutex = 1; 11 semaphore s[n];

Operációs rendszerek p.3 Ebédelő filozófusok II. 1 /* Főciklus, folyamatonként egy. 2 * Gondolkodunk, villát szerzünk, eszünk, 3 * letesszük a villákat majd újra. 4 */ 5 void philosopher( int i){ 6 while( TRUE ){ 7 think(); 8 take_forks(i); 9 eat(); 10 put_forks(i); 11 } 12 }

Operációs rendszerek p.3 Ebédelő filozófusok III. 1 /* Megpróbálunk 2 villát szerezni. Ha nem 2 * megy blokkolunk a szomszédaink fel- 3 * ébresztenek, ha letették a villát. 4 */ 5 void take_forks(int i){ 6 down(&mutex); 7 state[i]=hungry; 8 test(i); /* bróbálkozunk */ 9 up(&mutex); 10 down(&s[i]); /* blokkolunk */ 11 }

Operációs rendszerek p.3 Ebédelő filozófusok IV. 1 /* Letesszük a villát, ha valamelyik 2 * szomszédunk emiatt enni tud, 3 * felébresztjük. */ 4 void put_forks(int i){ 5 down(&mutex); 6 state[i]=thinking; 7 test(left); /* bal oldal tud enni? */ 8 test(right); /* jobb oldal tud enni? */ 9 up(&mutex); 10 }

Operációs rendszerek p.3 Ebédelő filozófusok V. 1 /* Amikor ezt a segédfüggvényt hívjuk, a 2 * mutex már tiltva van. 3 */ 4 void test( int i ){ 5 if( state[i]==hungry && 6 state[left]!=eating && 7 state[right]!=eating ){ 8 state[i]=eating; 9 up(&s[i]); 10 } 11 }

Operációs rendszerek p.3 Írók és olvasók Az írók-olvasók klasszikus problémája esetén egy közös területet írnak és olvasnak folyamatok. Az olvasók mivel nem változtatnak az adatokan működhetnek egyidőben, az írók azonban természetesen nem. Ha egy író kritikus szakaszban van, az olvasók nem lehetnek abban, de tetszőleges sok olvasó lehet kritikus szakaszban, ha nincs író.

Operációs rendszerek p.3 Írók és olvasók I. 1 typedef int semaphore; 2 semaphore mutex=1; /* rc változót védi */ 3 semaphore db=1; /* adatbázist védi */ 4 int rc=0; /* hányan olvasnak v. 5 akarnak olvasni */

Operációs rendszerek p.3 Írók és olvasók II. void reader(){ while(true){ down(&mutex); rc++; if( rc==1 ) /* Ha ez az első olvasó, down(&db); * kizárja az írót */ up(&mutex); read_data_base(); down(&mutex); rc--; if( rc==1 ) /* Ha ez az utolsó olvasó, up(&db); * beengedjük az írót */ up(&mutex); use_data_read(); } }

Operációs rendszerek p.3 Írók és olvasók III. 1 void writer(){ 2 while(true){ 3 think_up_data(); 4 down(&db); 5 write_data_base(); 6 up(&db); 7 } 8 }

Operációs rendszerek p.3 Írók és olvasók IV. Figyeljük meg, hogy a vázolt megoldást használva az olvasók kiéheztethetik az írót, hiszen ha folyamatosan érkeznek, az író nem jut hozzá az adatbázishoz!