Планировщик ядра запускается в следующих случаях:
- после разблокировки процесса;
- по истечении временного кванта для выполняющегося процесса;
- после выгрузки выполняющегося процесса.
В системе QNX каждому процессу присваивается приоритет. Планировщик выбирает для выполнения процессы, находящиеся в состоянии ГОТОВ, в соответствии с их приоритетами. (Центральный процессор может использовать только процесс, находящийся в состоянии ГОТОВ.) Для выполнения выбирается процесс, имеющий наивысший приоритет.
Процессам присваиваются приоритеты в диапазоне от 0 (низший) до 31 (высший). По умолчанию процесс наследует приоритет от породившего его процесса; обычно он равен 10 для приложений, запускаемых из интерпретатора Shell.
Методы планирования
Для удовлетворения потребностей разных приложений в системе QNX реализованы три метода планирования:
- планирование по принципу простой очереди (первым пришел - первым обслужен);
- круговой метод планирования;
- адаптивное планирование.
Каждый процесс в системе может выполняться, используя любой из этих методов. Они эффективны применительно к одному процессу, а не ко всем процессам на узле.
Запомните, что данные методы планирования используются только тогда, когда два или более процессов, разделяющих один и тот же приоритет, находятся в состоянии ГОТОВ (т.е. процессы непосредственно конкурируют друг с другом). Если в состояние ГОТОВ переходит процесс, имеющий более высокий приоритет, он немедленно выгружает все процессы с меньшим приоритетом.
При планировании по принципу простой очереди процесс, выбранный для выполнения, продолжает работать до тех пор, пока он:
- не передаст управление сам (например, блокируется);
- не будет снят с выполнения (выгружен из памяти) процессом с более высоким приоритетом.
При круговом методе планирования процесс, выбранный для выполнения, продолжает работать до тех пор, пока он:
- не передаст управления сам;
- не будет снят с выполнения (выгружен из памяти) процессом с более высоким приоритетом;
- не истечет его квант времени (timeslice).
При адаптивном планировании процесс ведет себя следующим образом:
- по истечении кванта времени (при условии, что процесс не блокировался), его приоритет уменьшается на 1, если другой процесс с таким же приоритетом находится в состоянии ГОТОВ. Это называется понижением приоритета;
- если процесс с пониженным приоритетом не выполняется в течение одной секунды, его приоритет повышается на 1 (процесс никогда не может повысить приоритет выше начального);
- если процесс блокируется, ему немедленно возвращается начальный приоритет.