osdev.labedz.org

Przełączanie procesów

Procedura przełączająca procesy run_task jest napisana w języku assemblera, gdyż do tej operacji niezbędny jest dostęp bezpośrednio do rejestrów procesora. W implementowanym systemie przełączanie procesów nie wykorzystuje w pełni sprzętowego mechanizmu wspomagającego wielozadaniowość zawartego w procesorze - używana jest przede wszystkim część dotycząca ochrony zasobów. Główny element przełączania wykorzystuje stos programowy oraz instrukcję powrotu z przerwania 'iret'. W celu zmiany wykonywanego zadania należy zmienić wartość rejestru przechowującego adres katalogu stron, zmienić wskaźnik stosu na adres początku kontekstu nowego zadania, a następnie uaktualnić rejestry procesora na wartość przed wywłaszczeniem procesu i wykonać instrukcję powrotu z przerwania.

Mechanizm przełączania procesów 'na stosie'
Rys. Mechanizm przełączania procesów 'na stosie'