Ответ 1
Планировщик запланирован на
- (внешнее) событие, такое как прерывание, (сделанный диск, щелчок мышью, таймер)
- или внутреннее событие (например, завершение потока, сигнализация потоком, что ему нужно что-то ждать, или сигнализация потока, который он выпустил ресурс, или ловушка, вызванная потоком, выполняющим что-то незаконное, как деление на ноль)
Короче говоря, это инициируется любым событием, которое может потребовать повторной оценки набора задач и/или приоритетов этих задач. Планировщик решает, какие задачи выполняются дальше, и передает управление следующей задаче.
Как правило, это "планирование" планировщика вызвано кодом, связанным с аппаратным прерыванием или кодом, связанным с системным вызовом.
Пока вы можете думать о том, что планировщик является реальным потоком, на практике его не нужно реализовывать таким образом... потому что он выполняется с более высоким приоритетом, чем любая другая задача. Сложные ОС могут фактически выделить специальный поток, который является планировщиком, и пометить его занятым, когда диспетчер получает контроль. Это делает его довольно, но фиктивный поток не запланирован планировщиком
Можно иметь несколько планировщиков: самый высокий приоритет (например, тот, который мы только что описали), и другие планировщики, которые действительно являются потоками, и выполняются как другие пользовательские задачи. Такие планировщики с меньшим приоритетом, как правило, используются для управления действиями, которые происходят с гораздо большими интервалами, например фоновые задания.