WPROWADZENIE Semafor jako element synchronizacji między

Transkrypt

WPROWADZENIE Semafor jako element synchronizacji między
WPROWADZENIE
Semafor jako element synchronizacji między procesami – Producent i Konsument
W pewnym systemie współdziałają ze sobą: producent P i konsument K. Producent wytwarza produkty klasy A, które zużywa
konsument K. Produkty są umieszczane we wspólnym buforze o pojemności m0. W danej chwili tylko 1 producent może składać, albo
tylko 1 konsument może pobierać produkt (nie wolno im tego robić jednocześnie). Wprowadzić odpowiednie semafory i zaprojektować
ogólną strukturę programów Producenta i Konsumenta tak, by mogły być realizowane współbieżnie.
Rozwiązanie:
przypadek, gdy m0 =1
Potrzebne będą semafory:
o
m – związany z wolnym miejsc w buforze
o
p – związany z zajętością miejsca w buforze
Warunki początkowe:
o
Liczba wytworzonych produktów e0(p) = 0
o
liczba wolnych miejsc e0(m) = 1
PRODUCENT:
KONSUMENT:
cyklicznie
cyklicznie
{
{
wytwórz dane;
P(p);
P(m);
pobierz dane;
złóż dane;
V(m);
V(p);
skonsumuj dane
}
}
przypadek, gdy m0 >1
Potrzebne będą semafory:
o
m – związany z liczbą aktualnie wolnych miejsc w buforze
o
p – związany z liczbą produktów w buforze
o
dostęp – kontrolujący dostęp do bufora
Warunki początkowe:
o
Magazyn jest pusty i ma pojemność m0.
o
Liczba wytworzonych produktów e0(p) = 0
o
liczba wolnych miejsc e0(m) = m0
o
magazyn jest dostępny e0(dostęp) = 1
PRODUCENT:
KONSUMENT:
cyklicznie
cyklicznie
{
{
}
wytwórz dane;
P(p);
P(m);
P(dostęp)
P(dostęp)
pobierz dane;
złóż dane;
V(dostęp)
V(dostęp)
V(m);
V(p);
skonsumuj dane
}
Zad. 1.
W pewnym systemie wieloprogramowym, program P1 produkuje porcjami dane1, zapisując je do bufora w Pamięci Zewnętrznej, a
program P2 produkuje porcjami dane2, zapisując je również do tego samego bufora w Pamięci Zewnętrznej. Zapisane w buforze dane
przetwarzają programy P3 i P4 (odpowiednio dane1 P3 i dane2 P4).
P1
P3
bufor
P4
P2
a) wprowadzić odpowiednie semafory
b) zaprojektować ogólną strukturę programów P1, P2, P3, P4 tak, aby mogły być realizowane współbieżnie
Założenia:
o
bufor może pomieścić 100 porcji
o
w danej chwili tylko 1 program może dokonywać zapisu lub odczytu
Zad. 2.
Pewien kompilator składa się z trzech procesów współbieżnych: P1, P2, P3. Każdy z tych procesów jest cykliczny i komunikuje się
z pozostałymi za pośrednictwem buforów B1 i B2 o postaci tablic B1[1..N1], B2[1..N2]. Proces P1 (analizator semantyczny
i syntaktyczny) produkuje porcjami kod pośredni składany do obszaru B1. Kod pośredni jest konsumowany przez proces P2 (generator
kodu wynikowego). Obydwa procesy P1 i P2 produkują komunikaty dla obszaru B2, które są konsumowane przez proces P3 (wydruk).
Przyjmując, że umieszczanie w buforze i pobranie z bufora wykluczają się wzajemnie, wprowadzić odpowiednie semafory
i zaprojektować ogólną strukturę programów P1, P2, P3 tak, aby mogły być realizowane współbieżnie
Jak zmienić rozwiązanie zadania, aby do bufora B2 komunikaty były wkładane kolejno przez procesy: P1 P2 P1 P2 itd.?
Zad. 3.
Dane są trzy procesy współbieżne: PA, PB, PC. Każdy z tych procesów jest cykliczny i drukuje komunikat A, B lub C. Przyjmując, że
chcemy, aby wydruki pojawiły się w określonej kolejności, zaproponować struktury programów i semafory
a)
ABC ABC ...(ABC)
b) AAABC AAABC…(AAABC)
c)
AAABBC AAABBC…(AAABBC)
d) ABBCC…
e)
ABCBC…
Zad.4
W systemie wieloprogramowym realizowane są współbieżnie 4 programy.
programZ
program A
program B
program C
cyklicznie
cyklicznie
cyklicznie
cyklicznie
{ wytwórz dane
{pobierz dane z bufora
{pobierz dane z bufora
{pobierz dane z bufora
złóż dane do bufora }
wykorzystaj dane}
wykorzystaj dane}
wykorzystaj dane}
Uzupełnić programy o semafory tak, aby z bufora 100 elementowego najpierw cyklicznie pobierał dane program A, potem dwa razy
program B i na końcu dwa razy program C. Zakładamy, że w jednej chwili tylko jeden program ma dostęp do bufora.