Ю. Вахалия - UNIX изнутри (2003) (1114670), страница 50
Текст из файла (страница 50)
Это оказалось весьма сложным предприятием, поскольку программа, принимающая клавиатурный ввод, и программа для просмотра видео требовали взаимодействия с Х-эегчег. 212 Глава 5. Планирование процессов Для решения этой задачи авторы книги изменяли приоритеты и классы планирования всех четырех процессов (трех приложений и Х-зегчег). Выяснилось, что найти комбинацию параметров, обеспечивающих приемлемое протекание работы всех приложений очень трудно. Например, вполне логичным решением представляется размещение в классе реального времени только программы воспроизведения видео. На деле же оказалось, что даже программа работы с видео не может нормально функционировать.
Вся проблема заключалась в Х-зегчег, который не получал достаточного количества процессорного времени. Тогда авторы разместили в классе реального времени еще и Х-зегчег, в результате чего они добились нормальной скорости воспроизведения видео (после корректного подбора относительных приоритетов), но при этом функционирование интерактивного приложения и пакетного задания застопорилось, а система перестала отвечать на нажатия клавиш и движения мыши. Возможно, что после длительных экспериментов есть шансы подобрать правильное сочетание приоритетов для данного набора приложений. Однако эти установки будут работать корректно только при использовании именно этого набора программ.
В реальности же загрузка системы меняется постоянно, а подстраивать ее вручную при старте каждого нового приложения просто неразумно. 5.6. Расширенные возможности планирования системы Зо!апв 2.х В системе Бо1аг!з 2.х были расширены возможности архитектуры планирования БЧК4 сразу в нескольких направлениях 19!. Бо1аг!з является многонитевой, симметрично многопроцессорной операционной системой, следовательно, ее планировщик должен поддерживать все эти особенности. Кроме этого разработчики произвели оптимизацию системы в целях уменьшения задержек обслуживания планировщиком для высокоприоритетных, критичных ко времени процессов. В результате получился планировщик, более пригодный для приложений реального времени.
5.6.1. Вытесняющее ядро Точки вытеснения в ядре БЧК4 являются наилучшим компромиссным решением, позволяющим ограничить задержки, что требуется для процессов реального времени. Ядро системы Бо!аг!з 2х является полностью вытесняющим, что позволяет гарантировать быстроту его реакции. Это явилось радикальным изменением ядра (ЛЧ1Х и имело далеко идущие последствия. Большинство глобальных структур ядра необходимо защищать при помощи соответствующих объектов синхронизации, таких как семафоры или взаимные исключения (шцгпа! ехс1пз1оп !осЬ, шцгех).
Сделать ядро вьггесняющим — очень сложная 5.6. Расширенные возможности планирования системы 8о!апз 2.х 213 5.6.2. Многопроцессорная поддержка Система поддерживает единую очередь диспетчеризации для всех процессоров. Тем не менее некоторые нити (например, нити прерываний) могут быть ограничены выполнением только на одном, определенном процессоре.
Процессоры могут взаимодействовать друг с другом при помощи отправки мезгслроцессорных прерываний. Каждый процессор обладает следующим набором переменных планирования: срв спгеао срп ойрСЬгеао срв гп!е текущая нить, выполняемая на этом процессоре нить, выбранная последней для запуска нить холостой работы флаг вытеснения, используемый нитями класса разделения времени флаг вытеснения, устанавливаемый нитями класса реального времени срп гппщп срв !гргопгпп срв сботеп !ече! Приоритет нити, собирающейся вытеснить текущую нить Планирование в многопроцессорных средах показано на рис. 5.6.
Событие на процессоре П1 делает пить Нб (с приоритетом 130) готовой к выполнению. Ядро помещает Нб в очередь отправки на выполнение и вызывает процедуру сро своозеО для нахождения процессора, на котором выполняется нить, имеющая наименьший приоритет (в данном случае это — ПЗ). Так как приоритет найденной нити окажется меньше, чем у Нб, процедура срц сйоозе() пометит процессор, на котором эта нить выполняется, для вытеснения, установит его значение переменной сро с!говел (ече! равным приоритету Нб (130) и пошлет ему межпроцессорное прерывание.
Предположим, что в это время, то есть до того как процессор ПЗ обработает прерывание и вытеснит нить НЗ, другой задача, однако решение этой проблемы является необходимым требованием для многопроцессорных операционных систем. Другим подобным изменением в системе $о(аг)з 2х является реализация прерываний при помощи специальных нитей ядра, использующих стандартные средства синхронизации ядра и блокирующихся в ожидании ресурсов, если это необходимо (см.
раздел 3.6.5). В результате в системе нечасто требуется повышать уровень прерываний для защиты критичных участков кода и она имеет лишь несколько невытесняемых сегментов кода. Таким образом, высокоприоритетные процессы могут быть назначены на выполнение сразу после того, как они станут готовыми к выполнению. Нити прерываний всегда выполняются в системе с наивысшими приоритетами. ОС 5о!аг)з позволяет динамически загружать классы планирования. При этом приоритеты нитей прерываний пересчитываются для гарантии того, что они останутся с самыми высокими значениями. Если пити прерывания необходимо блокироваться в ожидании ресурса, то возобновить функционирование она сможет только на том же самом процессоре.
214 Глава 5. Планирование процессов пт П2 пз П4 Пб Вытесняется Пт П2 пз П4 срс слосеп 1ече1 130 Пб Выполняется на ПЗ б Рис. 5.6. Многопроцессорное планирование в системе Зо!апе 2.х: а — начальное состояние; б — после того как Нб и п7 станут готовы к выполнению Существуют определенные ситуации, когда низкоприоритетная нить может заблокировать более высокоприоритетную нить на длительный период времени.
Причиной возникновения подобных ситуаций является либо скры- процессор, например П2, обрабатывает событие, которое сделает нить Н7 с приоритетом 115 готовой к выполнению. Теперь процедура сро с11оозе() проверит значение срц спозеп (ече( процессора ПЗ и обнаружит его равным 130. Это приведет к тому, что процедура выявит, что на данном процессоре выполняется нить с более высоким приоритетом. Следовательно, процедура срц споозеО оставит НУ в очереди отправки на выполнение, предупреждая конфликт, 5.6. Расширенные возможности планирования системы Зо!апз 2.х 215 тое планирование, либо ивверсия приоритетов. В системе Бо1апз устранены подобные проблемы.
Как это сделано, описано в следующих разделах главы. 5.6.3. Скрытое планирование Ядро системы часто совершает некоторые действия асинхронно от имени нити. Ядро планирует эту работу без учета приоритета нити, для которой ее выполняет. Это называется скрытьаи планироеанием. Примерами таких действий ядра являются процедуры обслуживания 5ТКЕАМ5 (см.
раздел 17.4) и отложенные вызовы. В операционной системе 5УК4, например, перед каждым возвратом процесса в режим задачи ядро вызывает процедуру гопсоепезО для проверки существования ожидающих запросов на обслуживание. Если таковые существуют, то ядро обрабатывает эти запросы при помощи вызова процедуры зеппсе соответствующего модуля БТКЕАМ5. Таким образом, подобные запросы обслуживаются текущим пооцессом (тем самым, который собирается возвратиться в режим задачи), хотя они относятся к совсем другим процессам.
Если приоритет процесса, от чьего имени был сделан запрос, ниже, чем у текущего, запрос будет обработан с неверным приоритетом. В результате нормальная работа текущего процесса прерывается выполнением низкоприоритетной задачи. В 5о1аг1з эта проблема решается посредством перевода функционирования 5ТКЕАМБ на уровень нитей ядра, которые всегда обладают приоритетом меньшим, чем у нитей режима реального времени. Однако такое решение порождает новую проблему: некоторые запросы БТКЕАМ5 могут быть инициированы нитями реального времени. Поскольку эти запросы также обслуживаются нитями ядра, они обрабатываются с более низким приоритетом, чем должны. Эта проблема не решается без кардинальных изменений в семантике обработки нитей и остается возможным препятствием для функционирования режима реального времени на требуемом уровне.
Также существует проблема, связанная с обработкой отложенных вызовов (см. раздел 5.2.1). В системе 131ч1Х все отложенные вызовы обслуживаются с самым низким уровнем приоритета прерываний, являющимся, однако, выше любого приоритета реального времени. Если такой вызов будет произведен низкоприоритетной нитью, то его обслуживание может задержать постановку на выполнение высокоприоритетной нити. Измерения производительности, проводимые на ранних версиях 5ппОБ, показали, что для обработки очереди отложенных вызовов система способна потратить до 5 миллисекунд.