
- •Глава 10
- •10.1. Многопроцессорное планирование
- •Назначение процессов процессорам
- •10.2. Планирование реального времени
- •10.3 Планирование в linux
- •10.4. Планирование в unix svr4
- •10.5. Планирование windows 2000
- •Многопроцессорное планирование
- •10.6. Резюме, ключевые термины и контрольные вопросы
- •10.7. Рекомендуемая литература
- •10.8. Задачи
Глава 10
Многопроцессорное планирование и планирование реального времени
10.1. Многопроцессорное планирование
10.2. Планирование реального времени
10.3. Планирование в Linux
10.4. Планирование в UNIX SVR4
10.5. Планирование Windows 2000
10.6. Резюме, ключевые термины и контрольные вопросы
10.7. Рекомендуемая литература
10.8. Задачи
В этой главе мы продолжим рассмотрение планирования процессов. Начнем с изучения вопросов, возникающих при наличии в системе нескольких процессоров, после чего во втором разделе главы познакомимся с планированием реального времени.
10.1. Многопроцессорное планирование
Если вычислительная система содержит более одного процессора, при разработке планирования встают дополнительные вопросы. Начнем с краткого обзора многопроцессорности и разницы в планировании на уровне процессов и на уровне потоков.
Многопроцессорные системы можно классифицировать следующим образом.
• Слабосвязанные системы, или кластеры. Состоят из набора относительно автономных систем; каждый процессор имеет собственную основную память и каналы ввода-вывода. Этот тип систем будет рассмотрен в главе 13, "Распределенные вычисления, архитектура клиент/сервер и кластеры".
• Функционально специализированные процессоры. В качестве примера можно привести процессор ввода-вывода. В такой ситуации у 'нас имеется ведущий процессор общего назначения; специализированные процессоры, предоставляющие ему свои услуги, являются ведомыми, управляемыми ведущим процессором. Вопросы, связанные с процессорами ввода-вывода, будут затронуты в главе 11, "Управление вводом-выводом и дисковое планирование".
• Сильносвязанные системы. Состоят из множества процессоров, совместно использующих общую основную память и находящихся под общим управлением операционной системы.
Материал, изложенный в данной главе, касается последней категории многопроцессорных систем, а еще точнее — вопросов планирования в таких системах.
Зернистость
Неплохой характеристикой многопроцессорной системы может служить зернистость синхронизации (synchronization granularity), которая представляет собой частоту синхронизации между процессорами в системе. Мы будем различать пять типов параллельных вычислений по степени их зернистости (табл. 10.1, построенная на материалах [GEHR87, WOOD89]).
Таблица 10.1. Зернистость синхронизации
Размер зерна
|
Описание
|
Интервал синхронизации, команды
|
Малый
|
Параллельные вычисления на уровне отдельных команд
|
<20
|
Средний
|
Параллельные вычисления или многозадачность в пределах одного приложения
|
20-200
|
Большой
|
Многозадачность на уровне процессов в многозадачной среде
|
200 - 2000
|
Очень большой
Независимые процессы
|
Распределенная работа в сети для формирования единой вычислительной среды
Не связанные друг с другом процессы
|
2000 - 1М
-- |
Независимые процессы
Между независимыми процессами явной синхронизации нет. Каждый из них представляет собой отдельное, независимое приложение или задание. Использование такого типа параллельных вычислений характерно для систем с разделением времени. Каждый пользователь работает со своим приложением, таким, как текстовый редактор или система программирования, а многопроцессорная система обеспечивает для них тот же сервис, что и многозадачный режим в системе с одним процессором. Поскольку при этом доступно несколько процессоров, среднее время отклика будет меньше, чем в системе с одним процессором.
Тот же эффект можно получить и при предоставлении каждому конечному пользователю персонального компьютера или рабочей станции. Если пользователи совместно используют какие-то файлы или другую информацию, индивидуальные системы должны быть объединены в распределенную систему, поддерживаемую с помощью сети. Такой подход рассматривается в главе 13, "Распределенные вычисления, архитектура клиент/сервер и кластеры". С другой стороны, по многим параметрам с точки зрения стоимости единая многопроцессорная система по сравнению с распределенной получается более эффективной, позволяя, например, сэкономить на дисках и других периферийных устройствах.
Большая и очень большая зернистость
В этом случае между процессами наблюдается синхронизация, хотя и весьма редкая. Такую ситуацию можно трактовать как множество параллельно выполняющихся процессов, которые работают в многозадачном режиме на одном процессоре и с минимальным изменением программного обеспечения (или вовсе без изменений) могут поддерживаться многопроцессорной системой.
Простой пример приложения, способного использовать наличие нескольких процессоров, приведен в [WOOD89]. Авторы разработали программу, которая получает список файлов, требующих перекомпиляции, и определяет, какие из них могут компилироваться одновременно (обычно это все файлы). Затем программа запускает по одному процессу для компиляции каждого файла параллельно с другими. Авторы сообщают, что ускорение в многопроцессорной системе превысило ожидаемое (рассчитанное на основе простого добавления процессоров), что связано с совместным использованием дисковых кэшей (об этом подробнее рассказывается в главе 11, "Управление вводом-выводом и дисковое планирование") и кода компилятора, который загружается в основную память только один раз.
Вообще говоря, от использования многопроцессорной архитектуры выигрывает любое множество параллельно выполняющихся процессов, для которых требуется синхронизация или обмен информацией. При очень редком взаимодействии процессов целесообразнее использовать распределенную систему, но при более частом взаимодействии накладные расходы по передаче информации по сети могут привести к снижению производительности, и в этом случае более эффективным решением будет использование многопроцессорной системы.
Средняя зернистость
В главе 4, "Потоки, симметричная мультипроцессорная обработка и микроядра", рассказывалось, что единое приложение может быть эффективно реализовано в виде множества потоков в пределах одного процесса. В этом случае потенциальная параллельность приложения должна быть явно указана программистом. Обычно между потоками одного приложения требуется более высокая степень координации и взаимодействия, чем между различными процессами, что и приводит к среднему уровню синхронизации.
В то время как параллельность независимых процессов, а также процессов с большим и очень большим зерном может поддерживаться как многозадачной системой с одним процессором, так и многопроцессорной системой с минимальным влиянием стратегии планирования, при работе многопоточных приложений планирование становится важной задачей, требующей пересмотра с учетом новых требований. В силу частого взаимодействия потоков одного приложения правильное решение о планировании одного потока может существенно повлиять на производительность приложения в целом. Позже мы вернемся к этому вопросу.
Малая зернистость
Малая зернистость представляет более сложное использование возможностей параллельных вычислений, чем использование потоков. Это специализированная область, в которой используется множество различных методов работы. Неплохой обзор по данной тематике вы найдете в [ALMA89].
Вопросы разработки
Планирование в многопроцессорной системе включает три взаимосвязанных вопроса:
назначение процессов процессорам;
использование многозадачности на отдельном процессоре;
диспетчеризация процесса.
При рассмотрении этих вопросов не следует забывать о том, что конкретный рассматриваемый подход зависит, вообще говоря, от степени зернистости приложения и количества доступных процессоров.