Симметричная многопроцессорная обработка

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

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

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

Архитектура SMP

Рассмотрим, каким образом архитектура SMP соотносится с общей катего­рией параллельных процессоров. Общепринятым методом классификации таких систем по-прежнему является систематика, в которой выделяются системы с па­раллельными процессорами, впервые введенная Флинном (Flynn) [FLYN72]. Флинн предложил ввести следующие классы компьютерных систем.

- Архитектура с одним потоком команд и одним потоком данных (Single Instruction Single Data - SISD). На одном процессоре выполняется один по­ток команд; операции выполняются над данными, которые хранятся в единой области памяти.

- Архитектура с одним потоком команд и многими потоками данных (SingleInstruction Multiple Data - SIMD). С каждым из обрабатываемых элементов связаны хранящиеся в памяти данные, и каждая команда выполняет дейст­вия с различными наборами данных, относящимися к разным процессам. Под эту категорию подпадают векторный и матричный процессоры.

- Архитектура со многими потоками команд и одним потоком данных (Multiple Instruction Single Data - MISD). Последовательность данных пе­редается набору процессоров, каждый из которых выполняет свою последо­вательность команд. Такая структура еще не была реализована.

- Архитектура со многими потоками команд и многими потоками данных (Multiple Instruction Multiple Data - MIMD). Несколько процессоров одновременно выполняют различные последовательности команд с различными наборами данных.

В схеме MIMD процессоры являются универсальными, потому что они должны иметь возможность обрабатывать все команды, необходимые для соответствующего преобразования данных. Дальнейшая классификация систем с архитектурой MIMD может производиться в соответствии с тем, как в них осуществляется обмен данны­ми между процессорами (рис. 4.8). Если каждому процессору выделяется отдельная область памяти, то каждый обрабатывающий элемент является самостоятельным компьютером. Они обмениваются между собой информацией либо через специальные каналы, либо через какие-то сетевые устройства. Такие системы известны под назва­нием кластеры (clusters) или мультикомпьютеры. Если процессоры совместно ис­пользуют общую память, то каждый из них имеет доступ к программам и данным, которые там хранятся. Процессоры могут обмениваться информацией через эту па­мять. Такие системы известны под названием многопроцессорных систем с общей памятью (shared-memory multiprocessor).

Симметричная многопроцессорная обработка - №1 - открытая онлайн библиотека

Одна из общих классификаций многопроцессорных систем основана на том, как процессы распределяются между процессорами. Два главных подхода - выделение основных и подчиненных процессоров и симметричная многопроцессор­ная обработка. В архитектуре с ведущим и ведомыми процессорами (muster/slave architecture) ядро операционной системы всегда выполняется на специально выделенном процессоре. На других процессорах могут выполняться только пользовательские программы и, возможно, утилиты операционной систе­мы. Ведущий процессор отвечает за планирование процессов или потоков. Если выполняющемуся на ведомом процессоре процессу или потоку понадобится ка­кой-нибудь системный сервис (например, вызов процедуры ввода-вывода), он должен будет послать запрос основному процессору, а затем ждать, пока сервис­ная программа не закончит свою работу. Такой подход довольно прост, и для его реализации достаточно немного усовершенствовать операционную систему, пред­назначенную для однопроцессорных многозадачных систем. Разрешение конфликтов упрощается, благодаря тому что всей памятью и всеми ресурсами ввода-вывода управляет один процессор. Этот подход имеет ряд недостатков.

- Сбой в работе основного процессора влечет за собой отказ всей системы.

- Основной процессор может тормозить работу всей системы, так как только на нем должны производиться все действия по планированию и управлению процессами.

В симметричной многопроцессорной системе (symmetric multiprocessor) яд­ро может выполняться на любом процессоре; как правило, каждый процессор сам планирует свою работу, извлекая имеющийся в наличии процесс или поток из накопителя. Ядро может быть выполнено в виде многих процессов или мно­гих потоков; при этом разные его части способны работать параллельно. Сим­метричный подход несколько усложняет архитектуру операционной системы. Нужно принять меры предосторожности, чтобы два процессора не выбрали один и тот же процесс или чтобы процесс каким-нибудь образом не выпал из очереди. Необходимо применять специальные методы для разрешения запросов одного и того же ресурса различными процессами и синхронизации запросов.

Симметричные мультипроцессоры и кластеры имеют сложную архитектуру. Для их разработки нужно решать вопросы, связанные с физической организацией, структурами взаимосвязей, обменом информацией между процессорами, архитекту­рой операционной системы и обеспечением прикладными программами. Обсуждая такие системы в данном разделе и далее, в главе 13, "Распределенные вычисления, архитектура клиент/сервер и кластеры", мы затрагиваем в основном вопросы архи­тектуры операционных систем. Однако и здесь, и позже мы вскользь коснемся вопросов аппаратного устройства таких компьютерных систем.