
- •Глава 11
- •В.Г.Олифер, н.А.Олифер. Сетевые операционные системы. Учебное пособие.-сПб.:бхв-Петербург, 2006.-536с.
- •В.А.Шеховцов. Операційні системи. Підручник .-к.:Виканавча група внv. 2005. 576с.
- •Столлингс в. Операционные системы. М.: Вильямс, 2001. -672с.
- •Раздел 11
- •11.1. Многопроцессорные системы
- •11.1.1. Типы многопроцессорных систем
- •11.1.2. Поддержка многопроцессорной в операционных системах
- •11.1.3. Производительность многопроцессорных систем
- •11.1.4. Планирование в многопроцессорных системах
- •11.1.5. Родство процессора
- •11.1.6. Поддержка многопроцессорности в Linux
- •11.1.7. Поддержка многопроцессорной в Windows xp
- •11.2. Принципы разработки распределенных систем
- •11.2.1. Отдалены вызовы процедур
- •11.2.2. Использование Sun rpc
- •11.2.3. Использование Microsoft rpc
- •11.2.4. Обработка ошибок и координация в распределенных системах
- •11.3. Распределеные файловые системы
- •11.3.1. Организация распределенных файловых систем
- •11.3.2. Файловая система nfs
- •11.3.3. Файловая система Microsoft dfs
- •11.4. Современные архитектуры распределенных систем
- •11.4.1. Кластерные системы
- •11.4.2. Grid-системы
- •Контрольные вопросы и задания
Системное программное обеспечение и операционные системы
|
Учебное пособие
Глава 11
Многопроцессорные
и распределенные системы
2007
Рекомендуемая литература:
-
В.Г.Олифер, н.А.Олифер. Сетевые операционные системы. Учебное пособие.-сПб.:бхв-Петербург, 2006.-536с.
-
В.А.Шеховцов. Операційні системи. Підручник .-к.:Виканавча група внv. 2005. 576с.
-
Столлингс в. Операционные системы. М.: Вильямс, 2001. -672с.
Раздел 11
Многопроцессорные и распределенные системы
-
Многопроцессорные системы
-
Базовые технологии разработки распределенных систем
-
Организация отдаленного вызова процедур
-
Синхронизация и координация распределенных применений
-
Особенности реализации распределенных файловых систем
-
Современные архитектуры распределенных вычислений
-
Кластеры и grid-системы
Сегодня есть два основных подхода к увеличению вычислительной мощности компьютерных систем. Первый из них связан с повышением тактовой частоты процессора. При этом у разработчиков возникают технологические проблемы, которые связаны с необходимостью организовывать охлаждение процессоров и тем, что скорость распространения сигналов ограничена. Кроме того, единственный процессор системы является ее «узким местом» в надежности - его выход из строя приводит к неминуемому краху всей системы.
Альтернативным подходом, о котором будет идти речь в этом разделе, является организация параллельных вычислений на нескольких процессорах. С одной стороны, в результате увеличения количества процессоров можно достичь большей мощности, чем доступная на этот момент для однопроцессорных систем. Из другого, такие системы имеют большую стойкость к сбоям — в случае выхода одного из процессоров из строя на его месте можно использовать другой.
Как было отмечено в разделе 2, можно выделить две основных категории систем, которые используют несколько процессоров.
В многопроцессорных системах набор процессоров находится в одном корпусе и использует общую память (а также периферийные устройства).
В распределенных системах процессоры находятся в составе отдельных компьютеров, соединенных сетью. Параллельные вычисления организованы на базе специального программного обеспечения, которое скрывает наличие сети от пользователей системы.
11.1. Многопроцессорные системы
Здесь остановимся на основных типах многопроцессорных систем и особенностях их поддержки у современных ОС на примере Linux и Windows XP.
11.1.1. Типы многопроцессорных систем
В зависимости от особенностей аппаратной реализации, многопроцессорные системы бывают такие:
-
с однородным доступом к памяти или UMA-системы (Uniform Memory Access), в которых доступ к любому адресу в памяти осуществляется с одинаковой скоростью;
-
с неоднородным доступом к памяти или NUMA-системы (Non-Uniform Memory Access), для которых это не выполняется.
Однородный доступ к памяти
Архитектура UMA-систем предусматривает, что доступ любого процессора к любому модулю памяти происходит одинаково. Самым распространенным подходом в реализации такой системы является архитектура с общей шиной, когда все процессоры и модули памяти соединены между собой общей шиной памяти. В случае необходимости получить доступ к памяти процессор проверяет, не занята ли шина, и, если она свободна, выполняет физический доступ по заданному адресу.
Если шина занята, процессор ожидает, пока она не освободится. Необходимость такого ожидания является главным недостатком базовой архитектуры с общей шиной. Количество процессоров, которые можно использовать в этой архитектуре, небольшое (от 2 до 4).
Самым распространенным способом уменьшения времени ожидания на общей шине является оснащение каждого процессора собственным аппаратным кэшем достаточно большого объема. При этом, если происходит удачное обращение к кэшу, доступ к шине не нужен. Нагрузка на шину снижается, следовательно, в системе может поддерживаться большее количество процессоров.
В этом случае, однако, возникает другая проблема, связанная с необходимостью поддержки когерентности кэша (cache coherence), — согласованности данных, которые находятся в кэшах разных процессоров.
Разъясним это понятие. Есть вероятность, что один и тотже участок памяти (например, который отвечает некоторой структуре данных) будет одновременно сохранен в кэшах нескольких процессоров. Рассмотрим ситуацию, когда код одного из потоков изменяет эту структуру данных. В итоге изменится содержание основной памяти и кэш процессора, на котором выполнялся этот поток. Содержание кэшей других процессоров при этом останется неизменным и перестанет отвечать данным, которые находятся в основной памяти, — кэш потеряет когерентность.
Обеспечение когерентности кэша влечет снижение производительности. Необходимо, чтобы процессор, который изменяет данные в памяти, передавал по шине специальный сигнал, который извещает другие процессоры об этом изменении. В случае получения сигнала каждый процессор, который определил, что он кешировал те же данные, должен изъять их из кэша (сделать перекрестную очистку кэша, cross invalidation). Периодические обращения процессоров к шине для выявления сигнала и перекрестную очистку кэша занимают много времени. Кроме того, повышается вероятность промаха во время доступа к кэшу.
Невзирая на эти проблемы, UMA-архитектуру с когерентным кэшем широко используют на практике.
Неоднородный доступ к памяти
Реализация когерентного кэша не решает всех проблемы, связанных с наличием общей шины в UMA-архитектуре. Для создания многопроцессорных систем, которые рассчитаны на значительное количество процессоров (больше чем 100) и будут иметь возможность последующего масштабирования, нужно использовать неоднородный доступ к памяти (NUMA-архитектуру).
В NUMA-архитектуре с каждым процессором связывают его собственную локальную память. Единственное для всех процессоров адресное пространство при этом сохранено -каждый процессор в системе может получить доступ к локальной памяти любого другого процессора, но доступ к такой отдаленной памяти происходит медленнее, чем к локальной.
Фактически NUMA-система состоит из набора узлов (nodes), каждый из которых содержит один или несколько процессоров и микросхемы индивиджуальной локальной памяти (а также, возможно, средства ввода-вывода). Узлы соединены между собой общей шиной. Очевидно, что доступ к локальной памяти не требует обращения к шине, в результате чего нагрузка на нее значительно снижается. Кроме того, обычно организуют когерентный кэш для операций доступа к этой шине (системы с таким кэшем называют CC-NUMA — Cache-Coherent NUMA).