2.2.3 Планировщик

Предыдущая  Содержание  Следующая V*D*V

Планировщик Linux обеспечивает многозадачность и развивается от версии к версии ядра с целью обеспечения детерминированной политики планирования. Прежде чем углубляться в историю улучшений планировщика, давайте разберёмся в примерах выполнения, которые понятны планировщику.

 

Потоки ядра: это процессы, которые не имеют пользовательского контекста. Они выполняются в пространстве ядра до тех пор, пока работают.

Пользовательский процесс: благодаря виртуальной памяти, каждый пользовательский процесс имеет своё собственное адресное пространство. Они входят в режим ядра, когда выполняется прерывание, исключение или системный вызов. Обратите внимание, что когда процесс входит в режим ядра, он использует совершенно другой стек. Он называется стеком ядра и каждый процесс имеет свой собственный стек ядра.

Пользовательские потоки: потоки представляют собой различные исполняющиеся объекты, которые сопоставляются с одним пользовательским процессом. Потоки пользовательского пространства имеют общее пространство текста, данных и "кучи". Они имеют отдельные адреса стека. Другие ресурсы, такие как открытые файлы и обработчики сигналов, также общие для всех потоков.

 

Поскольку Linux стал популярен, спрос на поддержку приложений реального времени увеличился. В результате планировщик Linux постоянно улучшался, так что его политика планирования стала детерминированной. Ниже приведены некоторые из важных вех в эволюции ядра Linux в отношении возможностей реального времени.

 

Начнём с ядра версии 1.3.55, где была поддержка кругового планирования и планирования на основе FIFO наряду с классическим планировщиком Linux с разделением времени. Также оно имело возможность отключения подкачки для отдельных областей памяти приложения; это называется блокировкой памяти (поскольку запрос подкачки делает систему недетерминированной).

Ядро версии 2.0 предоставило новую функцию nanosleep(), которая позволила процессу спать или выполнять задержку в течение очень короткого времени. До этого минимальное время составляло около 10 мс; с nanosleep() процесс может спать от нескольких микросекунд до нескольких миллисекунд.

Ядро версии 2.2 имело поддержку сигналов реального времени POSIX.

Ядра серии 2.4 получили много улучшений в области планирования в режиме реального времени. Самым главным был патч MontaVista для вытеснения ядра и патч низкой латентностью Эндрю Мортона. Это в конечном счёте привело к ядру версии 2.6.

Ядро версии 2.6 имеет совершенно новый планировщик, называемый планировщиком O(1), который приносит детерминизм в политику планирования. Также стало больше функций реального времени, таких как таймеры POSIX, добавленные в ядро версии 2.6.

 

Политики режима реального времени Linux более подробно обсуждаются в Главе 7.

 

Предыдущая  Содержание  Следующая