Jądro Systemu
Rafał Grzybowski
Rafał Grzybowski
Podstawowe wymagania sprzętowe
Mechanizm przerwań
Ochrona pamięci
Zbiór rozkazów uprzywilejowanych
– włączanie i wyłączanie przerwań;
– przełączanie procesora od procesu do procesu;
– obsługiwanie rejestrów używanych przez sprzętową ochronę
pamięci operacyjnej
– wykonywanie operacji wejścia i wyjścia;
– zatrzymywanie procesora centralnego i sterowanie jego operacjami
Zegar czasu rzeczywistego
Rafał Grzybowski
Rozkazy uprzywilejowane
Proces użytkownika wywołuje system operacyjny w
celu wykonania pewnej czynności, która wymaga
użycia rozkazu uprzywilejowanego
Nadeszło przerwanie
Pojawił się błąd w procesie użytkownika
Wystąpiła próba wykonania rozkazu
uprzywilejowanego, podczas gdy komputer
pracuje w trybie użytkownika
Rafał Grzybowski
Podstawowe składniki jądra
program wstępnej obsługi przerwań
dyspozytor przełączający procesor
pomiędzy procesami
procedury komunikacji
pomiędzy procesami
SPRZĘT
JĄDRO SYSTEMU
INNE WARSTWY
Rafał Grzybowski
Reprezentacja procesów
deskryptor procesu - wektor stanu
procesu
–
nazwa procesu
–
stan procesu
• wykonywany -
proces bieżący
• wykonywalny
• niewykonywalny
–
sprzętowy deskryptor procesu
Rafał Grzybowski
Tablica główna
Reprezentacja procesów c.d.
środowisko ulotne procesu (kontekst
procesu) -
podzbiór takich podlegających zmianom
właściwości systemu, do których proces może mieć dostęp.
struktura procesów
Numer wersji
Data
Struktura procesów
Deskryptor
procesu 1
Deskryptor
procesu 2
Rafał Grzybowski
Wstępna obsługa przerwań
odpowiadanie na syganły nadchodzące z
zewnątrz do systemu (przerwania) oraz
pochodzące z samego systemu (pułapki
błędów itp.)
Dwa zadania główne:
–
określenie źródła przerwania
–
zainicjować obsługę przerwania
Rafał Grzybowski
Łańcuch przeskoków
Czy przerwanie ze źródła 3 ?
Czy przerwanie ze źródła 2 ?
Czy przerwanie ze źródła 1?
Pamiętaj rejestry programu
Procedura obsługi
dla źródła 1
T
N
T
T
N
Procedura obsługi
dla źródła 2
Procedura obsługi
dla źródła 3
Rafał Grzybowski
Dyspozytor
Przydzielanie procesora centralnego do różnych
procesów w systemie
–
po przerwaniu, zmieniającym stan jakiegoś procesu,
–
po odwołaniu do systemu, które powoduje, że chwilowo nie można
kontynuować wykonywania bieżącego procesu,
–
po wykryciu błędu, nasuwającego podejrzenie, że wystąpił on w
bieżącym procesie.
Do dyspozytora przechodzi się z zasady po
wszystkich przerwaniach !
Rafał Grzybowski
Dyspozytor
Czy bieżący proces nadal nadaje się do wykonania przez ten
procesor? Jeżeli tak, to przekaż sterowanie do tego miejsca w
pamięci operacyjnej, na które wskazuje licznik rozkazów. Jeżeli
nie, to:
Zapamiętaj środowisko ulotne bieżącego procesu w jego
deskryptorze procesu.
Znajdź najodpowiedniejszy proces i odtwórz jego środowisko
ulotne na podstawie jego deskryptora procesu.
Przekaż sterowanie do nowo wybranego procesu, do miejsca
wskazywanego przez jego odtworzony licznik rozkazów.
Rafał Grzybowski
Kolejka procesora
Deskryptor procesu 1
Niewykonywalny
Wykonywalny
Wykonywalny
Deskryptor procesu 2
Deskryptor procesu 3
Deskryptor procesu 4
Wykonywany
Rafał Grzybowski
Dyspozytor
Czy bieżący proces dla tego procesora jest nadal pierwszym
niewykonywanym procesem w kolejce procesora? Jeżeli tak, to
podejmij jego wykonanie. Jeżeli nie, to:
Zapamiętaj środowisko ulotne bieżącego procesu.
Odtwórz środowisko ulotne pierwszego niewykonywanego
procesu w kolejce procesora.
Przekaż sterowanie do tego procesu.
Rafał Grzybowski
Kolejka wielopoziomowa ze
sprzężeniem zwrotnym
Kilka kolejek procesora, z każdą kolejką jest
związany pewien ustalony kwant czasu
Najmniejszy kwant określa się dla kolejki o
najwyższym priorytecie, największy zaś - dla
kolejki o najniższym priorytecie
Jeżeli proces wykonuje się przez cały
przydzielony mu kwant czasu, to jest
odsyłany do następnej kolejki o niższym
priorytecie
Rafał Grzybowski
Czekaj i sygnalizuj
Operacje te powinny być dostępne dla wszystkich procesów.
Wynikiem operacji czekaj może być zablokowanie procesu, które
spowoduje przejście do dyspozytora w celu ponownego
przydziału procesora.
Wygodnym sposobem “obudzenia procesu” jest włączenie w
procedurę obsługi przerwania operacji sygnalizuj
Rafał Grzybowski
Blokowanie i odblokowywanie procesów
czekaj(s):
if s <> 0 then s := s – 1
else dodaj proces do kolejki
semafora i uczyń go niewykonywalnym;
sygnalizuj(s): if kolejka pusta then s := s + 1
else usuń jakiś proces z kolejki semafora
i uczyń go wykonywalnym;
Rafał Grzybowski
Dołączanie procesów do kolejki i
usuwanie ich z niej
Dla większości semaforów można przyjąć
organizację kolejki zgodną z prostą zasadą - kto
pierwszy przyszedł, ten pierwszy wychodzi;
gwarantuje ona, że w końcu uwolni się wszystkie
zablokowane procesy
Procesy o wysokich priorytetach nie powinny być
odsyłane na długo do kolejki semafora.
Zmiana implementacji
semafora
Rafał Grzybowski
Niepodzielność operacji
operacje czekaj i sygnalizuj powinny być
niepodzielne w tym znaczeniu, iż w dowolnej
chwili tylko jeden proces może je wykonywać
W komputerze z jednym procesorem
niepodzielność zapewnia wyłączanie
mechanizmu przerwań
W komputerze z kilkoma procesorami
centralnymi wykorzystywany jest rozkaz
"sprawdź i ustaw"