Next: Funkcja __schedule_tail()
Up: Rozszerzenie dla obsługi wielu
Previous: Struktury danych
  Spis rzeczy
Funkcja schedule() zawiera nastepujące zmiany w systemie z wieloma procesorami:
- Musi aktualizować dane związane z obsługą wieloprocesorowości, tzn. processor i
has_cpu w deksryptorach procesów, oraz tablice aligned_data
- Dla każdego procesu branego pod uwagę jako kandydata na przydział procesora
sprawdzane jest czy może on się wykonywać na procesorze, na którym działa schedule().
Służy do tego makro can_schedule(process, cpu).
- Po przełączeniu kontekstu gdy sterowanie wróci do wywłaszczonego procesu p,
lokalna zmienna prev będzie wskazywać proces, który został wywłaszczony, aby proces
p mógł dostać znowu procesor. Jest to zapewnione przez makro switch_to(prev, next, last).
Zostaje wykonana funkcja __schedule_tail(prev), która spróbuje przydzielić wywłaszczonemu
procesowi inny procesor.
/* prev - to proces który do tej pory działał
(oznaczmy go przez p1)
next - proces, który za chwilę odbierze
procesor procesowi p1 (oznaczmy go przez p2) */
switch_to(prev, next, prev);
/* teraz jesteśmy z powrotem w procesie p1,
ale prev nie wskazuje teraz ani na p1, ani na p2,
ale na proces, który działał przed chwilą, zanim p1
otrzymał znowu procesor */
__schedule_tail(prev);
Ignacy Kowalczyk
2001-11-16