kategória | ||||||||||
|
||||||||||
|
||
Változótípus a szemafor, amelyben számon tarthatunk ***.
Szemaforban elmenthetjük, hogy hány függőben lévő ébresztés van.
Két művelet a DOWN és az UP. Ezek a SLEEP és a WAKEUP általánosításai.
DOWN:
Megvizsgálja a szemafor értékét, ha az >0 , akkor csökkenti
=0 , akkor altat
A szemafor értékének ellenőrzése, cseréje elemi művelet!
UP:
Növeli a szemafor értékét ha tudja.
Gyártó-fogyasztó probléma megoldása szemaforok segítségével
Az UP és DOWN rendszerhívással valósul meg, mert a szemaforok műveletei elemi művelet kell legyen. (Az op. rendszer ezalatt tiltja a megszakításokat).
#define N 100;
typedef int semaphore
semaphor mutex = 1; //felügyeli a kritikus szekciók elérését
semaphor empty = N; //a tároló üres rekeszeinek száma
semaphor full = 0; //a tároló tele rekeszeinek száma
Void producer (void)
Mutex biztosítja, hogy a gyártó és a fogyasztó egy időben ne érje el a tárolót.
Void consumer (void)
Olyan szemafor, amelynek kezdőértéke 1 és arra szolgálna, hogy biztosítsák, hogy kettő vagy több processzus közül egy időben csak egyikük léphessen be a kritikus szekcióba.
Ha minden processzus akkor hív meg egy DOWN-t mielőtt belép és akkor egy UP-ot miután kilépett a kritikus szekcióból, a kölcsönös kizárás biztosított.
Az az állapot, amelyben minden processzus blokkolt állapotba kerül és nem folyna soha már munka.
A processzusok kommunikációjának módja, amely két rendszerhívást a SEND és a RECIEVE-et használja. Az első üzenetet küld egy másik processzushoz, a másik üzenetet fogad.
Gyártó-fogyasztó probléma üzenetküldéssel (nem megosztott memóriával)
Az üzeneteket a processzusokhoz kell címezni, egyedi processzuscímmel, vagy levelesládában tárolni, így az üzeneteket a levelesládába kell rakni.
#define N 100
Void producer (void)
Void consumer (void)
A fogyasztó N üzenet elküldésével kezdi (üres üzenetet küld) a gyártó vesz egy üres üzenetet, és visszaküld egy telit.
Találat: 1562