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ść?
źródło
interrupt
INT
instrukcji. Nadal jest dla mnie coś tajemniczegoOdpowiedzi:
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.
źródło
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.
źródło
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.
źródło