Jak działa wielozadaniowość

15

Nie mam pojęcia o wewnętrznym działaniu systemu operacyjnego, ale mogę mniej więcej zgadnąć przybliżone zachowanie wielu funkcji. Jednej rzeczy, której nie jestem w stanie zrozumieć, jest wielozadaniowość.

Teoretycznie system operacyjny zarządza czasem, dostosowując procesor w krótkich odstępach czasu do różnych uruchomionych programów. Ale nie jest jasne, jak to naprawdę działa.

Powiedz, że system operacyjny chce uruchomić mój program. Kod maszynowy jest ładowany gdzieś w pamięci RAM, zaczynając od określonego adresu. Myślę, że wtedy należy wykonać skok do tego adresu, umożliwiając wykonanie mojego kodu. Ale w ten sposób system operacyjny nie może odzyskać kontroli, dopóki nie odskoczę.

Zasadniczo mogę sobie wyobrazić tylko dwa sposoby wykonania tej pracy, ale żaden z nich nie wydaje się odpowiedni:

  • System operacyjny może odczytać instrukcje komputera, które chcę wykonać, i emulować je zamiast wykonywać bezpośrednio. Celowo jestem niejasny, ponieważ nie wiem, jak to by działało, ale wydaje się, że znacznie spowolniłoby to program.

  • Alternatywnie system operacyjny może poczekać, aż wykonam wywołanie systemowe. W tym momencie odzyskuje kontrolę i może sprawdzić, jak długo działam, i wykonywać czynności związane z dzieleniem czasu. Może to działać, ale wydaje się niewiarygodne, ponieważ mógłbym wykonać długie obliczenia, które nie obejmują wywołań systemowych i zawiesić wszystko na chwilę.

Wygląda więc na to, że żaden mechanizm nie działałby zbyt dobrze. Jak faktycznie wykonuje się wielozadaniowość?

Andrea
źródło
Chociaż twoje przypuszczenia nie są do końca poprawne, problem, na który zwróciłeś uwagę, jest, no cóż: „Mógłbym dokonać długich obliczeń, które nie obejmują wywołań systemowych i zawiesić wszystko na chwilę”.
jhocking
Słowo kluczowe, którego należy szukać:interrupt
SK-logic
Tak, ale kto uruchamia przerwanie? Jeśli mój kod jest wykonywany, system operacyjny nie ma możliwości wykonania INTinstrukcji. Nadal jest dla mnie coś tajemniczego
Andrea
@Andrea, zegar harware powoduje przerwanie. Tak proste. en.wikipedia.org/wiki/Scheduling_%28computing%29
SK-logic
Ok, teraz widzę. Tak więc, jeśli dobrze rozumiem, jest to funkcja sprzętowa, a nie coś, co można po prostu zaimplementować w systemie operacyjnym.
Andrea

Odpowiedzi:

21

System operacyjny programuje licznik czasu, aby uruchamiał się co kilka mikrosekund (lub milisekund, w zależności od szybkości systemu). Ten zegar podnosi przerwanie sprzętowe, co powoduje, że CPU zatrzymuje to, co aktualnie robi, zrzuca całą swoją zawartość na stos i przetwarza procedurę przerwania wskazaną przez adres podany przez kontroler przerwań. Ta procedura może sprawdzać stos i różne inne zmienne, aby podjąć decyzję, który z uruchomionych procesów powinien zostać ponownie uruchomiony. Jeśli jest to ten sam proces, procedura przerwania po prostu powraca. Jeśli jest inny, odpowiednie części stosu są zapisywane, a następnie zastępowane zawartością wcześniej przerwanego procesu, więc gdy powróci procedura przerwania, proces ten jest kontynuowany. Poza tym, że upłynęło trochę czasu,

Jest to (w przypadku nowoczesnych procesorów) BARDZO uproszczona wersja tego, co się dzieje, ale wyjaśnia zasadę. Oprócz tych przerwań kontrolowanych przez system operacyjny występują również zakłócenia wywołane zdarzeniami zewnętrznymi (mysz, klawiatura, porty szeregowe, porty sieciowe itp.), Które są przetwarzane za pomocą oddzielnych procedur przerwań, które zwykle są podłączone do procedur obsługi zdarzeń.

Bardzo często przełączanie procesów / zadań / kontekstów zależy również od dostępności zasobów zewnętrznych. Zazwyczaj proces wymagający danych z pamięci (tj. Nie z pamięci RAM) umieszcza żądanie w kolejce, ustawia moduł obsługi zdarzeń dla przerwania sprzętowego, wskazując, że żądanie zostało zrealizowane, a następnie przekazuje kontrolę harmonogramowi zadań (ponieważ nie ma punkt oczekiwania). Ponownie bardzo uproszczony opis tego, co się właściwie dzieje, ale powinien służyć celom tej odpowiedzi.

wolfgangsz
źródło
5

Różni się w zależności od systemu.

W nieprzewidzianych systemach wielozadaniowych (takich jak oryginalny Oberon lub oryginalny Apple Macintosh) system operacyjny okresowo „odpytuje” wszystkie zadania, dając im możliwość wykonywania pracy. Zadania mają się dobrze grać razem. Jeśli mają tylko trochę do zrobienia, robią to i wracają do systemu operacyjnego. Jeśli jedno zadanie ma WIELKĄ część, oczekuje się, że podzieli je na małe kawałki i wykona jeden kawałek za każdym razem, gdy jest odpytywany.

Przerwania sprzętowe (uzupełnienia DMA dysku, przerwania portu szeregowego, co masz) powodują uruchomienie procedur przerwań. Te procedury przerwania mogą z kolei powiadamiać zadania o pracy do wykonania przy następnym uruchomieniu zadania.

W nieprzewidzianych systemach wielozadaniowych pojawienie się lub niewystąpienie przerwania nie wpływa na to, które zadanie jest uruchamiane po zakończeniu procedury przerwania.

W zapobiegawczych systemach wielozadaniowych istnieje możliwość, że procedura przerwania wymusi zmianę harmonogramu. W tradycyjnym, wielozadaniowym systemie zapobiegawczym typu round-robin okresowe przerwanie timera robi dokładnie to. Uruchamia się przerwanie timera, procedura przerwania timera robi czarną magię, powodując, że instrukcja powrotu z przerwania wraca do harmonogramu wyprzedzającego systemu operacyjnego, a nie do uruchomionego zadania, odsuwając procesor od bieżącego zadania i (MOŻLIWE ), przekazując to do innego zadania. Jeśli żadne inne zadanie nie jest gotowe do uruchomienia w tym momencie, bieżące zadanie odzyska procesor, tracąc tylko trochę czasu.

Zapobiegawcza wielozadaniowość może powodować wiele problemów. Wszystkie te irytujące rzeczy o muteksach i sekcjach krytycznych oraz zabójczych uściskach i priorytetowych inwersjach i ... pojawiają się, gdy procesor zostanie ci odebrany bez ostrzeżenia. Musisz użyć tych wszystkich rzeczy, aby powiedzieć systemowi operacyjnemu, że jesteś w trakcie mieszania nitrogliceryny i odebranie procesora od ciebie teraz może doprowadzić do dużej wirtualnej dziury na środku podłogi serwerowni.

John R. Strohm
źródło
Co złego może się stać, jeśli procesor zostanie ci odebrany bez ostrzeżenia? Wydaje mi się, że odzyskasz kontrolę nad procesorem z tymi samymi wartościami w rejestrach. Czym różni się to od utrzymywania obliczeń?
Andrea
@Andrea: Wzajemne wykluczanie i krytyczne sekcje nie polegają na utracie procesora w krytycznym momencie. Jeśli twój proces ma coś zablokowanego i stracisz procesor, to coś pozostaje zablokowane, dopóki nie otrzymasz procesora ponownie. Może to powodować problemy.
John R. Strohm,
@Andrea Ponownie przejmiesz kontrolę nad procesorem, a niektóre inne procesy mogły mieć problemy z pamięcią, z której miałeś korzystać.
user253751
4

Sprzęt komputerowy może generować przerwania czasowe w celu przerwania procesora. W ten sposób, w oparciu o algorytm planowania używany przez system operacyjny, system operacyjny może zdecydować, czy kontynuować wykonywanie bieżącego programu, czy zmienić kontekst na inny, gotowy do uruchomienia.

nevayeshirazi
źródło