Распределённые операционные системы.
Распределённая ОС, динамически и автоматически распределяя работы по различным машинам системы для обработки, заставляет набор сетевых машин обрабатывать информацию параллельно. Пользователь распределённой ОС, вообще говоря, не имеет сведений о том, на какой машине выполняется его работа. Распределённая ОС существует как единая операционная система в масштабах вычислительной системы. Каждый компьютер сети, работающей под управлением распределённой ОС, выполняет часть функций этой глобальной ОС. Распределённая ОС объединяет все компьютеры сети в том смысле, что они работают в тесной кооперации друг с другом для эффективного использования всех ресурсов компьютерной сети. Наиболее широко применяется классификация вычислительных систем, основанная на количестве потоков входных данных и количестве потоков команд, которые эти данные обрабатывают (рисунок 7.1):
Несколько потоков инструкций-несколько потоков данных MIMD. MISD (Multiple Instruction Single Data): разные потоки инструкций выполняются с одними и теми же данными. Обычно такие системы не приводят к ускорению вычислений, так как разные инструкции оперируют одними и теми же данными, в результате на выходе системы получается один поток данных. К таким системам относят различные системы дублирования и защиты от сбоев, когда, например, несколько процессоров дублируют вычисления друг друга для надёжности. Иногда к этой категории относят конвейерные архитектуры. Среди процессоров производства Intel, конвейер присутствует начиная с процессора Pentium.
SIMD (Single Instruction Multiple Data): один поток инструкций выполняет вычисления одновременно с разными данными. Например, выполняется сложение одновременно восьми пар чисел. Такие компьютеры называются векторными, так как подобные операции выполняются аналогично операциям с векторами (когда, например, сложение двух векторов означает одновременное сложение всех их компонентов). Зачастую векторные инструкции присутствуют в дополнение к обычным «скалярным» инструкциям, и называются SIMD-расширением (или векторным расширением). Примеры популярных SIMD-расширений: MMX, 3DNow!, SSE и др.
MIMD (Multiple Instruction Multiple Data): разные потоки инструкций оперируют различными данными. Это системы наиболее общего вида, поэтому их проще всего использовать для решения различных параллельных задач. MIMD-системы, в свою очередь, принято разделять на системы с общей памятью (несколько вычислителей имеют общую память) и системы с распределенной памятью (каждый вычислитель имеет свою память; вычислители могут обмениваться данными). Кроме того, существуют системы с неоднородным доступом к памяти (NUMA) — в которых доступ к памяти других вычислителей существует, но он значительно медленнее, чем доступ к «своей» памяти. Системы с общей памятью
Системами с общей памятью называют системы, в которых несколько процессоров имеют общую оперативную память. Чаще всего встречающиеся системы этого типа — компьютеры с многоядерными процессорами (multi-core). Преимущества таких систем: · Не требуется обмена данными: данные, помещённые в память одним процессором, автоматически становятся доступными другим процессорам. Соответственно, система не должна тратить время на пересылку данных. · Простота написания программы: можно, например, создать несколько вычислительных потоков, или же снабдить программу специальными директивами (например, технология OpenMP), которые подскажут компилятору, как распараллеливать программу. Кроме того, возможно полностью автоматическое распараллеливание программы компилятором.
· Компактность систем: может быть реализована в виде нескольких процессоров на одной материнской плате, и/или в виде нескольких ядер внутри процессора. Недостатки: Допустим, у нас есть объект, содержащий числа A и B, и для правильной работы объекта нужно, чтобы A + B всегда было равно нулю. Если первый процесс изменит A, и не успеет изменить B прежде, чем второй процесс прочтёт A и B, то второй процесс получит неправильный объект, в котором A + B не равно нулю. Для решения подобных проблем можно использовать критические секции. Если поток инструкций первого процесса входит в критическую секцию с идентификатором N, то поток инструкций другого процесса не сможет войти в критическую секцию с тем же идентификатором, и будет ждать, пока первый процесс не выйдет из этой секции. Проблема совместного доступа к памяти: нужно осторожно работать с теми участками памяти, для которых возможно одновременное выполнение записи одним процессором и другой операции (записи или чтения) другим процессором. Проблема синхронности кэшей: для ускорения доступа к памяти процессоры снабжаются кэшами. Если один процессор изменил данные в оперативной памяти, и эти данные прокэшированы другими процессорами, то их кэши должны автоматически обновиться. Данная проблема отсутствует в многоядерных процессорах, использующих общий кэш. Проблема медленного обращения к оперативной памяти и её ограниченного объёма: процессор работает быстро, а память — медленно, поэтому даже одному процессору приходится ждать загрузки данных из оперативной памяти. Если же процессоров несколько, то им приходится ждать ещё дольше. Скорость работы каждого процессора с памятью становится тем меньше, чем большее число процессоров имеется в системе. Кроме того, объём памяти не может быть сделан сколь угодно большим, так как для этого придётся увеличивать разрядность шины памяти. Проблема масштабируемости: очень сложно сделать подобную систему с больши́м числом процессоров, так как очень сильно возрастает стоимость и падает эффективность работы из-за описанных выше проблем. Практически все подобные системы имеют ≤ 8 процессоров.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|