Диспетчер
Когда поток готов к выполнению, он помещается в очередь отправки на выполнение. Каждый процессор (в многопроцессорной системе) имеет отдельный набор очередей отправки. Состояние ожидания в очереди отправки называется состоянием выполнения (RUN). Когда процессор освобождается, диспетчер берет поток с наивысшим приоритетом из очереди отправки этого процессора и помещает его в процессор. Теперь поток в состоянии "внутри процессора" (ONPROC) и может выполнять вычисления.
Поток может лишиться процессорного времени и покинуть процессор по нескольким причинам:
- поток занимает процессор, пока не закончится отведенный ему период времени (определяемый приоритетом потока). Такой период называется квантом. Поскольку процессы с большим приоритетом выбираются чаще, то квант обычно обратно пропорционален приоритету (процессы с более высоким приоритетом имеют меньшие кванты). Когда квант исчерпан, потоку присваивается приоритет нового уровня (значение tqexp). Такой уровень почти всегда ниже приоритета потока при старте. Это сделано для обеспечения справедливости при планировании;
- поток ждет завершения ввода-вывода или разблокировки нужного ему ресурса, тогда он переходит в состояние "сна" (SLEEP). Проснувшимся потокам назначается более высокий приоритет, чем у них был до сна, чтобы они могли "наверстать упущенное";
- ядро прервало поток; если прерванный поток долго ожидает внимания процессора, то его приоритет повышается до значения lwait. Так потоки компенсируют ожидание в очереди после прерывания.