Мультипроцессоры с памятью совместного использования

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

Мультипроцессорная система, в которой процессорные элементы имеют равный доступ ко всем модулям памяти и ко всем устройствам ввода-вывода, а каждый процессорный элемент взаимозаменяем с другими процессорными элементами, называется симметричным мультипроцессором (Symmetric Multiprocessor — SMP). Именно такой тип компьютерных систем и рассматривается в дальнейшем.

Модели согласованности аппаратных и программных средств

Поскольку в мультипроцессорах процессорным элементам (ПЭ) предоставляется отображение общего адресного пространства, несколько ПЭ могут одновременно пытаться считать слово из ячейки памяти, в то время как другие пытаются записать слово в ту же самую ячейку. Кроме того, при наличии кэш-памяти возможно существование многочисленных копий некоторых блоков данных. Поэтому для нормального функционирования мультипроцессора должны существовать правила взаимодействия между программным обеспечением и аппаратными средствами памяти. Совокупность таких правил называется моделью согласованности. Было предложено и разработано множество моделей согласованности. Рассмотрим некоторые из них 116J.

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

Согласованность по последовательности. Особенность этой модели состоит в том, что при наличии нескольких запросов на чтение/за- пись данных порядок их обслуживания определяется аппаратными средствами и может быть различным, однако все ПЭ наблюдают одну и ту же последовательность запросов. Для пояснения согласованности по последовательности рассмотрим пример. Допустим, что одновременно к ячейке (странице) памяти Xобращаются четыре ПЭ, при этом (рис. 18.1,я):

=> два элемента, ПЭ1 и ПЭ2, пытаются записать соответственно значение 100 и 200;

=> два других элемента, ПЭЗ и ПЭ4, предпринимают попытку дважды

считать содержимое этой ячейки.

Возможны различные варианты последовательности появления данных в элементах ПЭЗ и ПЭ4. Рассмотрим три из них (рис. 18.1,6): => оба элемента, ПЭЗ и ПЭ4, считывают значения 200, 200;

=> ПЭЗ считывает 100, 200, а ПЭ4 — значения 200, 200;

=> ПЭЗ и ПЭ4 получают 100, 100 и 200, 100 соответственно.

Если ПЭ4 получил 200, 100, то согласованная по последовательности память никогда не позволит элементу ПЭЗ считать значения 100, 200 по двум причинам:

=> с точки зрения ПЭЗ это бы означало, что запись значения 100 элементом ПЭ1 завершилась раньше более поздней записи значения 200, которую осуществляет ПЭ2;

=» с точки зрения ПЭ4 это также значит, что запись элементом ПЭ2 числа 200 завершилась до записи элементом ПЭ1 числа 100.

Два процесса записывают, а другие два процесса считывают одно и то же слово из общей памяти

Рис. 18.1. Два процесса записывают, а другие два процесса считывают одно и то же слово из общей памяти

Согласованность по последовательности гарантирует единый глобальный порядок записей (хотя порядок может определяться случайно), который виден всем процессорам. Если ПЭЗ видит, что первым было записано значение 100, а вторым 200, то ПЭ4 должен наблюдать тот же порядок записи.

Рассмотрим модели согласованности, которые не гарантируют такого порядка.

Процессорная согласованность. Модель имеет два свойства:

=> все ПЭ воспринимают записи любого процессорного элемента в реальной временной последовательности. Это значит, что если ПЭ1 записывает последовательность значений Al, А2, АЗ, то все другие ПЭ видят эти записи в том же порядке, т.е. невозможно, чтобы какой-либо ПЭ сначала увидел значение А2, а затем значение А1;

=» все процессорные элементы видят записи в любую ячейку памяти в том же порядке, в котором они были занесены. Это исключает неоднозначность последовательности значений в ячейке после прекращения записи процессорным элементом. В этом случае все ПЭ будут воспринимать значение последней записи, т.е. правильное значение.

При процессорной согласованности (в отличие от согласованности по последовательности) не гарантируется, что каждый ПЭ видит одну и ту же последовательность данных. Действительно, если процессорный элемент ПЭ1 записывает последовательность значений Al, А2, АЗ, а ПЭ2 одновременно — Bl, В2, ВЗ, то другие процессорные элементы, которые заняты считыванием слов из памяти, могут увидеть какую-либо последовательность из шести записей, например Al, А2, В1, В2, ВЗ, АЗ. Однако ни один процессорный элемент не увидит последовательность, в которой сначала идет А2, а затем А1.

Процессорную согласованность (по сравнению с согласованностью по последовательности) легче реализовать на больших мультипроцессорах.

Слабая согласованность. При слабой согласованности время разделяется на последовательные интервалы, разграниченные моментами синхронизации. Для пояснения ее особенностей воспользуемся рис. 18.2, на котором изображены записи Ак, Вк, Ск процессорных элементов А, В, С на отдельных временных интервалах. В пределах каждого отдельного интервала:

=> записи, выполненные отдельным ПЭ, воспринимаются по порядку; => для записей любых двух других ПЭ никакого определенного порядка не существует. Например, процессорный элемент С может воспринимать записи на первом интервале как А1, В1, А2 или В1, Al, А2. Однако все процессорные элементы будут видеть сначала Al, А2, а затем С1, С2, поскольку первая операция синхронизации требует,

Слабая согласованность памяти

Рис. 18.2. Слабая согласованность памяти

чтобы сначала завершились записи А1, А2 и только после этого начались записи Cl, С2, или В2 (в любой последовательности). Таким образом, с помощью операций синхронизации программное обеспечение может вносить порядок в последовательность событий. На каждом временном интервале синхронизация приводит память в стабильное исходное состояние, в котором не остается никаких незавершенных операций, т.е. ни одна новая запись не может начаться, пока не будут завершены все старые записи. Операции синхронизации согласованы по последовательности. Это значит, что при вызове операции синхронизации несколькими процессорами выбирается определенный порядок запи- си/считывания, которому подчинены все процессорные элементы.

К недостатку слабой согласованности следует отнести задержку выполнения новых операций до тех пор, пока не будут завершены старые.

Свободная согласованность, В этой модели для синхронизации используются две операции: acquire (запрашивать) и release (разблокировать). Она похожа на модель слабой согласованности и в какой-то мере устраняет ее недостаток благодаря использованию критических областей. Если процесс выходит за пределы критической области, это не значит, что все записи должны немедленно завершиться. Требуется только, чтобы все записи были завершены до того, как любой процесс снова войдет в эту критическую область.

Процессы записи/считывания протекают в такой последовательности:

=> сначала ПЭ выполняет операцию acquire над переменной синхронизации, чтобы получить монопольный доступ к общим разделяемым данным. После этого ПЭ может использовать эти данные для записи или считывания;

=> затем ПЭ выполняет операцию release над переменной синхронизации, чтобы показать, что он завершил работу. Операция release не требует завершения незаконченных записей, более того, могут сразу же начинаться новые операции записи/считывания. Однако операция release не может быть завершена, пока не закончатся все ранее начатые записи;

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

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

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ     След >