Inwersja priorytetów: Różnice pomiędzy wersjami

Z Wikipedii, wolnej encyklopedii
[wersja nieprzejrzana][wersja nieprzejrzana]
Kocio (dyskusja | edycje)
Kocio (dyskusja | edycje)
(Brak różnic)

Wersja z 22:59, 18 sty 2005

Inwersja priorytetów - niekorzystne zjawisko mogące występować w wielozadaniowych systemach operacyjnych, podczas dostępu przez procesy do zasobów chronionych przez semafory, sekcje krytyczne lub inne mechanizmy synchronizacji procesów.

Przykład

W systemie uruchomione są trzy procesy o identyfikatorach 1, 2 i 3, przy czym najwyższy priorytet posiada proces 1, a najniższy proces 3. Ponadto procesy 1 i 3 wykorzystują semafor jako mechanizm synchronizujący dostęp do pewnego zasobu.

Proces 3 podczas swojego wykonania uzyskuje dostęp do chronionego semaforem zasobu. Tuż po tym zostaje on wywłaszczony, po czym wykonanie rozpoczyna proces o najwyższym priorytecie - proces 1.

Proces 1 usiłuje uzyskać dostęp do zasobu chronionego przez semafor, jednak jest to niemożliwe, dopóki proces 3 nie zwolni zasobu. Wykonanie procesu 1 zostaje wstrzymane.

Algorytm szeregowania systemu operacyjnego wybiera do wykonania proces 2, proces ten zostaje wykonany do końca, gdyż posiada najwyższy priorytet spośród procesów gotowych do wykonania (gotowe do wykonania są procesy 2 i 3).

Dopiero po zakończeniu procesu 2 zostaje ponownie uruchomiony proces 3, który natychmiast po zwolnieniu zasobu zostaje wywłaszczony przez proces 1, który może kontynuować wykonanie.




W powyższym przykładzie proces 1 o wyższym priorytecie jest wykonywany dopiero po zakończeniu procesu 2 o niższym priorytecie - taka sytuacja jest nazywana inwersją priorytetów. Jako środek zaradczy stosuje się tymczasowe podniesienie priorytetu procesów wywłaszczonych, które rezerwują zasoby, do najwyższego priorytetu procesu oczekującego na te zasoby. Oryginalna wartość priorytetu zostaje im przywrócona natychmiast po zwolnieniu zasobów.