Za przydzielanie czasu procesora do określonych zadań odpowiada
Za przydzielanie czasu procesora do zadań odpowiada system operacyjny, a dokładniej jego część nazywana planistą zadań, czyli schedulerem. To on decyduje, który proces albo wątek dostanie dostęp do CPU, na jak długo i w jakiej kolejności. Dzięki temu komputer może sprawiać wrażenie, że robi wiele rzeczy naraz: odtwarza muzykę, pobiera plik, obsługuje przeglądarkę i jeszcze skanuje system antywirusem. W praktyce procesor bardzo szybko przełącza się między zadaniami, a system operacyjny pilnuje priorytetów, kolejek procesów i reakcji na przerwania. Moim zdaniem to jeden z ważniejszych mechanizmów, który odróżnia nowoczesny system od prostego programu uruchamianego bezpośrednio na sprzęcie. W Windows można to częściowo obserwować w Menedżerze zadań, a w Linuxie np. przez top, htop, ps czy nice i renice. Dobre praktyki administracyjne mówią, żeby nie podnosić priorytetów procesów bez potrzeby, bo można pogorszyć responsywność całego systemu. Scheduler współpracuje też z mechanizmami wielozadaniowości, zarządzania pamięcią, obsługą wielordzeniowych procesorów i uprawnieniami użytkowników. Cache procesora, RAM i chipset są ważne, jasne, ale nie podejmują decyzji o kolejności wykonywania programów. To rola systemu operacyjnego.
W tym pytaniu łatwo pomylić elementy sprzętowe z funkcją zarządzania pracą komputera. Cache procesora jest bardzo szybkim buforem pamięci znajdującym się blisko rdzeni CPU. Przechowuje często używane dane i instrukcje, żeby procesor nie musiał za każdym razem czekać na wolniejszą pamięć RAM. Cache przyspiesza wykonywanie kodu, ale sam nie decyduje, który program ma działać teraz, a który za chwilę. To trochę jak dobrze ułożone notatki na biurku: pomagają pracować szybciej, ale nie układają planu dnia. Pamięć RAM także nie przydziela czasu procesora. RAM przechowuje aktualnie używane programy, dane procesów, biblioteki i bufory systemowe, ale jest zasobem, którym zarządza system operacyjny. Częsty błąd myślowy polega na tym, że skoro program jest w RAM, to RAM go uruchamia lub steruje jego wykonaniem. Tak nie jest, bo wykonanie instrukcji odbywa się w procesorze, a harmonogram dostępu do CPU ustala system. Chipset natomiast odpowiada za komunikację między podzespołami, obsługę magistral, kontrolerów i różnych interfejsów płyty głównej. W nowoczesnych komputerach część jego dawnych funkcji przeniesiono nawet do procesora, ale nadal nie jest to mechanizm planowania procesów. Przydzielanie czasu CPU to zadanie jądra systemu operacyjnego, realizowane przez scheduler. W Windows, Linuxie i innych systemach wielozadaniowych scheduler pilnuje priorytetów, kolejek gotowych procesów, przełączania kontekstu oraz sprawiedliwego lub celowego dzielenia mocy obliczeniowej. Z mojego doświadczenia najlepiej zapamiętać to tak: sprzęt wykonuje i przechowuje, ale system operacyjny organizuje pracę.