SO-1st-2.3-w12.tresc-1.0-Slajd6

Z Studia Informatyczne
Wersja z dnia 14:04, 18 wrz 2006 autorstwa Dwa (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Implementacja semafora ogólnego na poziomie maszynowym

Implementacja semafora ogólnego na poziomie maszynowym


W implementacji na poziomie maszynowym semafor ogólny jest zmienną całkowitą nieujemną (teoretycznie nieograniczoną od góry), na której wykonywane są operacje P i V . Takie podejście do implementacji wynika zatem bezpośrednio z definicji.

W celu wyeksponowania przepływu sterowania i wskazania instrukcji, które muszą być wykonane niepodzielnie, implementację operacji P można przedstawić następująco:

procedure P(var s : Semaphore)begin próbuj:

zablokuj_obsługę_przerwań;

if s = 0 then

begin odblokuj_obsługę_przerwań;

goto próbuj

end ;

else begin s ?? s – 1;

odblokuj_obsługę_przerwań

end ; end ;

Ciąg instrukcji pomiędzy zablokowaniem, a odblokowaniem przerwań wykonywany jest niepodzielnie. Istotne jest zatem niepodzielne sprawdzenie i zmniejszenie wartości zmiennej s (pod warunkiem, że jest większa od 0).

Skok do linii zaetykietowanej jako próbuj oznacza aktywne czekanie.


<< Poprzedni slajd | Spis treści | Następny slajd >>