Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KS_LK_AllInOne.docx
Скачиваний:
134
Добавлен:
23.11.2019
Размер:
28.78 Mб
Скачать

1.3. Мультикомпьютеры

Во втором типе параллельной архитектуры каждый процессор имеет свою собствен­ную память, доступную только этому процессору. Такая разработка называется мультикомпьютером или системой с распределенной памятью. Она изображена на рис. 8.2, а. Мультикомпьютеры обычно (хотя не всегда) являются системами со слабой связью.

Ключевое отличие мультикомпьютера от мультипроцессора состо­ит в том, что каждый процессор в мультикомпьютере имеет свою собственную ло­кальную память, к которой этот процессор может обращаться, выполняя команды LOAD и STORE, но никакой другой процессор не может получить доступ к этой памяти с помощью тех же команд LOAD и STORE.

Таким образом, мультипроцессоры имеют одно физическое адресное пространство, разделяемое всеми процессорами, а муль-тикомпыотеры содержат отдельное физическое адресное пространство для каж­дого центрального процессора.

Поскольку процессоры в мультикомпьютере не могут взаимодействовать друг с другом просто путем чтения из общей памяти и записи в общую память, здесь необходим другой механизм взаимодействия. Они посылают друг другу сообще­ния, используя сеть межсоединений. В качестве примеров мультикомпьютеров можно назвать IBM SP/2, Intel/Sandia Ootion Red и Wisconsin COW.

При отсутствии памяти совместного использования в аппаратном обеспечении предполагается определенная структура программного обеспечения. В мультикомпьютере невозможно иметь одно виртуальное адресное пространство, из которого все процессы могут считывать информацию и в которое все процессы могут запи­сывать информацию просто путем выполнения команд LOAD и STORE. Например, если процессор 0 (в верхнем левом углу) на рис. 8Д,б обнаруживает, что часть его объекта попадает в другую секцию, относящуюся к процессору 1, он может продолжать считывать информацию из памяти, чтобы получить хвост самолета. Однако если процессор 0 на рис. 8.2, обнаруживает это, он не может просто считать инфор­мацию из памяти процессора 1. Для получения необходимых данных ему нужно сделать что-то другое.

В частности, ему нужно как-то определить, какой процессор содержит необходи­мые ему данные, и послать этому процессору сообщение с запросом копии данных. Затем процессор 0 блокируется до получения ответа. Когда процессор 1 получает сообщение, программное обеспечение должно проанализировать его и отправить назад необходимые данные. Когда процессор 0 получает ответное сообщение, про­граммное обеспечение разблокируется и продолжает работу.

В мультикомпьютере для взаимодействия между процессорами часто исполь­зуются примитивы send и receive. Поэтому программное обеспечение мультикомпьютера имеет более сложную структуру, чем программное обеспечение мульти­процессора. При этом основной проблемой становится правильное разделение данных и разумное их размещение. В мультипроцессоре размещение частей не влияет на правильность выполнения задачи, хотя может повлиять на производи­тельность. Таким образом, мультикомпьютер программировать гораздо сложнее, чем мультипроцессор.

Возникает вопрос: зачем вообще создавать мультикомпыотеры, если мульти­процессоры гораздо проще запрограммировать?

Ответ прост: гораздо проще и де­шевле построить большой мультикомпьютер, чем мультипроцессор с таким же количеством процессоров.

Реализация общей памяти, разделяемой несколькими сотнями процессоров, — это весьма сложная задача, а построить мультикомпью­тер, содержащий 10 000 процессоров и более, довольно легко.

Таким образом, мы сталкиваемся с дилеммой: мультипроцессоры сложно стро­ить, но легко программировать, а мультикомпыотеры легко строить, но трудно программировать.

Поэтому стали предприниматься попытки создания гибридных систем, которые относительно легко конструировать и относительно легко програм­мировать.

Это привело к осознанию того, что совместную память можно реализовы­вать по-разному, и в каждом случае будут какие-то преимущества и недостатки. Практически все исследования в области архитектур с параллельной обработкой направлены на создание гибридных форм, которые сочетают в себе преимуще­ства обеих архитектур. Здесь важно получить такую систему, которая расширяе­ма, то есть которая будет продолжать исправно работать при добавлении все но­вых и новых процессоров.

Первый из подходов основан на том, что современные компьютерные системы не монолитны, а состоят из ряда уровней. Это дает возможность память на любом из нескольких уровней, как показано на рис. 8.3. На рис. 8.3, а мы видим память совместного использования, реализованную в аппаратном обес­печении в виде реального мультипроцессора. В данной разработке имеется одна копия операционной системы с одним набором таблиц, в частности таблицей рас­пределения памяти. Если процессу требуется больше памяти, он прерывает рабо­ту операционной системы, которая после этого начинает искать в таблице свобод­ную страницу и отображает эту страницу в адресное пространство вызывающей программы. Что касается операционной системы, имеется единая память, и опера­ционная система следит, какая страница в программном обеспечении принадле­жит тому или иному процессу. Существует множество способов реализации со­вместной памяти в аппаратном обеспечении.

Второй подходиспользовать аппаратное обеспечение мультикомпьютера и операционную систему, которая моделирует разделенную память, обеспечивая единое виртуальное адресное пространство, разбитое на страницы. При таком под­ходе, который называется DSM (Distributed Shared Memory — распределенная совместно используемая память) [82,83,84], каждая страница расположена в од­ном из блоков памяти (см. рис. 8.2, а). Каждая машина содержит свою собствен­ную виртуальную память и собственные таблицы страниц. Если процессор со­вершает команду LOAD или STORE над страницей, которой у него нет, происходит прерывание операционной системы. Затем операционная система находит нуж­ную страницу и требует, чтобы процессор, который обладает нужной страницей, преобразовал ее в исходную форму и послал по сети межсоединений. Когда стра­ница достигает пункта назначения, она отображается в память, и выполнение пре­рванной команды возобновляется. По существу, операционная система просто вызывает недостающие страницы не с диска, а из памяти. Но у пользователя со­здается впечатление, что машина содержит общую разделенную память. DSM мы рассмотрим ниже в этой главе.

Третий подходреализовать общую разделенную память на уровне программ­ного обеспечения. При таком подходе абстракцию разделенной памяти создает язык программирования, и эта абстракция реализуется компилятором. Например, мо­дель Linda основана на абстракции разделенного пространства кортежей (записей данных, содержащих наборы полей). Процессы любой машины могут взять кор­теж из общего пространства или отправить его в общее пространство. Поскольку доступ к этому пространству полностью контролируется программным обеспече­нием (системой Linda), никакого специального аппаратного обеспечения или спе­циальной операционной системы не требуется.

Другой пример памяти совместного использования, реализованной в программ­ном обеспечении, — модель общих объектов в системе Огса. В модели Огса процес­сы разделяют объекты, а не кортежи, и могут выполнять над ними те или иные процедуры. Если процедура изменяет внутреннее состояние объекта, операцион­ная система должна проследить, чтобы все копии этого объекта на всех машинах одновременно были изменены. И опять, поскольку объекты — это чисто программ­ное понятие, их можно реализовать с помощью программного обеспечения без вмешательства операционной системы или аппаратного обеспечения. Модели Linda и Огса мы рассмотрим ниже .

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]