Jak przełączanie kontekstu tworzy iluzję wielozadaniowości

11

Przesyłasz strumieniowo muzykę, pobierasz plik i piszesz kod w tle. Wydaje się, że to wszystko dzieje się na raz. W rzeczywistości nie jest to prawdą.

Twój procesor zarządza tymi zadaniami z chirurgiczną precyzją, przełączając się między nimi tysiące razy na sekundę. Ta magiczna sztuczka nazywa się przełączaniem kontekstu. Bez niego komputer zawieszałby się przed wykonaniem pojedynczego zadania. Zanim będziesz mógł sprawdzić pocztę, będziesz musiał poczekać na załadowanie strony.

Przełączanie kontekstu to mechanizm, który pozwala systemowi operacyjnemu zarządzać wieloma procesami bez konieczności stosowania dodatkowego sprzętu. Utrzymuje iluzję równoległości, dzieląc czas na mikroskopijne odstępy.

Mechanika przełączania kontekstu

W swej istocie przełączanie kontekstu polega na zapisywaniu i przywracaniu stanu.

Kiedy procesor przełącza się z zadania A do zadania B, musi pamiętać, gdzie zadanie A się zatrzymało. W przeciwnym razie, kiedy do niego powróci, nie będzie wiedział, którą instrukcję wykonać dalej. Ten przechowywany stan jest „kontekstem”.

Dwa główne rejestry zawierają krytyczne dane:

  • Licznik programu: Wskazuje dokładny adres pamięci następnej instrukcji do wykonania. Po zapisaniu wiesz, od czego zacząć ponownie pracę.
  • Rejestry: Zawierają dane tymczasowe i bieżące polecenia. Rejestrują migawkę „stanu psychicznego” procesora w danym momencie.

Na starszych komputerach była to często operacja na poziomie sprzętu. Obwody fizyczne przeprowadzały tę wymianę. Obecnie większość nowoczesnych procesorów korzysta z przełączników kontekstu sterowanych programowo. Ta elastyczność pozwala pojedynczemu procesorowi wykonywać setki takich przełączeń na sekundę. Wynik? Doświadczasz jednoczesnego działania wielu aplikacji, mimo że procesor technicznie zmienia ich wykonywanie z zawrotną szybkością.

Dlaczego przełączanie kontekstu jest ważne

Dlaczego system operacyjny potrzebuje takiej złożoności?

Ponieważ zasoby są ograniczone. Nie masz dedykowanego procesora dla każdego procesu w tle. Zamiast tego masz jeden (lub więcej) rdzeni dzielących obciążenie. Przełączanie kontekstu umożliwia wielozadaniowość na ograniczonym sprzęcie.

Nie chodzi tylko o uruchamianie wielu aplikacji. Jest to również konieczne dla stabilności i szybkości reakcji systemu.

Rozważ następujące scenariusze:

Wymagania dotyczące wielozadaniowości

Kiedy przełączasz karty w przeglądarce, procesor wstrzymuje bieżący proces, zapisuje jego stan i ładuje stan nowego procesu. Bez tego przełączanie okien wymagałoby oczekiwania na zakończenie bieżącej aplikacji.

Przełączanie pomiędzy trybem jądra i użytkownika

Ze względów bezpieczeństwa Twoje aplikacje działają w „trybie użytkownika”. Zadania systemowe wykonywane są w „trybie jądra”. Kiedy aplikacja żąda czegoś od systemu operacyjnego (na przykład dostępu do pliku), procesor musi przełączać tryby. To przejście często wiąże się ze zmianą kontekstu, aby upewnić się, że jądro zawiera prawidłowe dane, a aplikacja może później zostać wznowiona.

Obsługa przerwań

Odczyt z dysku nie jest natychmiastowy. Gdy procesor żąda danych z dysku twardego, nie jest on bezczynny. Podczas oczekiwania przełącza się na inne zadanie. Po nadejściu danych przerwanie sygnalizuje procesorowi powrót, przywrócenie poprzedniego stanu i przetworzenie przychodzących bajtów.

Ukryta cena

Przełączanie kontekstu nie jest tanie.

Za każdym razem, gdy procesor zmienia kontekst, spędza cykle na zapisywaniu i ładowaniu danych. Czyści również pamięć podręczną procesora, co może spowolnić działanie, jeśli zdarza się to zbyt często. Jeśli Twój system zbyt często przełącza konteksty, zauważysz opóźnienia. Procesor jest zajęty zarządzaniem zadaniami, a nie ich wykonywaniem.

Dlatego ważne jest efektywne planowanie zadań. Im lepiej system operacyjny zarządza tymi przełącznikami, tym płynniejsze będzie korzystanie z nich.

Kiedy więc następnym razem będziesz mieć wrażenie, że Twój komputer jest w stanie obsłużyć wszystko naraz, pamiętaj: to nie magia. To szybka seria wymian, zapisów i przywracania. Procesor nigdy nie wykonuje zadań naprawdę równolegle. Po prostu jest naprawdę dobry w zmienianiu sytuacji.

I to trwa.