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

[wersja przejrzana][wersja przejrzana]
Usunięta treść Dodana treść
CiaPan (dyskusja | edycje)
bzdury w tłumaczeniu z en-wiki, drobne redakcyjne
CiaPan (dyskusja | edycje)
m drobne redakcyjne
Linia 1:
'''Inwersja priorytetów''' - zjawisko mogące występować w [[wielozadaniowość|wielozadaniowych]] [[system operacyjny|systemach operacyjnych]] takie, że w danej chwili wykonuje się inne zadanie niż powinno się wykonywać zgodnie z regułami [[Algorytm szeregowania|algorytmu szeregowania]].
 
Pojawienie się inwersji priorytetów związane jest najczęściej z dostępem zadań do zasobów chronionych przez algorytmy [[synchronizacja międzyprocesowa|synchronizacji międzyprocesowej]] takie jak na przykład [[semafor (informatyka)|semafory]]. W praktyce inwersja priorytetów to zdobycie przez zadanie będące w [[sekcja krytyczna|sekcji krytycznej]] pierwszeństwa w dostępie do procesora kosztem zadań o wyższych priorytetach.
 
W niektórych przypadkach inwersja priorytetów może powodować opóźnienie w wykonywaniu zadań o wysokim priorytecie, ewentualnie zadania o niskim priorytecie mogą zwalniać dzielone zasoby, co odbywa się zwykle bez większej szkody. Jednakże istnieje wiele sytuacji, w których inwersja priorytetów może sprawić spore problemy. Jeśli zadanie o wysokim priorytecie ulega [[Zagłodzenie_procesu|zagłodzeniu]], może to prowadzić do nieprawidłowego działania systemu lub wywoływać działania zapobiegające uszkodzeniu, takich jak [[watchdog]] restartujący cały system. Klasycznym przykładem problemów spowodowanych inwersją priorytetów w systemie czasu rzeczywistego są kłopoty doświadczonez przezdziałaniem sondęlądownika kosmicznąsondy kosmicznej [[Mars Pathfinder]].
 
Inwersja priorytetów może również ograniczyć wydajność systemu. Niektóre zadania mają niski priorytet dlatego, że nie jest dla nich ważne szybkie zakończenie się (np. nie wymagające interakcji użytkownika lub seria zadań w [[Tryb_wsadowy|przetwarzaniu wsadowym]]). Odwrotnie jest natomiast z zadaniami o wysokim priorytecie – te z kolei często wymagają jakiejś interakcji lub pełnią ważną rolę gwarantującą poprawne działanie aktualnie wykorzystywanych elementów systemu. Inwersja priorytetów powoduje to, że wywoływanie zadań o niskim priorytecie blokuje zadania z wysokim priorytetem, co może prowadzić do utraty stabilności i zawieszeń systemu.
 
Inwersja priorytetów może również ograniczyć wydajność systemu. Niektóre zadania mają niski priorytet dlatego, że nie jest dla nich ważne szybkie zakończenie się (np. nie wymagające interakcji użytkownika lub seria zadań w [[Tryb_wsadowyTryb wsadowy|przetwarzaniu wsadowym]]). Odwrotnie jest natomiast z zadaniami o wysokim priorytecie – te z kolei często wymagają jakiejś interakcji lub pełnią ważną rolę gwarantującą poprawne działanie aktualnie wykorzystywanych elementów systemu. Inwersja priorytetów powoduje to, że wywoływanie zadań o niskim priorytecie blokuje zadania z wysokim priorytetem, co może prowadzić do utraty stabilności i zawieszeń systemu.
 
== Przykład ==