Ю. Вахалия - UNIX изнутри (2003) (1114670), страница 53
Текст из файла (страница 53)
Благодаря этой особенности сокращается общее число переключений контекста, что прямо сказывается на равновесии в использовании системы. Текущая нить может быть вытеснена, если более высокоприоритетная нить станет готовой к выполнению, даже если квант текущей нити не был до конца выработан. В системе МасЬ поддерживается автпоматическое планирование (Ьапдой зсЬедц!1пя), посредством которого нить может напрямую передавать процессор другой нити без поиска очередей выполнения. Подсистема межпроцессного взаимодействия (1РС) использует эту технологию для передачи сообщений: если нить уже находится в режиме ожидания сообщения, посылающая нить передает ей процессор непосредственно.
Такой подход увеличивает производительность работы вызовов 1РС. 5.7.1. Поддержка нескольких процессоров Как уже говорилось, система МасЬ функционирует на самых различных аппаратных архитектурах, от небольших персональных компьютеров до машин, имеющих сотни процессоров. Планировщик системы обладает несколькими средствами, позволяющими эффективно управлять процессорами системы. Для вытеснения в МасЬ не применяются межпроцессорные прерывания. Предположим, что некоторое событие на одном из процессоров привело к появлению готовой к выполнению нити, имеющей приоритет больший, чеи у другой нити, выполняющейся на другом процессоре. Нить с меньшим приоритетом не будет вытеснена до тех пор, пока другой процессор обрабатыва- 5.7.
Планирование в системе Масс 226 ет прерывание таймера или иное событие, относящееся к планированию. Отсутствие межпроцессорного вытеснения не оказывает отрицательного влияния на режим разделения времени, но оно, тем не менее, может сказываться на эффективности реакции системы по отношению к приложениям реального времени.
Система Масп позволяет пользователям управлять выделением процессоров различным задачам путем создания наборов процессоров, каждый из которых может содержать О и более процессоров. Каждый процессор относится к одному из таких наборов, и он также может быть перемещен из одного набора в другой. Каждой задаче или нити назначается определенный набор процессоров, который может быть изменен в любой момент времени. Однако такой возможностью обладают только привилегированные задачи, которым разрешается назначать процессоры, задачи и нити наборам процессоров. Нить может выполняться па одном из процессоров из выделенного ей набора. Назначение задачи набору процессо1юв делает его назначаемым по умолчанию всем новым нитям этой задачи.
Задача наследует набор от своего предка, а первоначальной зидаче (1пй|а! гази) предоставляется набор процессоров, принятый по умолчанию. Исходно такой набор состоит из всех процессоров системы, и на этом наборе выполняются внутренние нити ядра и демоны. О1 Рис. 5.12. Выделение процессоров в Масл Выделение процессоров может быть выполнено при помощи программы-сервера прикладного уровня (выполняющейся как привилегированное задание), которая и определяет политику присвоения. На рис. 5.12 показана типичная схема взаимодействий между приложением, сервером и ядром.
Приложение выделяет набор процессоров всем своим нитям. Сервер назначает процессоры для этого набора. Последовательность действий при этом описана ниже. 1. Приложение запрашивает ядро о выделении для себя набора процес- соров. 2. Приложение запрашивает сервер о процессорах для этого набора.
3. Сервер запрашивает ядро о назначении процессоров набору. 4. Сервер отвечает приложению, подтверждая, что процессоры были вы- делены. 226 Глава 5. Планирование процессов 5. Приложение запрашивает ядро о назначении своих нитей этому набору. 6. Приложение использует процессоры и уведомляет сервер, когда завершает свою работу, 7. Сервер переназначает процессоры. Такой подход позволяет добиться потрясающей гибкости в управлении процессорами, особенно для массивно-параллельных систем с большим количеством процессоров. Например, существует возможность назначить их некоторое количество одной задаче или группе задач, гарантируя тем самым предоставление им части доступных ресурсов независимо от общей загруженности системы. В крайних случаях приложение может добиваться выделения по одному процессору для каждой своей нити. Такой подход называется групповым тшинировинием (йапй зс11ег1ц11пя).
Применение группового планирования удобно для приложений, требующих барьерной сияхрояизиции. Такие приложения создают несколько нитей, которые функционируют независимо друг от друга до достижения некой точки синхронизации, называемой барьером. Каждая нить, достигнувшая барьера, должна ожидать, пока к нему приблизятся остальные. После того как все нити сведут свою работу к этой точке, приложение может запустить некоторый однонитевый код и затем создать другой набор нитей, повторяющих действия предыдущего набора. Для того чтобы подобные приложения функционировали оптимально, задержки при достижении барьера должны быть минимальными.
Это требует, чтобы все нити достигали барьера примерно в одно и то же время. Групповое планирование позволяет приложению запустить нити одновременно, предоставив каждой из них отдельный процессор. Описанный подход сводит к минимуму задержки при достижении барьера. Групповое планирование также подходит для мелкомодульных приложений, нити которых часто взаимодействуют между собой. В таких приложениях вытеснение одной из нитей способно привести к блокированию других нитей, требующих взаимодействия с ней. Недостатком предоставления каждой нити отдельного процессора является то, что при блокировании нити процессор не может быть использован. Процессоры системы могут быть неодинаковыми.
Некоторые из них могут оказаться более быстрыми, чем другие, некоторые могут содержать блок вычислений с плавающей точкой и т. д. Возможность составления процессоров в наборы позволяет использовать определенные процессоры для выполнения свойственной им задачи. Например, процессоры с блоком вычислений с плавающей точкой логично назначать только нитям, которым необходима максимальная производительность при работе с вещественными числами. Кроме всего перечисленного, нить может быть временно ограничена определенным процессором. Такая возможность поддерживается, в первую очередь, для совместимости части кода системы Мас11 с 13Х1Х в области непа- 5.8.
Планировщик реального времени О!0йа! 0Ьйх 227 раллельиой (небезопасной в многопроцессорной системе) обработки. Эта часть кода выполняется иа одном процессоре, называемом главным процессором (тазгег ргосеззог). Каждый процессор имеет локальную очередь выполнения, а каждый набор — глобальную, используемую совместно всеми процессорами набора. Сначала процессоры проверяют свои локальные очереди, отдавая таким образом предпочтение ограниченным данным процессором нитям (или неограниченным использованием данного процессора нитям, обладающим высокими приоритетами).
Такое решение привнесло максимальную производительность для непараллельного кода 1)ЪПХ, защищая от эффекта «бутылочного горлышка». 5.8. Планировщик реального времени О!9йа! 0М!Х Планировщик операционной системы И81га1 Т)ЪЛХ поддерживает приложения, выполняющиеся как в режиме разделения времени, так и в режиме реального времени 151. Ои совместим с интерфейсом РОБ1Х 1003.1Ъ |81, определяющим программное расширение реального времени.
Несмотря иа факт, что ГЭ181га! 1)Ъ11Х произошла от ОС Маей, ее планировщик был полностью переработан. Ои поддерживает следующие классы планирования: + 5НЕ0 ОТНЕК, или класс разделения времени. + 5НЕ0 Е1ГО, или класс РТРО («первым вошел, первым вышел»). + 5НЕ0 кй, или класс карусельного обслуживания. Для установки класса планирования и приоритета процесса приложение может вызвать зсйеб зе1зсйедп!ег.
По умолчанию используется класс разделения времени, в ко~ором приоритеты изменяются динамически иа основе величины любезности и уровня использования процессора. Оставшиеся два класса используют постоянные приоритеты. Процессы, задействующие политику класса 5НЕ0 ЕТЕО, ие имеют определенного кванта времени и выполняются до тех пор, пока сами ие освободят процессор или ие будут вытеснены более высокоприоритетным процессом. Классам разделения времени и карусельного обслуживания определен квант времени, который влияет иа диспетчеризацию процессов, обладающих одинаковым приоритетом.
Когда процессы, принадлежащие какому-либо из этих двух классов, исчерпывают выделенный им квант, оии помещаются в конец списка процессов того же приоритета. В случае отсутствия готовых к выполнению процессов, обладающих одинаковым или более высоким приоритетом по сравнению с текущим, процесс будет продолжать свою работу. Планировщик всегда выбирает для выполнения наиболее высокоприоритетный процесс. Каждый процесс имеет приоритет в диапазоне 0-63, где меньшие числа соответствуют меньшим приоритетам.
Планировщик для каждого 228 Глава 5. Планирование процессов приоритета содержит упорядоченную очередь и выбирает процесс из начала наивысшей непустой очереди. Когда блокированный процесс становится готовым к выполнению или текущий процесс освобождает процессор, то такие процессы обычно помещаются в конец очереди своего приоритета. Исключительным случаем является вытеснение процесса до того, как он исчерпает выделенный ему квант времени. В этом случае процесс возврашается в начало своей очереди, что позволяет ему завершить использование кванта времени до того, как начнут свое выполнение другие процессы, обладающие тем же приоритетом.
Приоритеты подразделяются на три перекрывающихся класса, которые позволяют увеличить гибкость. Назначение приоритетов процессам регулируется следующими правилами: + Процессы класса разделения времени имеют приоритеты в диапазоне от 0 до 29. Для увеличения приоритетов выше 19 требуются привилегии суперпользователя. + Пользователи управляют приоритетами процессов класса разделения времени посредством изменения величины их «любезности».
Значение величины «любезности» находится в диапазоне от — 20 до +20, где меньшие числа указывают на более высокий приоритет 1для обратной совместимости). Отрицательные величины, соответствуюшие приоритетам лиапазона 20-29, может задавать только суперпользователь системы. + Фактор использования процессора уменьшает приоритеты процессов класса разделения времени в зависимости от полученного ими количества процессорного времени.
+ Системные процессы обладают фиксированными приоритетами в диапазоне 20-31. + Процессам с фиксированными приоритетами может быть назначен любой приоритет в диапазоне 0-63. Однако для назначения приоритетов выше 19 требуются привилегии суперпользователя. Процессы реального времени имеют приоритеты в диапазоне от 32 до 63, поскольку системные процессы не должны их вытеснять. Вызов зспео зеграгап~ применяется для изменения приоритетов процессов классов Е1ЕО и карусельного обслуживания. Вызов зспео у1еЫ перемещаег вызвавший его процесс в конец очереди его приоритета, что эквивалентно освобождению процессора для любого готового к выгюлнению процесса, обладающего тем же приоритетом.
Если таких процессов не обнаружено, процесс, вызывавший зс6ео у1еЫ, продолжит выполнение. 5.8.1. Поддержка нескольких процессоров Система Е11611а! УХ1Х позволяет эффективно использовать такое свойство систем, как многопроцессорность, посредством настройки своего планировщика для оптимизации переключений контекста н использования каша 16]. 5.9.