The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

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

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.

 

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