pw sciaga

1. Problemy synchronizacji rozwiązywane za pomocą semaforów.

AD1. Problem 5 ucztujących filozofów, problem czytelników-pisarzy, problem palaczy tytoniu, problem śpiącego golibrody, problem producentów-konsumentów.

2. Cechy poprawnego programu współbieżnego.

-własność bezpieczeństwa (która ogółem mówi o tym, że nie może dojść do nieporządanej sytuacji), na którą składa się wzajemne wykluczanie oraz brak blokady
-własność żywotności (jeżeli jakiś proces ma coś do zrobienia, to w końcu to zrobi), na którą składa się min. właściwość uczciwości, brak zagłodzenia, brak zakleszczenia.

4. W jakich przypadkach zagłodzenie w problemie czytelników- pisarzy.

W 1 przypadku, gdy pisarze mają ciągle wyższe priorytety niż czytelnicy i w ten sposób czytelnicy mogą nigdy nie dostać się do czytania pliku. W 2 przypadku, czytelnicy mają ciągle wyższe priorytety i nie muszą czekać tylko dlatego, że czeka pisarz/pisarze.

5. Spotkania w Adzie zaimplementowane za pomocą (bez) selecta. Ile minimalnie zadań może uczestniczyć w spotkaniu.

minimalnie 2
select ... or ...
1. Podaj przykłady techniki i notacji programistycznej służącej do wyrażania potencjalnej

równoległości co najmniej dwóch procesów sekwencyjnych.

Kapsułkowanie – abstrakcja programowania osiągana poprzez podział modułu programu na

publiczną specyfikację i wewnętrzną implementację. Programowanie współbieżne jest abstrakcją

umożliwiającą wnioskowanie o dynamicznym wykonywaniu programów. System rozproszony jest systemem komputerowym złożonym z więcej niż jednego komputera. Wzajemne oddziaływanie między procesami może przyjąć następujący charakter:

• Współzawodnictwo

• Komunikacja.

Współbieżność:

Klasyczne programowanie współbieżne - polega na dekompozycji problemu na wiele elementów

oprogramowania, które są wykonywane przez pewną liczbę procesorów z pamięcią współdzieloną,

tzw. systemy ściśle powiązane, inaczej systemy wieloprocesorowe.

Współbieżność rozproszona - polega na dekompozycji problemu na wiele elementów

oprogramowania, które są wykonywane przez pewną liczbę niezależnych procesorów (własny zegar

taktujący i pamięć operacyjna) komunikujących się poprzez sieć połączeń (np. sieć lokalna,

przełącznica krzyżowa, itp.), czyli tzw. systemy luźno powiązane, inaczej systemy rozproszone.

2. Co w praktyce oznacza własność żywotności programu współbieżnego ?

Jest to uogólnienie własności stopu na programy współbieżne. Program współbieżny jest żywotny, jeśli zapewnia, że każde pożądane zdarzenie kiedyś zajdzie. W przypadku problemu wzajemnego wykluczania własność żywotności oznacza, że jeśli jakiś proces czeka na wejście do swojej sekcji krytycznej, to w końcu do niej wejdzie. Aby pokazać, że program nie ma własności żywotności, trzeba podać szczególnie dobrany scenariusz synchronizacji przy którym nie da się osiągnąć pożądanej sytuacji.

3. Wymień co najmniej 3 języki programowania współbieżnego z konstrukcją monitora procesów.

Pascal_C, Concurrent Pascal, Pascal Plus, Modula 2, Modula 3, Concurrent Euclid

4. Jeżeli w problemie czytelników i pisarzy może dojść do zagłodzenia, to scharakteryzuj

odpowiednią(e) sytuację(e).

W problemie czytelników i pisarzy może dojść do zagłodzenia zarówno pisarzy jak i czytelników, w

zależności od wybranego rozwiązania. Zgodnie z warunkami zadania czytelnik, który zapragnie wejść

do czytelni powinien móc to zrobić, jeśli jest ona pusta lub jeśli są w niej już inni czytelnicy. W przeciwnym razie (tzn. gdy w czytelni jest już pisarz) powinien być wstrzymany do czasu, gdy zajdą

warunki pozwalające mu wejść. Pisarz, który chce wejść do czytelni, powinien być wstrzymany aż będzie ona pusta.

Rozwiązanie z możliwością zagłodzenia pisarzy:

Czytelnicy na zawsze zawładną czytelnią. Wystarczy, że w każdej chwili będzie w niej przebywał co

najmniej jeden czytelnik, a pisarze nie doczekają się pustej czytelni. Ta sytuacja wymaga aby do czytelni przychodził następny czytelnik zanim poprzedni zdąży czytelnie opuścić.

Rozwiązanie z możliwością zagłodzenia czytelników:

Wydaje się, że jeśli pisarze chcą coś zapisać, tp należy im to umożliwić najszybciej jak to możliwe, nie

ma sensu bowiem, aby czytelnicy odczytywali przestarzałe dane. Zatem jeśli jakiś pisarz czeka na wejście do czytelni, bo są w niej jacyć czytelnicy, to nowo przybyły czytelnik powinien być

wstrzymany, gdy już żaden pisarz nie będzie czekał. Dzięki temu po pewnym czasie wszyscy czytelnicy

przebywający w czytelni ją opuszczą i będą mogli wejść pisarze. Wystarczy, że zawsze jakiś pisarz będzie czekał na możliwość pisania, a żaden z czytelników nie będzie mógł wejść doc czytelni.

5. Wymień różnice miedzy semaforem zdefiniowanym przez Dijkstrę a semaforem dostępnym w

systemie SVR4.

Semafory w systemie Unix są uogólnieniem semaforów zaproponowanych przez Dijkstrę.

-U D. Wartość początkową semafora określamy przy deklaracji, a w SVR4 przypisanie wartości

semaforowi jest możliwe w dowolnej chwili.

-U D. operacje podniesienia i opuszczenia semafora polega na zwiększeniu/zmniejszeniu wartości zmiennej semaforowej o 1, podczas gdy w Unixie można zmieniać o dowolną liczbę całkowitą.

Oprócz operacji P(opuść) i V(podnieś) dostępnych u D. w Unixie można wykonywać operację

przechodzenia pod opuszczonym semaforem (Z – wstrzymaj działanie procesy aż S będzie równe 0).

Dodatkowo w systemie Unix można wykonywać jednocześnie operacje na wielu semaforach, przy czym każda z nich może być inna.

6. Dlaczego sekcja krytyczna powinna być "możliwie najkrótsza" w sensie czasu pobytu w niej

procesu sekwencyjnego

Ponieważ w trakcie wykonywania sekcji krytycznej jednego procesu inne procesy, które również chcą

wejść do sekcji krytycznej muszą oczekiwać na wyjście tego procesu z sekcji. Tracony jest przez to

czas (pozostałe procesy nic nie robią), zanika częściowo współbieżność programu i zaczyna on działać

jak zwykły program sekwencyjny, ponadto czekanie na zwolnienie sekcji krytycznej również pochłania

czas procesora (np. aktywne czekanie).

7. Wymień warunki konieczne do wystąpienia zakleszczenia procesów sekwencyjnych.

Wzajemne wykluczanie: przynajmniej jeden zasób musi być niepodzielny, tzn., że z zasobu tego może

korzystać w danym czasie tylko jeden proces. Jeśli inny proces zamawia dany zasób, to musi być opóźniany, aż zasób zostanie zwolniony

Przetrzymywanie i oczekiwanie: Musi istnieć proces, któremu przydzielono co najmniej jeden zasób i

który oczekuje na przydział dodatkowego zasobu (zasobów), przetrzymywanego właśnie przez inny

proces.

Brak wywłaszczeń: zasoby nie podlegają wywłaszczeniu, tzn., że proces może zostać zwolniony tylko z

inicjatywy przetrzymującego go procesu, po zakończeniu pracy tego procesu.

Czekanie cykliczne: Musi istnieć zbiór {P0..Pn} procesów czekających, takich, że P0 czeka na zasób przetrzymywany przez proces P1, P1 czeka na zasób przetrzymywany przez P2, .. a Pn na zasób przetrzymywany przez P0.

8. Podaj podstawowe modele oddziaływania procesów sekwencyjnych.

Procesy niezależne od siebie

Rywalizacja (współzawodnictwo)

1. Wynik jednego procesu nie zależy od działań pozostałych

2. Możliwe jest oddziaływanie na tempo wykonywania procesu 1. Wzajemne wykluczanie

2. Blokowanie (zasoby wymienne)

3. Zagłodzenia

===============================

Procesy pośrednio zależne od siebie (poprzez obiekty współdzielone)

Współpraca poprzez wspólne wykorzystywanie obiektów

1. Wynik jednego procesu może zależeć od danych otrzymanych od innych

2. Możliwy jest wpływ na tempo wykonywania procesu

1. Wzajemne wykluczanie

2. Blokowanie (zasoby wymienne)

3. Zagłodzenia

4. Zachowanie spójności danych

================================

Procesy bezpośrednio zależne od siebie (korzystanie z elementarnych procedur komunikacyjnych)

Współpraca poprzez komunikację

1. Wynik jednego procesu może zależeć od danych otrzymanych od innych

2. Możliwy jest wpływ na tempo wykonywania procesu

1. Blokowanie (zasoby wyczerpywalne)

2. Zagłodzenia

9. Dlaczego operacja Wait(S), gdzie S jest semaforem, powinna być operacją atomową.

Opuszczenie semafora, czyli operacja wait(S) to wykonanie instrukcji:

Czekaj, aż S>0;

S:=S-1;

Jeśli proces rozpoczynający opuszczanie semafora stwierdzi, że jego wartość nie jest dodatnia, musi

zaczekać. Ale aby mógł on zakończyć opuszczenie semafora jakiś inny proces musi mieć możliwość

wykonania operacji podniesienia. W rzeczywistości w takim przypadku operacja opuszczania musi być

przerwana w trakcie sprawdzania warunku S>0. Podczas tej przerwy jakiś Iny proces może rozpocząć

opuszczanie semafora i ta operacja również musi zostać przerwana. W rezultacie można mieć wiele

rozpoczętych a nie zakończonych operacji opuszczenia. Jednak w chwili, gdy jakiś inny proces

zwiększy S, tylko jedna z tych operacji będzie mogła wykonać się do końca, ponieważ zakłada się, iż

stwierdzenie S>0 i wykonanie s:=S-1 to jedna niepodzielna operacja. W definicji klasyczne przyjmuje

się więc, że operacja opuszczenia semafora jest niepodzielna tylko wtedy, gdy sprawdzany w niej warunek jest spełniony.

10. Określ powody, dlaczego próby I, II, III i IV prowadzące do algorytmu Dekkera były

rozwiązaniami niepoprawnymi.

I próba W przypadku braku współzawodnictwa, tzn. gdy jeden z procesów utknie w swojej sekcji lokalnej drugi proces może wejść do sekcji krytycznej tylko raz. Gdy jeden z procesów wchodzi do sekcji krytycznej bardzo często a drugi bardzo rzadko rozwiązanie to wprowadza konieczność czekania przez proces szybszy. Jest to spowodowane naprzemiennym przekazywaniem prawa wejścia do sekcji krytycznej.

II próba: Druga próba nie spełniała nawet własności wzajemnego wykluczania. Poza tym wadą tego

rozwiązania jest również to, że proces po wyjściu z protokołu wstępnego nie może być powstrzymany

przed wejściem do sekcji krytycznej.

III próba: w programie juz po kilku instrukcjach może nastąpić blokada, jeśli będą sie

one wykonywały na przemian z każdego procesu. Zmienne obu procesów będą miały

wartość 0. teraz program będzie jedynie sprawdzał warunki które cały czas pozostaną

fałszywe. nastąpi sytuacja w której oba procesy będą chciały wejść do sekcji

krytycznych ale żadnemu sie to nie uda

IV próba: istnieje ciąg wykonań instrukcji w którym p1 wchodzi do sekcji

krytycznej nieskończenie wiele razy, a p2 pozostaje w nieskończoność w protokole

wstępnym. Jeśli instrukcje będą wykonywane naprzemian w nieskończoność

dojdzie do pół-blokady.

1. Na przykładzie języka Ada (wersje 83 i 95) zdefiniuj pojęcie pierwotnych i wtórnych

mechanizmów synchronizacji.

Mechanizmy pierwotne – mechanizmy dostarczone razem z językiem Ada, np. spotkania

Mechanizmy wtórne – mechanizmy powstałe na bazie innych, dostarczone przykładowo w

postaci pakietu, np. semafory

2. Określ zadania planisty programu współbieżnego.

-przydzielanie zasobów procesom

-rozstrzyganie pierwszeństwa dostępu do zasobu

3. N. Dunstan i I. Fris autorzy artykułu „Process Scheduling and UNIX Semaphores” podają 3

różnice między semaforem Dijsktry, a semaforami w systemie UNIX. Wymień co najmniej

2 z nich.

-włączenie flag do klasyfikowania operacji

-wykonanie listy operacji jest niepodzielne

-nie jednolite operacje

4. P. A. Buhr i G. Ditchfield autorzy artykułu „Adding Concurrency to a Programming

Language” w części 3 Design Options podają 8 udogodnień języka programowania

wspierających programowanie współbieżne (ang. concurrency facilites). Wymień i w

jednym zdaniu wyjaśnij 4 z nich.

zadaniowość - język nie zorientowany obiektowo przestawia 'taski' jako niezależny

wykonywalny program, analogicznie do ciała nie współbieżnego programu. język

zorientowany obiektowo przedstawia 'taski' jako obiekt, jako interfejs ze

zdefiniowanymi funcjami

-komunikacyjność

-statyczny typ kontroli

-zakresy deklaracji - jesli 'taski' przypominają obiekty to powinny być możliwe do

zadeklarowania tam gdzie można zadeklarować obiekty

-bezpośrednia i pośrednia komunikacja - komunikacja 'tasków' może sie odbywać

poprzez elementy pośrednie np. monitory. 'taski 'mogą także komunikować sie

bezpośrednio ze sobą

-synchronizacja i wzajemne wykluczanie

-synchroniczna i asynchroniczna komunikacja

-kolejka zadań procesów

5. Zakłada się, żę w pewnym programie współbieżnym może dojść do zakleszczenia. Wyjaśnij,

dlaczego nie dla każdego uruchomienia tego programu dochodzi do zakleszczenia.

Procesy wykonują sie w sposób niedeterministyczny. Podczas nowego uruchomienia

programu, procesy mogą zażądać inną ilość zasobów, i nie zawsze musi to być

maksymalna ilość zadeklarowanych przez siebie zasobów. Jeśli tak się stanie do

zakleszczenia może nie dojść.

6. Wyjaśniej różnicę w działaniu instrukcji accept w języka Ada kiedy jest ona umieszczona

wewnątrz instrukcji select oraz kiedy nie została umieszczona wewnątrz instrukcji select.

Gdy instrukcja accept znajduje się wewnątrz instrukcji select, i jakieś procesy czekają w

kolejce do tego wejścia, to zadanie przyjmujące będzie kontynuowało spotkanie z

procesem z tej kolejki.

Natomiast gdy instrukcja accept znajduje się poza instrukcją select to zadanie

przyjmujące nie kontynuuje spotkań z kolejnymi zadaniami czekającymi w kolejce do

tego wejścia.

Instrukcja select pozwala zadaniu przyjmującem spotkać się z tym spośród zadań, które

wywoła go jako pierwsze.

7. Całkowita poprawność programu sekwencyjnego oznacza, że program na pewno się

zakończy, a wyniki będą poprawne. Wyjaśnij dlaczego całkowita poprawność jest nie

zawsze właściwa dla programów współbieżnych.

Całkowita poprawność zakłada, że program zakończy się a wyniki będą prawdziwe.

Istnieją taki programy współbieżne, które nigdy się nie kończą, dlatego całkowita

poprawność nie jest właściwa dla tego typu programów.

9. Czy spotkania w Adzie są symetryczne, czy asymetryczne? Uzasadnij swoją odpowiedź.

Spotkania w Adzie są asymetryczne z tego względu, że zadanie wywołujące wie z kima

się chce spotkać, natomiast zadanie przyjmujące nie wie z kim się spotka (kto je

wywołał).

10. W pewnej implementacji monitora procesów zastosowano regulamin LIFO (Last Input First

Output) kolejki procesów czekających na wejście do monitora. Dokonaj oceny powyższego

rozwiązania.

Przedstawione rozwiązanie jest rozwiązaniem błędnym ponieważ, procesy juz czekające

na wejście do monitora mogą zostać zagłodzone w sytuacji kiedy nowe procesy będą

cały czas wchodzić do kolejki bo zgodnie z algorytmem LIFO jako pierwsze zostaną

obsłuzone procesy, które dołączą do kolejki jako ostatnie.

2. Zalety semaforów:

- Nie wymagają aktywnego czekania – proces, który wykonał operację ‘Czekaj’ na

semaforze zostaje uśpiony. Nie sprawdza on w pętli warunku pozwalającego na dalszą

pracę.

- Implementacja efektywna czasowo – procesy zatrzymane na semaforze (uśpione) ,

zostają natychmiast wznowione po wykonaniu operacji ‘Sygnalizuj’ na semaforze.

- Operacje na semaforze są niepodzielne – dwa procesy nie mogą wykonać operacji na

tym samym semaforze w tym samym czasie

3.Co zrobili różni ludzie

- Dekker – przedstawił rozwiązanie problemu wzajemnego wykluczania dal 2 procesów

- Peterson – podał kolejne, prostsze rozwiązanie problemu wzajemnego wykluczania

dla 2 procesów oraz dal n procesów

- Lamport – rozwiązanie problemu wzajemnego wykluczania dla n procesów

- Dijkstra – podał jako pierwszy definicję semaforów

- Hansen – Definicja monitorów

- Hoare – definicja monitorów (przedstawił ją prawie w tym samym czasie co Hansen

ale były to dwie niezależne od siebie definicje)

4. Udogodnienia programowania współbieżnego:

- zadaniowość - język nie zorientowany obiektowo przestawia 'taski' jako niezależny

wykonywalny program, analogicznie do ciała nie współbieżnego programu. język

zorientowany obiektowo przedstawia 'taski' jako obiekt, jako interfejs ze

zdefiniowanymi funcjami

- komunikacyjność

- statyczny typ kontroli

- zakresy deklaracji - jesli 'taski' przypominają obiekty to powinny być możliwe do

zadeklarowania tam gdzie można zadeklarować obiekty

- bezpośrednia i pośrednia komunikacja - komunikacja 'tasków' może sie odbywać

poprzez elementy pośrednie np. monitory. 'taski 'mogą także komunikować sie

bezpośrednio ze sobą

- synchronizacja i wzajemne wykluczanie

- synchroniczna i asynchroniczna komunikacja

- kolejka zadań procesów

5. Języki programowania zawierające monitory procesów:

- Concurent Pascal

- Modula 3

- Mesa

- Java

W monitorach Hoara’a wystąpienie operacji Signal(c) musi spowodować natychmiastowe

wznowienie procesu oczekującego na zmiennej warunkowej c.

Monitory z powiadamianiem

Inne rozwiązanie stosowane jest w monitorach z powiadamianiem (wprowadzone -Lampson, Redell w języku Mesa). Zdefiniowana tam operacja Notify(c) powoduje

odblokowanie jednego z procesów związanej ze zmienną warunkową c ale proces ten

nie musi być natychmiast zaszeregowany.

Monitory z rozgłaszaniem

NotifyAll(c) powoduje odblokowanie wszystkich z procesów związanej ze zmienną

warunkową c. Proces te będą konkurowały o dostęp do monitora. Będą zaszeregowane

gdy będzie to możliwe.

6. Gdy instrukcja accept znajduje się wewnątrz instrukcji select, i jakieś procesy czekają w

kolejce do tego wejścia, to zadanie przyjmujące będzie kontynuowało spotkanie z

procesem z tej kolejki.

Natomiast gdy instrukcja accept znajduje się poza instrukcją select to zadanie

przyjmujące nie kontynuuje spotkań z kolejnymi zadaniami czekającymi w kolejce do

tego wejścia.

Instrukcja select pozwala zadaniu przyjmującem spotkać się z tym spośród zadań, które

wywoła go jako pierwsze.

7. Procesy wykonują sie w sposób niedeterministyczny. Podczas nowego uruchomienia

programu, procesy mogą zażądać inną ilość zasobów, i nie zawsze musi to być

maksymalna ilość zadeklarowanych przez siebie zasobów. Jeśli tak się stanie do

zakleszczenia może nie dojść.

9. Spotkania w CSP są symetryczne dlatego że, oba procesy które chcą się spotkać muszą

wzajemnie znać swoje nazwy i jawnie je podać.

10. Problemy które należy rozwiązać aby poprawnie zaimplementować semafor:

- Operacje na semaforze muszą wykonywać się w sposób niepodzielny

- Semafor musi posiadać kolejkę dla procesów czekających za zakończenie operacji

na semaforze

- Semafor musi mieć nadaną nieujemną wartość początkową

- Operacja podniesienie semafora musi wznowić jeden ze wstrzymanych procesów

zakleszczenie (deadlock) – dwa lub więcej wątków zostaje zablokowane na zawsze, każdy czeka na każdy

zagłodzenie (starvation) – sytuacja, w której dany wątek nie może otrzymać dostępu do zasobów i wykonać swojego zadania

livelock – bardzo podobne do deadlock. Wątki nie zostają zatrzymane, natomiast nie wykonują postępów

5 filozofów rozwiązanie:

Wprowadzenie kelnera. Filozofowie będą pytać go o pozwolenie przed wzięciem widelca. Ponieważ kelner jest świadomy, które widelce są aktualnie w użyciu, może nimi rozporządzać zapobiegając zakleszczeniom.

Gdy cztery widelce są w użyciu, następny filozof (chcący uzyskać możliwość jedzenia) będzie musiał czekać na pozwolenie kelnera. Pozwolenie nie zostanie udzielone do czasu zwolnienia widelca przez jednego z jedzących. Logika zostanie zachowana, jeśli założymy, że filozofowie w pierwszej kolejności sięgają po widelec leżący po ich lewej stronie a następnie po prawy (lub na odwrót).

1. Podany był program typu producent-konsument, napisać jakiego rodzaju jest to implementacja
a) w przypadku jednego producenta i jednego konsumenta
b) w przypadku wielku producentów i wielu konsumentów

A) Podany program dla jednego producenta i jednego konsumenta będzie działał poprawnie, ponieważ, producent i konsument będą naprzemiennie korzystać ze współdzielonego zasobu i dopóki jeden z nich nie wywoła polecenia sem_signal, drugi będzie czekał na semaforze na swoją kolej.

B) Tu szukałem miejsca w którym program się wykrzaczy(killerski przeplot), ale nie mogłem znaleźć, więc zostawiłem to pytanie, a pod koniec dopisałem, że dla wielu producentów i konsumentów program również będzie działał poprawnie, gdyż w sekcji krytycznej jednocześnie będzie naprzemiennie tylko jeden producent lub konsument.
2. Napisać w pseudokodzie procedury findempty() i findfull() do programu z zadania nr 1.

#define size 10

Int Findempty(int tab[])

{

Int i;

For (i = 0; i < size; i++)

If (tab[i] == 0) return i;

Return -1;

}

#define size 10

Int findfull(int tab[])

{

Int i;

For (i = 0; i < size; i++)

If (tab[i] != 0) return i;

Return -1;

}

Dopisałem jeszcze: przyjmujemy, że tablica pusta jest uzupełniona zerami, a zapisywane w niej dane są różne od zera.
3. Wyjaśnić czy przy pomocy spotkań w Adzie można współdzielić zasób danych w sieci komputerowej.

Można go zastosować w taki sposób, że współdzielony zasób sieciowy (np. drukarka sieciowa) będzie obiektem(procesem – już nie pamiętam co napisałem) który czeka na spotkanie, natomiast użytkownicy chcący skorzystać z tego zasobu to zadania, które idą na spotkanie. W ten sposób mamy pewność, że zasób będzie jednocześnie wykorzystywany tylko przez jednego użytkownika, gdyż jeżeli proces(zasób) będzie na spotkaniu z jednym zadaniem, to nie obsłuży drugiego spotkania, dopóki nie zakończy pierwszego.
4. Dostęp do dysku I/O (Input/Output). Został zaproponowany elewator jednkierunkowy typu First Come First Served. Napisać jaki będzie to miało wpływ na prawdopodobieństwo wystąpienia zagłodzenia w przypadku próby odczytu/zapisu.

Wpłynie pozytywnie, ponieważ przy wykorzystaniu algorytmu FCFS nie wystąpią zagłodzenia. FCFS to algorytm analogiczny do kolejki FIFO(first In first out), oznacza to, że każdy z procesów, jeżeli zgłosi chęć wykorzystania zasobu, to ma gwarancję, że w skończonym okresie czasu zostanie obsłużony, dzięki czemu nie powstaną zagłodzenia.
6. Wymienić różnicę miedzy semaforem zdefiniowanym przez Dijkstrę a semaforami obecnei używanymi.

Przede wszystkim semafory Dijkstry to semafory dwustanowe (binarne). Nie posiadają one sprecyzowanej kolejności wzbudzania procesów i nie można sprawdzić ich stanu. W obecnych semaforach mamy dowolną ilość stanów przez co semafor nie są one tylko opuszczone lub podniesione (mogą być częściowo opuszczone). Jest określony sposób wzbudzania procesów po użyciu funkcji Signac (np. FIFO) i możemy sprawdzić ich stan.
7. Zakłada się, żę w pewnym programie współbieżnym może dojść do zakleszczenia. Wyjaśnij, dlaczego nie dla każdego uruchomienia tego programu dochodzi do zakleszczenia.

Ponieważ programy współbieżne są programami niedeterministycznymi. Podczas każdego uruchomienia programu może wystąpić inny przeplot funkcji przez co nie zawsze dojdzie do zakleszczenia. Dodatkowo dla każdego uruchomienia procesy mogą potrzebować dostępu do innych zasobów które współdzielą z innymi procesami.


Wyszukiwarka

Podobne podstrony:
PW Sciąga III sem, Prawo wspolnotowe i integracja eurpejska
PW Sciąga III sem, Prawo wspolnotowe i integracja eurpejska
ściąga grafika, PW Transport, Grafika inżynierska II
ściaga - trzonowce, Budownictwo IL PW, Semestr 7 KBI, METAL3
gospodarka-sciaga (2), nauka, PW, Sem 4, gospodarka energetyczna
ściąga - zbiorniki, Budownictwo IL PW, Semestr 7 KBI, METAL3
mamce sciaga, PW, Semestr 1, M a m e t
ściąga - rurociąg, Budownictwo IL PW, Semestr 7 KBI, METAL3
ściąga - hale, Budownictwo IL PW, Semestr 7 KBI, METAL3
wszystkie pytania - ciąg - sciąga - długopisy, Inżynieria Środowiska PW semestr I, chemia, sesja
sciaga chemia, Inżynieria Środowiska PW semestr I, chemia, sesja
judi sciaga, Geodezja PW, Stare dzieje, GON, Pytania + kolosy
sciaga (1), PW MEiL, Gospodarka energetyczna
Sciąga 21234, nauka, PW, sem 5 b, Chemia wody
ściąga - wieże maszty, Budownictwo IL PW, Semestr 7 KBI, METAL3
sciaga fizyka, PW Transport, Fizyka
sciaga fizyka simr, SIMR PW, I semestr, Fizyka

więcej podobnych podstron