To tylko jedna z 49 stron tej notatki. Zaloguj się aby zobaczyć ten dokument.
Zobacz
całą notatkę
Systemy operacyjne wykład 6. Synchronizacja procesów Opracowano na podst.: Operating System Concepts – 8th Edition, Silberschatz, Galvin and Gagne ©2009 Opracowano na podst.: Operating System Concepts – 8th Edition, Silberschatz, Galvin and Gagne ©2009 1.2 Wykład 6: Synchronizacja procesów • Podstawy • Problem sekcji krytycznej • Rozwiązania Petersona • Sprzętowe wsparcie synchronizacji • Semafory • Klasyczne problemy synchronizacji • Monitory • Przykłady synchronizacji • Transakcje niepodzielne Opracowano na podst.: Operating System Concepts – 8th Edition, Silberschatz, Galvin and Gagne ©2009 1.3 Cele • Wprowadzenie problemu sekcji krytycznej, którego rozwiązania mogą być wykorzystane w celu zapewnienia spójności współdzielonych danych • Prezentacja rozwiązań programowych i sprzętowych problemu sekcji krytycznej • Wprowadzenie koncepcji transakcji niepodzielnej i opisanie mechanizmów zapewniających niepodzielność transakcji Opracowano na podst.: Operating System Concepts – 8th Edition, Silberschatz, Galvin and Gagne ©2009 1.4 Podstawy • WspółbieŜny dostęp do danych współdzielonych moŜe powodować niespójność danych • Utrzymanie spójności danych wymaga mechanizmów zapewniających uporządkowane wykonanie współpracujących procesów • ZałóŜmy, Ŝe chcieliśmy zapewnić rozwiązanie problemu producenta- konsumenta, w którym zapełniane są wszystkie bufory. MoŜemy to osiągnąć wykorzystując całkowity licznik, który przechowuje liczbę pełnych buforów. Początkowo licznik ten jest ustawiony na 0. Jest on zwiększany przez producenta po wyprodukowaniu nowego bufora, a zmniejszany przez konsumenta po „skonsumowaniu” bufora. Opracowano na podst.: Operating System Concepts – 8th Edition, Silberschatz, Galvin and Gagne ©2009 1.5 Producent while (true) { /* produce an item and put in nextProduced */ while (count == BUFFER_SIZE) ; // do nothing buffer [in] = nextProduced; in = (in + 1) % BUFFER_SIZE; count++; } Opracowano na podst.: Operating System Concepts – 8th Edition, Silberschatz, Galvin and Gagne ©2009 1.6 Konsument while (true) { while (count == 0) ; // do nothing nextConsumed = buffer[out]; out = (out + 1) % BUFFER_SIZE; count--; /* consume the item in nextConsumed } Opracowano na podst.: Operating System Concepts – 8th Edition, Silberschatz, Galvin and Gagne ©2009 1.7 Szkodliwa rywalizacja ( Race Condition ) • count++ moŜe być zaimplementowane następująco: register1 = count
(…)
…: konsument wykonuje count = register2 {count = 4}
Opracowano na podst.: Operating System Concepts – 8th Edition, Silberschatz, Galvin and Gagne ©2009
1.7
Rozwiązanie problemu sekcji krytycznej
1. Wzajemne wykluczanie – JeŜeli proces Pi wykonuje swoją sekcję krytyczną,
wówczas Ŝadne inne procesy nie mogą wykonywać swoich sekcji krytycznych
2. Postęp - JeŜeli Ŝaden z procesów nie wykonuje swojej sekcji…
…
Rozwiązania:
do {
key = TRUE;
while ( key == TRUE)
Swap (&lock, &key );
//
critical section
lock = FALSE;
//
remainder section
} while (TRUE);
Opracowano na podst.: Operating System Concepts – 8th Edition, Silberschatz, Galvin and Gagne ©2009
1.16
Wzajemne wykluczanie z ograniczonym
czekaniem w uŜyciem TestAndSet
do {
waiting[i] = TRUE;
key = TRUE;
while (waiting[i] && key)
key = TestAndSet(&lock);
waiting…
…
Linux
Pthreads
Opracowano na podst.: Operating System Concepts – 8th Edition, Silberschatz, Galvin and Gagne ©2009
1.45
Solaris - synchronizacja
• RóŜne rodzaje zamków do wykorzystania w wielozadaniowości,
wielowątkowości (włączając w to wątki czasu rzeczywistego) i
wieloprzetwarzania
• Wykorzystanie zamków adaptacyjnych (adaptive mutexes) do efektywnej
ochrony danych, do których dostęp odbywa…
... zobacz całą notatkę
Komentarze użytkowników (0)