Przełączanie kontekstu - makro switch_to

Aleksander Zalewski
Listopad 2001


Przy wywołaniu funkcji schedule() [w wyniku obsługi przerwania, bądź obsługi wywołania systemowego] może wystąpić potrzeba zmiany kontekstu (zmiana aktualnie wykonywanego procesu)
makro switch_to :
  1. zapamiętanie rejestrów ESI, EDI, EBP
  2. wymiana stosu starego procesu na stos nowego procesu (rejestr ESP)
  3. wywołanie funkcji __switch_to:
    1. ewentualne zapamiętanie stanu koprocesora (jeśli był używany)
    2. wymiana rejestrów FS i GS (segmenty procesu)
    3. jeśli proces wykonuje się w trybie debug, to są ładowane rejestry debugreg
  4. odczyt rejestrów EBP, EDI, ESI teraz już bieżącego procesu

Pozostałe rejestry są odtwarzane przy powrocie z funkcji systemowej lub funkcji obsługi przerwania. (to samo dotyczy zapisu)