Многопроцессорность — это использование двух или более центральных процессоров (ЦП) в одной компьютерной системе . [1] [2] Этот термин также относится к способности системы поддерживать более одного процессора или способности распределять задачи между ними. Существует множество вариаций на эту базовую тему, и определение многопроцессорности может меняться в зависимости от контекста, в основном в зависимости от того, как определяются ЦП ( несколько ядер на одном кристалле , несколько кристаллов в одном корпусе , несколько корпусов в одном системном блоке и т. д.).
Согласно некоторым онлайн-словарям, мультипроцессор — это компьютерная система, имеющая два или более процессорных блока (несколько процессоров), каждый из которых совместно использует основную память и периферийные устройства для одновременной обработки программ. [3] [4] Учебник 2009 года определяет мультипроцессорную систему аналогичным образом, но отмечает, что процессоры могут совместно использовать «часть или всю память системы и средства ввода-вывода»; он также приводит термин « тесно связанная система » в качестве синонима. [5]
На уровне операционной системы многопроцессорность иногда используется для обозначения выполнения нескольких параллельных процессов в системе, при этом каждый процесс выполняется на отдельном ЦП или ядре, в отличие от одного процесса в любой момент времени. [6] [7] При использовании с этим определением многопроцессорность иногда противопоставляется многозадачности , которая может использовать только один процессор, но переключать его во временных интервалах между задачами (т. е. система с разделением времени ). Однако многопроцессорность означает истинное параллельное выполнение нескольких процессов с использованием более чем одного процессора. [7] Многопроцессорность не обязательно означает, что один процесс или задача использует более одного процессора одновременно; термин параллельная обработка обычно используется для обозначения такого сценария. [6] Другие авторы предпочитают называть методы операционной системы многопрограммированием и резервировать термин многопроцессорность для аппаратного аспекта наличия более чем одного процессора. [2] [8] Оставшаяся часть этой статьи обсуждает многопроцессорность только в этом аппаратном смысле.
В таксономии Флинна мультипроцессоры, как определено выше, являются машинами MIMD . [9] [10] Поскольку термин «мультипроцессор» обычно относится к тесно связанным системам, в которых все процессоры совместно используют память, мультипроцессоры не являются полным классом машин MIMD, который также содержит многокомпьютерные системы передачи сообщений . [9]
В многопроцессорной системе все ЦП могут быть равны, или некоторые могут быть зарезервированы для специальных целей. Сочетание соображений проектирования аппаратного обеспечения и программного обеспечения операционной системы определяет симметрию (или ее отсутствие) в данной системе. Например, соображения аппаратного или программного обеспечения могут требовать, чтобы только один конкретный ЦП отвечал на все аппаратные прерывания, тогда как вся остальная работа в системе может быть распределена поровну между ЦП; или выполнение кода режима ядра может быть ограничено только одним конкретным ЦП, тогда как код пользовательского режима может выполняться в любой комбинации процессоров. Многопроцессорные системы часто проще проектировать, если налагаются такие ограничения, но они, как правило, менее эффективны, чем системы, в которых используются все ЦП.
Системы, которые обрабатывают все ЦП одинаково, называются симметричными многопроцессорными (SMP) системами. В системах, где все ЦП не равны, системные ресурсы могут быть разделены несколькими способами, включая асимметричную многопроцессорную обработку (ASMP), многопроцессорную обработку с неравномерным доступом к памяти (NUMA) и кластерную многопроцессорную обработку.
В многопроцессорной системе ведущий/ведомый ЦП управляет компьютером, а ведомый(е) ЦП выполняет назначенные задачи. ЦП могут быть совершенно разными по скорости и архитектуре. Некоторые (или все) ЦП могут совместно использовать общую шину, каждый может также иметь частную шину (для частных ресурсов), или они могут быть изолированы, за исключением общего пути связи. Аналогично, ЦП могут совместно использовать общую оперативную память и/или иметь частную оперативную память, к которой другие процессоры не могут получить доступ. Роли ведущего и ведомого могут меняться от одного ЦП к другому.
Два ранних примера главного/подчиненного мультипроцессора мэйнфрейма — это Bull Gamma 60 и Burroughs B5000 . [11]
Ранним примером многопроцессорной системы микропроцессоров master/slave является настольный компьютер Tandy/Radio Shack TRS-80 Model 16, который вышел в феврале 1982 года и работал под управлением многопользовательской/многозадачной операционной системы Xenix , версии UNIX от Microsoft (называемой TRS-XENIX). Модель 16 имеет два микропроцессора: 8-битный ЦП Zilog Z80, работающий на частоте 4 МГц, и 16-битный ЦП Motorola 68000, работающий на частоте 6 МГц. Когда система загружается, Z-80 является ведущим, а процесс загрузки Xenix инициализирует подчиненный 68000, а затем передает управление 68000, после чего ЦП меняются ролями, и Z-80 становится подчиненным процессором, отвечающим за все операции ввода-вывода, включая диск, связь, принтер и сеть, а также клавиатуру и встроенный монитор, в то время как операционная система и приложения работают на ЦП 68000. Z-80 можно использовать и для выполнения других задач.
Более ранняя модель TRS-80 Model II , выпущенная в 1979 году, также могла считаться многопроцессорной системой, поскольку имела как ЦП Z-80, так и микроконтроллер Intel 8021 [12] в клавиатуре. 8021 сделал Model II первой настольной компьютерной системой с отдельной съемной легкой клавиатурой, соединенной с одним тонким гибким проводом, и, вероятно, первой клавиатурой, использующей выделенный микроконтроллер, оба атрибута, которые позже, спустя годы, были скопированы Apple и IBM.
При многопроцессорной обработке процессоры могут использоваться для выполнения одной последовательности инструкций в нескольких контекстах ( одна инструкция, несколько данных или SIMD, часто используется в векторной обработке ), нескольких последовательностей инструкций в одном контексте ( несколько инструкций, несколько данных или MISD, используется для избыточности в отказоустойчивых системах и иногда применяется для описания конвейерных процессоров или гиперпоточности ) или нескольких последовательностей инструкций в нескольких контекстах ( несколько инструкций, несколько данных или MIMD).
Тесно связанные многопроцессорные системы содержат несколько ЦП, которые соединены на уровне шины. Эти ЦП могут иметь доступ к центральной общей памяти (SMP или UMA ) или могут участвовать в иерархии памяти как с локальной, так и с общей памятью (SM) ( NUMA ). IBM p690 Regatta является примером высокопроизводительной SMP-системы. Процессоры Intel Xeon доминировали на рынке многопроцессорных систем для бизнес-ПК и были единственным основным вариантом x86 до выпуска линейки процессоров AMD Opteron в 2004 году. Оба диапазона процессоров имели собственный встроенный кэш, но обеспечивали доступ к общей памяти; процессоры Xeon через общий канал, а процессоры Opteron через независимые пути к системной оперативной памяти .
Чиповые мультипроцессоры, также известные как многоядерные вычисления, включают в себя более одного процессора, размещенного на одном чипе, и могут считаться самой крайней формой тесно связанной многопроцессорной обработки. Системы мэйнфреймов с несколькими процессорами часто тесно связаны.
Слабосвязанные многопроцессорные системы (часто называемые кластерами ) основаны на нескольких автономных компьютерах с относительно небольшим количеством процессоров , соединенных между собой высокоскоростной системой связи ( распространен Gigabit Ethernet ). Кластер Linux Beowulf является примером слабосвязанной системы.
Тесно связанные системы работают лучше и физически меньше слабосвязанных, но исторически требовали больших первоначальных инвестиций и могут быстро обесцениваться ; узлы в слабосвязанной системе обычно представляют собой недорогие массовые компьютеры и могут быть переработаны как независимые машины после вывода из кластера.
Потребление энергии также является соображением. Тесно связанные системы, как правило, гораздо более энергоэффективны, чем кластеры. Это связано с тем, что значительное снижение потребления энергии может быть реализовано путем проектирования компонентов для совместной работы с самого начала в тесно связанных системах, тогда как слабосвязанные системы используют компоненты, которые не обязательно были предназначены специально для использования в таких системах.
Слабосвязанные системы способны запускать разные операционные системы или версии ОС на разных системах.