12.07.2015 Views

Spis treœci - Patrz

Spis treœci - Patrz

Spis treœci - Patrz

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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

{}while (TRUE) {/* wlasne sprawy */callrpc ("nwsl850", SEKCJA_KRYT_PROG,SEKCJA_KRYT_VERS, SEKCJA_KRYTYCZNA, xdr_void,NULL, xdr_void, NULL);}Proces obsługujący jest tu wykonywany przez komputer nwsl850.Implementacja zdalnego semaforaSemafor, nazwiemy go dalej zdalnym, zaimplementujemy jako zmienną dostępną tylkoza pośrednictwem procedur procesu obsługującego. To nam zapewni wzajemne wykluczaniepodczas operacji na nim. Wstrzymywanie procesów podczas wykonywania operacji Pzrealizujemy w następujący sposób. Dla każdego procesu korzystającego ze zdalnegosemafora zadeklarujemy lokalny semafor oraz obsługujący go proces. Jeżeli proces nie możenatychmiast wykonać operacji P na zdalnym semaforze, to zostaje wstrzymany na swoimlokalnym semaforze. Gdy na semaforze zdalnym wykona się operacja V, to proces goobsługujący wywola procedurę zdalną procesu obsługującego semafor lokalny jednego zwstrzymanych procesów. Proces obsługujący semafor zdalny musi zatem znać identyfikatorywstrzymanych procesów.Proces SEMAFOR, obsługujący semafor zdalny, udostępnia procedury P i V. Zmiennas służy dwóm celom: jeśli semafor zdalny jest podniesiony, to s jest jego wartością, jeśli jestopuszczony, to modul s jest liczbą wstrzymanych procesów. Proces wołający procedurę Ppodaje jako jej parametr swój identyfikator. Jeżeli wartość semafora jest dodatnia, toprocedura kończy się przyjmując wartość false. W przeciwnym razie identyfikator procesu jestzapamiętywany w kolejce procesów wstrzymanych, a procedura przyjmuje wartość true. Wtakiej sytuacji proces wołający procedurę SEMAFOR.P usiłuje wykonać operację P nasemaforze binarnym SEM_LOKALNY, który inicjalnie musi być opuszczony. Jeżeli podczaswykonywania procedury SEMAFOR.V okaże się, że są procesy wstrzymane, to z kolejkiprocesów wstrzymanych zostanie usunięty identyfikator najdawniej wstrzymanego procesu iwywołana procedura zdalna ZWOLNIJ procesu ZAWIADOWCA, związanego ze zwalnianymprocesem. W tej procedurze zostaje podniesiony semafor SEM_LOKALNY i w rezultacienastępuje wznowienie procesu wstrzymanego pod tym semaforem. Oto zapisany wabstrakcyjnej notacji kod procesu obsługującego semafor zdalny:process SEMAFOR;var s: integer;{semafor zdalny}procedure wstaw(i: integer);begin ...{dołączenie do listy numeru 'i'}end;{wstrzymanego procesu wołającego}function weź: integer;beginweź := ...end;export function P(i: integer): boolean;begins := s - 1;if s < 0 thenwstaw(i);P := s < 0{pobranie pierwszego numeru z listy}{wstrzymanych procesów wołających}{wstawienie do listy}255

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

Saved successfully!

Ooh no, something went wrong!