SO-1st-2.3-w12.tresc-1.0-Slajd6: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian |
Nie podano opisu zmian |
||
| (Nie pokazano 1 pośredniej wersji utworzonej przez tego samego użytkownika) | |||
| Linia 14: | Linia 14: | ||
odblokuj_obsługę_przerwań; | odblokuj_obsługę_przerwań; | ||
'''goto''' próbuj | '''goto''' próbuj | ||
'''end''' ; | '''end'''; | ||
'''else''' '''begin''' ''s'' := ''s'' – 1; | '''else''' '''begin''' ''s'' := ''s'' – 1; | ||
odblokuj_obsługę_przerwań | odblokuj_obsługę_przerwań | ||
| Linia 23: | Linia 23: | ||
Skok do linii zaetykietowanej jako ''próbuj'' oznacza aktywne czekanie. | Skok do linii zaetykietowanej jako ''próbuj'' oznacza aktywne czekanie. | ||
[[SO-1st-2.3-w12.tresc-1.0-Slajd5 | << Poprzedni slajd]] | [[SO-1st-2.3-w12.tresc-1.0-toc|Spis treści ]] | [[SO-1st-2.3-w12.tresc-1.0-Slajd7 | Następny slajd >>]] | [[SO-1st-2.3-w12.tresc-1.0-Slajd5 | << Poprzedni slajd]] | [[SO-1st-2.3-w12.tresc-1.0-toc|Spis treści ]] | [[SO-1st-2.3-w12.tresc-1.0-Slajd7 | Następny slajd >>]] | ||
Aktualna wersja na dzień 19:41, 24 wrz 2006
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.