индивидуум дает очень хороший ответ, но он только частично точен.
Фактическая работа системы немного сложнее.
Планировщик может быть выполнен в результате синхронных или асинхронных операций.
Синхронный относится к операциям, которые вызваны в результате кода в текущей выполняемой задаче. Главный пример этого - взять семафор (semTake).
Если семафор недоступен, выполняемое в настоящий момент задание будет отложено и больше не будет доступно для выполнения. На этом этапе планировщик будет вызван и определит следующую задачу, которая должна быть выполнена и будет выполнять переключение контекста.
Асинхронные операции по существу относятся к прерываниям. Прерывания по таймеру были очень хорошо описаны индивидом. Тем не менее, ряд различных элементов может привести к выполнению прерывания: сетевой трафик, датчик, последовательные данные и т. Д. *
Также хорошо помнить, что прерывание по таймеру не обязательно вызывает переключение контекста! Да, прерывание произойдет, и отложенная задача и счетчики временных интервалов будут уменьшены. Однако, если временной интервал не истек или приоритетная задача выше не переходит из отложенного состояния в состояние готовности, то планировщик фактически не будет вызываться, и вы вернетесь к исходной задаче в точная точка, где исполнение было прервано.
Обратите внимание, что у планировщика нет собственного контекста; это не задача. Это просто код, который выполняется в любом контексте, из которого он вызывается. Либо из контекста прерывания (асинхронного), либо из контекста вызывающей задачи (синхронно).