next up previous contents
Next: Opóźnione wywoływanie w funkcji Up: Wywoływanie funkcji schedule() Previous: Wartość pola state   Spis rzeczy

Opóźnione wywołanie schedule() (przez flagę need_resched)

Opóźnione wywołanie polega na ustawieniu pola need_resched w deskryptorze aktualnego procesu. Wywołanie schedule() napewno nastąpi jeszcze przed powrotem aktualnego procesu do trybu użytkownika. Zapewnia to następujący kawałek kodu assemblerowego (wycięty z pliku arch/i386/kernel/entry.S wywoływanego przy powrocie z wywołan systemowych, przerwań i wyjątków:

ENTRY(ret_from_sys_call)
  cli				# need_resched and signals atomic test
  cmpl $0,need_resched(%ebx)	# ebx zawiera adres deskryptora procesu
  jne reschedule
  cmpl $0,sigpending(%ebx)
  jne signal_return
  ...
reschedule:
  call SYMBOL_NAME(schedule)    # test
  jmp ret_from_sys_call
 ...

Opóźnione wywołanie występuje w następujących sytuacjach:



Subsections

Ignacy Kowalczyk 2001-11-16