SOP wyk nr 11-Slajd29: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Dwa (dyskusja | edycje)
Nie podano opisu zmian
 
Dwa (dyskusja | edycje)
Nie podano opisu zmian
Linia 6: Linia 6:
Po ustaleniu numeru zaczyna się właściwa sekcje wejściowa, w której dokonuje się rozstrzygnięcie odnośnie zajęcia sekcji krytycznej. W tym celu proces ''Pi'' sprawdza zamiary kolejnych rywali, analizując współdzielone tablice począwszy od pozycji 0 z pominięciem własnej pozycji. Jeśli analizowana pozycja odnosi się do procesu, który jest w trakcie wybierania numery, wykonywana jest pętla oczekiwania na zakończenie wyboru (linia 3). Wykazanie konieczności takiego oczekiwania jest jednym z zadań ćwiczeniowych.
Po ustaleniu numeru zaczyna się właściwa sekcje wejściowa, w której dokonuje się rozstrzygnięcie odnośnie zajęcia sekcji krytycznej. W tym celu proces ''Pi'' sprawdza zamiary kolejnych rywali, analizując współdzielone tablice począwszy od pozycji 0 z pominięciem własnej pozycji. Jeśli analizowana pozycja odnosi się do procesu, który jest w trakcie wybierania numery, wykonywana jest pętla oczekiwania na zakończenie wyboru (linia 3). Wykazanie konieczności takiego oczekiwania jest jednym z zadań ćwiczeniowych.


Po ewentualnym zakończeniu wyboru następuje sprawdzenie stanu potencjalnego rywala. Jeśli ma on przydzielony numer 0, to znaczy, że wykonuje resztę i nie jest zainteresowany sekcją krytyczną — pętla '''while''' w linii 4 kończy się i rozpoczyna się kolejna iteracji pętli '''for''' . To samo dzieje się, gdy numer rywala jest większy. Możliwy jest jednak przypadek, gdy dwa procesu uzyskają te same numery. Rozstrzygający jest wówczas numer procesu, który z założenia jest unikalny. Stąd porównanie:(''numer'' [''k'' ],''k'' ) < (''numer'' [''i'' ],''i'' ) ? ''numer'' [''k'' ] < ''numer'' [''i'' ] ? (''numer'' [''k'' ] = ''numer'' [''i'' ] ? ''k'' < ''i'' ), które można by również zapisać jako (''numer'' [''k'' ] · ''n'' + ''k'' ) < (''numer'' [''i'' ] · ''n'' + ''i'' ).
Po ewentualnym zakończeniu wyboru następuje sprawdzenie stanu potencjalnego rywala. Jeśli ma on przydzielony numer 0, to znaczy, że wykonuje resztę i nie jest zainteresowany sekcją krytyczną — pętla '''while''' w linii 4 kończy się i rozpoczyna się kolejna iteracji pętli '''for''' . To samo dzieje się, gdy numer rywala jest większy. Możliwy jest jednak przypadek, gdy dwa procesu uzyskają te same numery. Rozstrzygający jest wówczas numer procesu, który z założenia jest unikalny. Stąd porównanie:(''numer'' [''k'' ],''k'' ) < (''numer'' [''i'' ],''i'' ) &equiv; ''numer'' [''k'' ] < ''numer'' [''i'' ] &or; (''numer'' [''k'' ] = ''numer'' [''i'' ] &and; ''k'' < ''i'' ), które można by również zapisać jako (''numer'' [''k'' ] · ''n'' + ''k'' ) < (''numer'' [''i'' ] · ''n'' + ''i'' ).


Jeśli w ten sposób procesowi ''Pi'' uda się zakończyć pętlę '''for''' , to znaczy, że nie ma w systemie procesu ubiegającego się o sekcję krytyczną, którego numer byłby mniejszy (lub równy przy mniejszym identyfikatorze) od ''Pi'' i możne on opuścić sekcję wejściową, zajmując tym samym sekcję krytyczną.  
Jeśli w ten sposób procesowi ''Pi'' uda się zakończyć pętlę '''for''' , to znaczy, że nie ma w systemie procesu ubiegającego się o sekcję krytyczną, którego numer byłby mniejszy (lub równy przy mniejszym identyfikatorze) od ''Pi'' i możne on opuścić sekcję wejściową, zajmując tym samym sekcję krytyczną.  

Wersja z 10:50, 16 sie 2006

Wzajemne wykluczanie n procesów — algorytm piekarni (2)

Wzajemne wykluczanie n procesów — algorytm piekarni (2)


Po ustaleniu numeru zaczyna się właściwa sekcje wejściowa, w której dokonuje się rozstrzygnięcie odnośnie zajęcia sekcji krytycznej. W tym celu proces Pi sprawdza zamiary kolejnych rywali, analizując współdzielone tablice począwszy od pozycji 0 z pominięciem własnej pozycji. Jeśli analizowana pozycja odnosi się do procesu, który jest w trakcie wybierania numery, wykonywana jest pętla oczekiwania na zakończenie wyboru (linia 3). Wykazanie konieczności takiego oczekiwania jest jednym z zadań ćwiczeniowych.

Po ewentualnym zakończeniu wyboru następuje sprawdzenie stanu potencjalnego rywala. Jeśli ma on przydzielony numer 0, to znaczy, że wykonuje resztę i nie jest zainteresowany sekcją krytyczną — pętla while w linii 4 kończy się i rozpoczyna się kolejna iteracji pętli for . To samo dzieje się, gdy numer rywala jest większy. Możliwy jest jednak przypadek, gdy dwa procesu uzyskają te same numery. Rozstrzygający jest wówczas numer procesu, który z założenia jest unikalny. Stąd porównanie:(numer [k ],k ) < (numer [i ],i ) ≡ numer [k ] < numer [i ] ∨ (numer [k ] = numer [i ] ∧ k < i ), które można by również zapisać jako (numer [k ] · n + k ) < (numer [i ] · n + i ).

Jeśli w ten sposób procesowi Pi uda się zakończyć pętlę for , to znaczy, że nie ma w systemie procesu ubiegającego się o sekcję krytyczną, którego numer byłby mniejszy (lub równy przy mniejszym identyfikatorze) od Pi i możne on opuścić sekcję wejściową, zajmując tym samym sekcję krytyczną.

Po wyjściu z sekcji krytycznej, proces sygnalizuje brak zainteresowania rywalizacją, wpisując wartość 0 jako swój numer.


<< Poprzedni slajd | Spis treści | Następny slajd >>