12.07.2015 Views

Spis treœci - Patrz

Spis treœci - Patrz

Spis treœci - Patrz

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

monitor), nie trzeba też liczyć wstrzymanych procesów, gdyż interesuje nas tylko, czy w ogólejakieś procesy czekają, a na to pytanie daje nam odpowiedź funkcja empty.4.4.2 Przetwarzanie potokoweTablica ile służy do pamiętania liczby porcji, które może przetworzyć proces, tablicawarunków C zaś do oddzielnego wstrzymywania każdego procesu.monitor DAJWEŹ;const N = ?;var ile: array [O..N-1] of integer;C: array[0..N-1] of condition;export procedure WEŹ(i: integer);beginif ile [i] = O then wait(C[i]);ile[i] := ile [i] - lend; {WEŹ}export procedure DAJ(i: integer);beginile[(i + 1) mod N] := ile[(i + 1) mod N] + 1;signal(C[(i + 1) mod N])end; {DAJ}beginile[0] := M;for i:=l to N - l do ile[i]:=0end; {DAJWEŹ}Zauważmy, że monitor DAJWEŹ jest jednoczesną implementacją N semaforów.Zmienna ile[i] służy do pamiętania wartości semafora, warunek C[i] do wstrzymywaniaprocesów. Procedura WEŹ odpowiada operacji P na semaforze, a procedura DAJ operacji Vna semaforze. Rozwiązanie to odpowiada więc dokładnie rozwiązaniu zadania 3.3.7 o liniiprodukcyjnej.4.4.3 Producenci i konsumenci z losową wielkością wstawianych i pobieranychporcjiJeśli proces żąda wolnych lub zajętych elementów bufora w liczbie przekraczającejaktualny stan, to musi być wstrzymany. Wznowienie może nastąpić dopiero wtedy, gdy wbuforze znajdzie się odpowiednia liczba wolnych lub zajętych elementów. Zauważmy jednak,że jeśli zdecydujemy się wznawiać proces natychmiast, gdy tylko bufor osiągnie oczekiwanystan, to możemy doprowadzić do zagłodzenia procesów mających duże wymagania. Może sięnp. tak zdarzyć, że nigdy nie będzie N wolnych elementów w buforze, mimo iż konsumencibędą pobierać porcje z bufora, gdyż w tym samym czasie bufor będą zapełniać „drobni"producenci.W prezentowanym rozwiązaniu zakłada się, że procesy są obsługiwane w takiejkolejności, w jakiej zgłosiły swe żądania. Pierwszy proces w kolejce jest wstrzymywanyoddzielnie na zmiennej PIERWSZYPROD lub PIERWSZYKONS. Czeka on, aż bufor osiągniewymagany stan, przy czym odpowiedni warunek sprawdza się po każdej zmianie stanu bufora.Takie podejście chroni przed zagłodzeniem, zmniejsza jednak wykorzystanie bufora, gdyż83

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!