2011-01-24 7 views
15

Niedawno rozpocząłem mój kurs OS. O ile wiem, praca dyspozytora polega na zapisaniu kontekstu bieżącego procesu i załadowaniu kontekstu procesu, który ma zostać uruchomiony w następnej kolejności. Ale jak to robi? Kiedy proces jest zwalniany, wówczas, gdy tylko dyspozytor zostanie załadowany i wykonany (ponieważ jest to również program), utracony zostanie kontekst poprzedniego procesu w rejestrach, PSW itp. Jak zamierza zapisać kontekst przed załadowaniem się?jak działa dyspozytor?

+0

Czy nie powinien zostać przeniesiony na superuser.com? –

+6

djechelon: Nie, nie sądzę. Chodzi o wewnętrzne działanie harmonogramu systemu operacyjnego, a nie o korzystanie z systemu operacyjnego. –

Odpowiedz

19

Prostą odpowiedzią jest to, że nowoczesne procesory oferują rozszerzenia architektoniczne zapewniające kilka banków rejestrów, które można zamienić sprzętowo, dzięki czemu do X zadań zachowuje się pełen zestaw rejestrów.

Bardziej złożona odpowiedź polega na tym, że dyspozytor, po wywołaniu przez przerwanie, otrzymuje kompletny zestaw rejestrów programu, który był uruchomiony w momencie przerwania (z wyjątkiem licznika programu, który jest prawdopodobnie propagowany przez wzajemnie uzgodniony "lotny" rejestr lub taki inny). Tak więc, dyspozytor musi być starannie napisany, aby zapisać bieżący stan banków rejestrów jako pierwszą operację po wyzwoleniu. W skrócie, sam dispatcher nie ma bezpośredniego kontekstu i dlatego nie cierpi z powodu tego samego problemu.

Oto próba prostego opisu, co dzieje się podczas rozmowy dyspozytora:

  1. Program, który obecnie ma kontekst jest uruchomiony na procesorze. Rejestry, licznik programów, flagi, baza stosów itp. Są odpowiednie dla tego programu; z możliwym wyjątkiem natywnego "rezerwowanego rejestru" systemu operacyjnego lub czegoś takiego, nic o programie nic nie wie na temat dyspozytora.
  2. Przerwa czasowa dla funkcji dyspozytora jest wyzwalana. Jedyne, co dzieje się w tym momencie (w przypadku architektury waniliowej) jest to, że licznik programu natychmiast przeskakuje do dowolnego adresu komputera w przerwaniu BIOSu. To rozpoczyna realizację podprogramu "dyspozytora" dyspozytora; wszystko inne pozostaje nietknięte, więc dyspozytor widzi rejestry, stos itp. programu, który był wcześniej wykonywany.
  3. Dyspozytor (podobnie jak wszystkie programy) ma zestaw instrukcji, które działają na bieżącym zestawie rejestrów. Instrukcje te są napisane w taki sposób, że wiedzą, że poprzednio uruchomiona aplikacja pozostawiła cały swój stan. Pierwsze kilka instrukcji w dyspozytorze zapamięta ten stan w pamięci gdzieś.
  4. Dyspozytor określa, jaki powinien być następny program, który ma być zainstalowany, pobiera cały wcześniej zapisany stan i wypełnia go rejestrami.
  5. Dyspozytor przeskoczy do odpowiedniego licznika komputerów, tak jak to zostało określone w zadaniu, które ma teraz pełny kontekst ustalony na procesorze.

Aby (nad) uprościć podsumowanie; dyspozytor nie potrzebuje rejestrów, jedynie zapisuje bieżący stan procesora do wcześniej określonej lokalizacji pamięci, ładuje stan procesora innego procesu z wcześniej określonej lokalizacji pamięci i przeskakuje do miejsca, w którym proces ten został przerwany.

Czy to sprawia, że ​​jest jaśniejszy?

+0

"po wywołaniu przez przerwanie otrzymuje kompletny zestaw rejestrów programu, który działał w momencie przerwania" ... Masz na myśli, że istnieje jakieś wsparcie sprzętowe, które wysyła tę informację, a dyspozytor nie ma kodu do wartości rejestru transferowego (np. instrukcje mov ... itd.)? – Terminal

+0

Nie. Pozwól mi edytować moją odpowiedź, aby uzyskać dodatkowe szczegóły i jasność. –

+0

Tak, zdecydowanie !!! To było miłe wyjaśnienie. Teraz też dostaję to, co Paxdiablo chce przekazać .. :) – Terminal

1

Zazwyczaj nie jest ładowany w taki sposób, aby utracić informacje o bieżącym procesie.

Często jest to przerwanie, które ma miejsce w kontekście bieżącego procesu.

Tak więc dyspozytor (lub program planujący) może zapisać wszystkie istotne informacje w bloku kontroli zadań przed załadowaniem tych informacji do następnego procesu.

Obejmuje zawartość rejestru, wskaźnik stosu i tak dalej.

Warto zauważyć, że kontekst następnego procesu obejmuje stan jego obecności w samym środku przerywania wywoływania, tak aby po powrocie z przerwania nastąpił zupełnie inny proces.

+0

"Tak więc dyspozytor (lub program planujący) może zapisać wszystkie istotne informacje w bloku kontroli zadań przed załadowaniem tych informacji do następnego procesu ..." To, co mam wątpliwości ... Aby zapisać wszystkie informacje, jego wartości na komputerze itp. muszą być załadowane. Następnie, kto przechowuje poprzednie wartości? – Terminal

+0

@Neo, weź Linux jako przykład. Zawsze działa co najmniej jeden proces, który spowoduje rozwarcie innych, bezpośrednio lub pośrednio. System operacyjny ustawia wszystko na starcie, aby zmiana działała. Gdy procesy są uruchamiane i zatrzymywane, są dodawane do łańcucha w taki sposób, aby zapewnić, że program planujący będzie działał poprawnie. – paxdiablo

+0

Dzięki ... mam to. Wyjaśnienie Markera daje mi wgląd w to. – Terminal

0

Moduł dyspozytora umożliwia sterowanie procesorem do procesu wybranego przez terminarz krótkoterminowy; wiąże się to z: przełączania kontekstu, przełączanie na tryb użytkownika, skoki do odpowiedniej lokalizacji w programie użytkownika, aby ponownie uruchomić ten program

0

główną odpowiedzialność system operacyjny jest kontrolowanie realizacji procesów. Obejmuje to ustalanie wzorca do wykonania i przydzielanie zasobów do procesów.

Proces może być w jednym z dwóch stanów:

  1. bieganie lub
  2. Not Running

Gdy OS tworzy nowy proces, tworzy blok kontrolny procesu dla przetwarzać i wprowadzać ten proces do systemu w stan Nieruchome. Proces istnieje, jest znany systemowi operacyjnemu i czeka na możliwość wykonania.

Od czasu do czasu aktualnie uruchomione procesy zostaną przerwane, a część systemu operacyjnego w systemie dyspozytorskim wybierze inne procesy do uruchomienia.

Podczas wykonywania, gdy proces jest pozbawiony zasobów, zostaje zablokowany. Pod warunkiem, że te zasoby wróci do stanu gotowości, a następnie do stanu działania. To przejście ze stanu gotowości do działania jest wykonywane przez dyspozytora. Dyspozytor wywołuje proces.