ОС осуществляет планирование потоков в соответствии с их состоянием
Поток может находиться в одном из 3 основных состояний (есть еще и промежуточные)
1) Выполнение ( поток юзает процессор)
2) Готовность ( поток мог бы выполняться, но проц занят)
3) Ожидание или блокировка (потоку что-то надо: ждет данные, операцию ввода вывода или еще чего);
Переход из одного состояния в другое осуществляется в соотсветствии с алгоритмом планирования конкретной ОС.
Итак.
- Поток создан – в состоянии готовности, ждет очереди на выполнение.
- Поток выбран на выполнение – выполняется, пока сам не отдаст проц, или пока квант времени не истечет
- Потом – снова в готовность.
- Потоку понадобилась инфа – он идет в ожидание.
- Поток получил нужную инфу – он идет в готовность и в очередь.
Существует переходное состояние ПЕРВООЧЕРЕДНОЙ ГОТОВНОСТИ – когда поток готов получить ресурсы (между блокировкой и готовностью).
В состоянии выполнения может находиться только 1 поток (в однопроцессорной системе);
|
|
В ожидании и готовности – много. Тут процессы образуют очереди, организованные в виде однонаправленного списка. Это позволяет легко их переупорядочивать при необходимости.
Планирование и диспетчеризация потоков
От планирования потоков зависит эффективность работы системы. Критерии эффективности бывают разные (см. выше).
В самом общем случае алгоритмы планирования можно разделить
По степени централизации механизма планирования на:
- вытесняющие (preemptive) – поток выполняется, пока сам не решит отдать процессор другому
Есть плюсы:
- исключаются нерациональные прерывания программ в неудобное время
- нет проблем совместного использования данных
- более высокая скорость работы (не надо переключаться туда-сюда)
Но больше минусов
- неудобно для пользователя
- головная боль для программиста (ему нужно решать вопросы планирования, он должен быть очень высококвалифицированным)
Пример – файл-серверы NetWare
- невытесняющие (non-preeemptive) – решение о переключении процессора принимает ОС. Так работает большинство современных ОС, особенно пользовательских.
Невытесняющие алгоритмы планирования:
А) FIFO (First in first out) || FCFS (First come first served);
- Справедливо
- Просто
Но есть convoy effect – короткие процессы, выполняемые после длинных, увеличивают общее время ожидания.