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.