Kolokwium 1
1. Które z przejść między stanami (nowy, (nowy, gotowy, gotowy, wykonywan wykonywany y, oczekujący, oczekujący, zakończony) zakończony) odpowiada o dpowiada zakończeniu drukowania? (a) gotowy gotowy → oczekujący (b) wykonywan wykonywany y → oczekujący (c) oczekujący oczekujący → wykonywany (d) oczekujący oczekujący → gotowy (e) wskonywan wskonywany y → wotowy 2. Który zasób zasób jest współdzielon współdzielony y przez wątki wątki w ramach ramach procesu? (a) segment segment kodu kodu (b) segment segment danych danych (c) otwarte otwarte pliki (d) stos stos 3. Załóżmy Załóżmy,, że posiadamy posiadamy prawo prawo x do (własnego) (własnego) pliku abc. Które polecenie polecenie zabierze nam to prawo prawo (a) chmod chmod u=r abc (b) chmod chmod 0544 0544 abc (c) chmod chmod u+r abc (d) chmod chmod 0111 0111 abc 4. Która z funkcji systemowyc systemowych h Unixa nie jest potrzebna potrzebna do korzysta korzystania nia z potoku? (a) pipe (b) fork fork (c) read read (d) write write 5. Ile powstanie powstanie łącznie procesów wskutek uruchomienia uruchomienia poniższego programu? programu? main() { int i; for (i = 0; i < 5; ++i) if (fork() < 0) exit(0); }
6. Która funkcja funkcja nigdy nie zwraca zwraca wartości wartości −1? (a) fork fork (b) exec exec (c) close close (d) exit exit 7. Co należy wstawić w przytoczonym fragmencie kodu kodu w miejsce trzech kropek, by spowodować spowodować przekierowanie przekierowanie standardowego wejścia na plik? fd = open("pl open("plik", ik", 0700); 0700); close(0) close(0); ; ...; close(fd close(fd); );
8. Ile co najwyżej sierot może powstać powstać w wyniku wyniku działania działania następujące następującego go kodu? fork(); fork(); fork(); fork(); if (fork()) (fork()) wait(NUL wait(NULL); L); Kolokwium 2
1. Który algorytm algorytm poprawnie poprawnie implementuje implementuje wzajemne wykluczan wykluczanie ie za pomocą niepodzielnej niepodzielnej operacji operacji zamiany zamiany wartości wartości zmiennych zmiennych (exch)? (exch)? Zakładam Zakładamy y, że zmienna zmienna a jest współdzielona, współdzielona, zainicjowan zainicjowana a na 0, natomiast natomiast b jest lokalna lokalna w każdym każdym z procesów; SK oznacza sekcję krytyczną. (a) b:=1; b:=1; repeat exch(a,b exch(a,b)) until b=0; SK; a:=0 (b) b:=1; b:=1; repeat exch(a,b exch(a,b)) until b=1; SK; a:=0 (c) b:=1; b:=1; repeat exch(a,b exch(a,b)) until b=0; SK; b:=0
(d) b:=0; repeat exch(a,b) until b=0; SK; a:=0 2. Który algorytm poprawnie implementuje wzajemne wykluczanie za pomocą niepodzielnej operacji test-andset (ts)? Zakładamy, że zmienna a jest współdzielona; SK oznacza sekcję krytyczną. (a) while ts(a)=1 do ; SK; a:=0 (b) while ts(a)=1 do ; SK; a:=1 (c) while ts(a)=1 do a:=0; SK; a:=0 (d) while ts(a)=1 do a:=1; SK; a:=1 3. Dwa procesy współbieżne komunikują się przez bufor o ograniczonej pojemności. Jeden z nich jest producentem, drugi — konsumentem. Dostęp do bufora procesy przeprowadzają według algorytmów, wykorzystujących semafory a, b, w. Producent wykonuje po kolei: P(a); P(w); włożenie bajtu do bufora; V(w); V(b). Jak powinien wyglądać poprawny kod konsumenta („pbzb” oznacza pobranie bajtu z bufora)? (a) P(b); P(w); pbzb; V(a); V(w) (b) P(w); P(b); pbzb; V(a); V(w) (c) P(w); P(a); pbzb; V(w); V(b) (d) P(a); P(w); pbzb; V(w); V(b) 4. Dwa procesy współbieżne komunikują się przez bufor o po jemności 1024 bajtów. Jeden z nich jest producentem, drugi — konsumentem. Dostęp do bufora procesy przeprowadzają według algorytmów, wykorzystu jących semafory a, b, w. W szczególności kod producenta ma postać: P(a); P(w); włożenie bajtu do bufora; V(w); V(b). Jakie wartości początkowe należy nadać semaforom? (a) a=1024, b=0, w=1 (b) a=0, b=1024, w=1 (c) a=0, b=0, w=1024 (d) a=1024, b=1, w=0 5. procesy P i (i = 1 ,...,N ) wykonują w nieskończonych pętlach swoją treść, czyli są postaci: process P i : for ki :=1 to ∞ do { (*); C i ; (**) } Dodatkowo mamy tablicę semaforów liczbowych s[i, j ] o rozmiarze N × N , którym nadano początkowo wartość d. Które fragmenty można wstawić w miejsca (*)/(**), by w dowolnej chwili spełniony był warunek ∀i, j = 1 ,...,N : |ki − k j | ≤ d + 1? Liczby N oraz d to stałe. Procesy znają swoje numery i. (a) (*) for j :=1 to N do P(s[i, j ]), (**) for j :=1 to N do V(s[ j, i]) (b) (*) for j :=1 to N do P(s[i, j ]), (**) for j :=1 to N do V(s[i, j ]) (c) (*) for j :=1 to N do P(s[i, i]), (**) for j :=1 to N do V(s[ j, i]) (d) (*) for j :=1 to N do P(s[i, j ]), (**) for j :=1 to N do V(s[ j, j ]) 6. W którym ze stanów znajduje się proces, który wykonał na semaforze operację P, lecz nie wszedł do strefy krytycznej, gdyż ta jest akurat zajęta przez inny proces? (a) oczekujący (b) wstrzymany (c) gotowy (d) wykonywany 7. W którym ze stanów znajduje się proces, który wykonał (w monitorze) operację delay? (a) oczekujący (b) wstrzymany (c) gotowy (d) wykonywany
8. Poniższy monitor służy do synchronizacji czytelników i pisarzy: monitor CP; var lc, lp: int:=0; qc, qp: queue; entry PoczPis: if lc>0 or lp>0 then delay(qp); lp:=1 entry KonPis: lp:=0; if not empty(qc) then continue(qc) else if not empty(qp) then continue(qp) entry PoczCzyt: if lp >0 then delay(qc); ++lc; if not empty(qc) then continue(qc) entry KonCzyt: −−lc; if not empty(qp) then continue(qp) Istnieje scenariusz, przy którym: (a) dwóch pisarzy naraz uzyska dostęp do bazy danych (b) nastąpi zakleszczenie (c) nastąpi zagłodzenie czytelników (d) nastąpi zagłodzenie pisarzy 9. Dwa procesy korzystają z dwóch semaforów binarnych: s1 i s2. Początkowo s1 jest otwarty, zaś s2 — zamknięty. Kod procesów: process P1: while true do { P(s1); V(s2); V(s2) }, process P2: while true do { P(s2); P(s2); V(s1) }. W kodzie tym: (a) może (lecz nie musi) dojść do zakleszczenia (b) na pewno dojdzie do zakleszczenia (c) na pewno nie dojdzie do zakleszczenia (d) kod jest niepoprawny 10. Semafor liczbowy (nieograniczony) s miał wartość 10. Później wykonywano na nim operacje P i V; w sumie 13 razy wykonano P(s) i 5 razy V(s). Wartość semafora po tych operacjach to: (a) 2 (b) 18 (c) 5 (d) tego nie można ustalić nie znając konkretnej kolejności wykonywania P i V 11. Rozważmy dwa procesy, P1 i P2. Semafor binarny A jest początkowo otwarty, zaś B — zamknięty. Przez N X oznaczmy liczbę wykonań operacji X, przez N Y — liczbę wykonań operacji Y. Kod procesów: process P1: while true do { P(A); X; V(B) }, process P2: while true do { P(B); Y; V(A) }. Wskazać najsilniejszy warunek zachodzący w dowolnej chwili: (a) N Y + 1 ≥ N X ≥ N Y (b) N X + 1 ≥ N Y ≥ N X (c) N X + 2 ≥ N Y ≥ N X (d) N Y + 2 ≥ N Y ≥ N X 12. Mamy trzy semafory liczbowe (nieograniczone): s1, s2 i s3, zainicjowane na 1. Rozważamy trzy procesy. Przez nX , nY i nZ oznaczamy liczbę wykonań odpowiednich operacji. Kod procesów: process P1: while true do { P(s1); X; V(s2); V(s3) }, process P2: while true do { P(s2); Y; V(s1); V(s3) }, process P3: while true do { P(s3); Z; V(s2); V(s1) }. Wskazać najsilniejszy warunek zachodzący w dowolnej chwili: (a) nX ≤ nY + nZ (b) nX ≤ nY + nZ + 1 (c) nX ≤ nY + nZ − 1 (d) nX ≤ nY + nZ + 2 13. W problemie czytelników i pisarzy: (a) niezależnie od rozkładu priorytetów na pewno nie dojdzie do zagłodzenia czytelników ani pisarzy
(b) na pewno nie dojdzie do zagłodzenia czytelników, natomiast w zależności od rozkładu priorytetów może dojść do zagłodzenia pisarzy (c) w zależności od rozkładu priorytetów może dojść do zagłodzenia czytelników lub pisarzy (d) dla każdego możliwego rozkładu priorytetów może dojść do zagłodzenia któregoś z typów procesów 14. Rozważmy następujące taski w Adzie: task semafor: repeat accept P; accept V forever, task T1: semafor.P; X; semafor.V, task T2: semafor.V; Y; semafor.P, task T3: semafor.P; Z; semafor.P, task T4: semafor.V; A; semafor.V. Zakładamy, ża w procesie jest task semafor i jeden task ze zbioru X ⊆ {T 1, T 2, T 3, T 4}. Wskazać maksymalny zbiór X gwarantujący zakleszczenie: (a) {T 1, T 2, T 3} (b) {T 2, T 3, T 4} (c) {T 2, T 3} (d) {T 3, T 4} Egzamin
1. Który fragment kodu w Adzie jest na pewno niepoprawny? (a) when x>y => accept p(x: in integer) do y:=x end (b) when y>0 => accept p(x: in integer) do y:=x end (c) when z>0 => accept p(x: in integer) do y:=x end (d) when y>z => accept p(x: in integer) do y:=x end 2. Który fragment kodu w Adzie może być w odpowiednim kontekście poprawny? (a) accept p(x: in integer); accept p(y: out integer) do y:=x end (b) accept p(x: in integer); accept p(y: out integer) do x:=y end (c) accept p(x: in integer) do z:=x end; accept p(y: out integer) do y:=z end (d) accept p(x: in integer) do z:=x end; accept p(y: out integer) do z:=y end 3. W pewnym systemie z pamięcią wirtualną prawdopodobieństwo odwołania do strony niepoprawnej wynosi 3 × 10–7, średni czas dostępu do pamięci RAM to 50 ns, a średni czas obsługi braku strony to 50 ms. Ile wynosi spowolnienie dostępu do pamięci spowodowane zastosowaniem pamięci wirtualnej? (a) 30% (b) 3% (c) 15% (d) 1,5% 4. System pamięci wirtualnej z wymianą na żądanie stosuje algorytm FIFO. System dysponuje czterema ramkami, które początkowo są puste. Która strona zostanie usunięta przy ostatnim odwołaniu, jeśli ciąg odwołań do stron przedstawia się tak: 1, 2, 3, 4, 1, 4, 3, 4, 5? (a) 1 (b) 2 (c) 3 (d) 4 5. System pamięci wirtualnej z wymianą na żądanie stosuje algorytm LRU. System dysponuje czterema ramkami, które początkowo są puste. Która strona zostanie usunięta przy ostatnim odwołaniu, jeśli ciąg odwołań do stron przedstawia się tak: 1, 2, 3, 4, 1, 4, 3, 4, 5? (a) 1
(b) 2 (c) 3 (d) 4 6. System pamięci wirtualnej z wymianą na żądanie stosuje algorytm LFU. System dysponuje czterema ramkami, które początkowo są puste. Która strona zostanie usunięta przy ostatnim odwołaniu, jeśli ciąg odwołań do stron przedstawia się tak: 1, 2, 3, 4, 1, 4, 3, 4, 5? (a) 1 (b) 2 (c) 3 (d) 4 7. System pamięci wirtualnej z wymianą na żądanie stosuje algorytm MFU. System dysponuje czterema ramkami, które początkowo są puste. Która strona zostanie usunięta przy ostatnim odwołaniu, jeśli ciąg odwołań do stron przedstawia się tak: 1, 2, 3, 4, 1, 4, 3, 4, 5? (a) 1 (b) 2 (c) 3 (d) 4 8. Rozważmy dwa współbieżne procesy. Zmienna x jest współdzielnona, początkowo równa 0, natomiast y jest lokalna w każdym z procesów. Kod procesów: process P1: y:=x; y:=y+1; x:=y process P2: y:=x; y:=y+2; x:=y Podać maksymalny zbiór wartości, jakie zmienna x może osiągnąć w wyniku różnych przeplotów. (a) {1, 2, 3} (b) {0, 1, 2, 3} (c) {1, 2} (d) {0, 3}