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.

RYS. 4.1. Przejście procesu przez monitorGdy jakiś proces P wykonuje w danej chwili procedurę monitora, jednocześnie mogążądać dostępu do monitora inne procesy (rys. 4.1). Będą one czekać w trojakiego rodzajukolejkach, z których jedna jest kolejką odwrotną (stosem). Procesy, które chcą rozpocząćwykonywanie procedury monitora, czekają w kolejce wejściowej, a te, które zostaływstrzymane w wynikli wykonania operacji wait, czekają w kolejkach związanych ze zmiennymitypu condition. Na wejście do monitora mogą czekać również procesy, które wykonałyoperację signal, ale same zostały wstrzymane. Zgodnie z definicją operacji signal są oneodłożone na stos, muszą bowiem wracać do monitora w kolejności odwrotnej do tej, w jakiejgo opuszczały. Jeśli proces P znajdujący się wewnątrz monitora wykona operację signal(c),będzie odłożony na ten stos procesów, a do monitora wejdzie pierwszy czekający w kolejcezwiązanej ze zmienną c. Jeśli proces P opuści monitor albo wykonując operację wait(c)(będzie wówczas wstrzymany w kolejce związanej z c), albo kończąc wykonywanie procedurymonitora, to do monitora wejdzie proces odłożony, który poprzednio wznowił proces P. Jeślitakiego procesu nie ma, oznacza to, że stos procesów odłożonych jest pusty i do monitoramoże wejść proces czekający w kolejce wejściowejMożna zapomnieć o dodatkowym stosie i wytłumaczyć to nieco krócej następująco.Procesy wykonujące operację final, która nie jest ostatnią instrukcją w procedurze monitora, sąwstawiane na początek kolejki wejściowej do monitora. W chwili, gdy proces znajdujący sięwewnątrz opuści monitor „na własne życzenie" (tzn. kończąc procedurę monitora lubwykonując operację wait), wchodzi do niego pierwszy proces z kolejki wejściowej.Opisaliśmy monitor nie odwołując się do żadnego konkretnego języka programowania.Monitor jako strukturalne narzędzie do synchronizacji procesów zrealizowano w kilku językach.Poszczególne realizacje różnią się zwykle składnią i drobnymi szczegółami nie mającymiwiększego znaczenia dla sposobu posługiwania się tym mechanizmem. Dalej omówimy krótkosposoby deklarowania monitora w językach PascaLC, Concurrent Pascal, Pascal Plus, Modliła2, Modula 3 oraz Concurrent Euclid. Jako przykład będziemy podawać deklarację monitora Mzawierającego zmienną z typu integer i udostępniającego procedury Pl, P2, wewnątrz którychsą wykonywane operacje czekania i zwalniania na zmiennej W typu condition.W przykładach i rozwiązaniach zadań skorzystamy z notacji zastosowanej w językuPascaLC. Robimy to z dwóch powodów. Po pierwsze, notacja ta jest zgodna z notacją użytąprzez Ben-Ariego w jego książce [BenA89], którą gorąco polecamy. Po drugie, język PascaLCzostał zaimplementowany na maszynach typu IBM PC, a jego kompilator można uzyskać w61

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

Saved successfully!

Ooh no, something went wrong!