next up previous contents
Next: Funkcja __schedule_tail() Up: Rozszerzenie dla obsługi wielu Previous: Struktury danych   Spis rzeczy

Funkcja schedule()

Funkcja schedule() zawiera nastepujące zmiany w systemie z wieloma procesorami:

  1. Musi aktualizować dane związane z obsługą wieloprocesorowości, tzn. processor i has_cpu w deksryptorach procesów, oraz tablice aligned_data
  2. 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).
  3. 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