Мультипроцессорная обработка
Мультипроцессорная обработка – это способ организации вычислительного процесса в системах с несколькими процессорами, при котором несколько задач (процессов, потоков) могут одновременно выполняться на разных процессорах системы.
В настоящее время обычным стало включение нескольких процессоров в архитектуру даже персонального компьютера. Более того, многопроцессорность теперь является одним из необходимых требований, которые предъявляются к компьютерам, используемым в качестве центрального сервера более-менее крупной сети. Стало общепринятым введение в ОС функций поддержки мультипроцессорной обработки данных. Такие функции имеются во всех популярных ОС, таких как Sun Solaris 2.x, Santa Crus Operations Open Server 3.x, IBM OS/2, Microsoft Windows NT и Novell NetWare, начиная с 4.1.
Не следует путать мультипроцессорную обработку с мультипрограммной обработкой. В мультипрограммных системах параллельная работа разных устройств позволяет одновременно вести обработку нескольких программ, но при этом в процессоре в каждый момент времени выполняется только одна программа. То есть в этом случае несколько задач выполняются попеременно на одном процессоре, создавая лишь видимость параллельного выполнения. В мультипроцессорных системах несколько задач выполняются действительно одновременно, так как имеется несколько обрабатывающих устройств – процессоров. Мультипроцессирование не исключает мультипрограммирования: на каждом из процессоров может попеременно выполняться некоторый закрепленный за данным процессором набор задач.
Мультипроцессорные системы могут быть симметричными или несимметричными. При этом понятие симметричности или несимметричности может относиться к типу архитектуры или к способу организации вычислительного процесса.
Симметричная архитектурамультипроцессорной системы предполагает однородность всех процессоров и единообразие включения процессоров в общую схему мультипроцессорной системы. Традиционные симметричные мультипроцессорные конфигурации разделяют одну большую память между всеми процессорами.
Масштабируемость, или возможность наращивания числа процессоров, в симметричных системах ограничена вследствие того, что все они пользуются одной и той же оперативной памятью и, следовательно, должны располагаться в одном корпусе. Такая конструкция, называемая масштабируемой по вертикали, практически ограничивает число процессоров до четырех или восьми.
В симметричных архитектурах все процессы пользуются одной и той же схемой отображения памяти. Они могут очень быстро обмениваться данными, так что обеспечивается достаточно высокая производительность для тех приложений (например, при работе с базами данных), в которых несколько задач должны активно взаимодействовать между собой.
В асимметричной архитектуреразные процессоры могут отличаться как типом, так и выполняемыми функциями: одни процессоры проводят вычисления, другие управляют подсистемой ввода-вывода и т. д. Функциональная неоднородность в асимметричных архитектурах влечет за собой структурные отличия во фрагментах системы, содержащих разные процессоры. Эти отличия касаются схемы подключения процессоров к системной шине, набора периферийных устройств и способа взаимодействия процессоров с устройствами.
Масштабирование в асимметричной архитектуре реализуется иначе, чем в симметричной. Так как требование единого корпуса отсутствует, система может состоять из нескольких устройств, каждое из которых содержит один или несколько процессоров. Это масштабирование по горизонтали. Каждое такое устройство называется кластером, а вся мультипроцессорная система – кластерной.
Другим аспектом мультипроцессорных систем, который может характеризоваться симметрией или ее отсутствием, является способ организации вычислительного процесса. Последний, как известно, определяется и реализуется операционной системой.
Асимметричное мультипроцессированиеявляется наиболее простым способом организации вычислительного процесса в системах с несколькими процессорами. Этот способ часто называют также «ведущий-ведомый».
Функционирование системы по принципу «ведущий-ведомый» предполагает выделение одного из процессоров в качестве «ведущего», на котором работает операционная система и который управляет всеми остальными «ведомыми» процессорами. То есть ведущий процессор берет на себя функции распределения задач и ресурсов, а ведомые процессоры работают только как обрабатывающие устройства и никаких действий по организации работы вычислительной системы не выполняют. На роль ведущего процессора может быть назначен наиболее надежный и производительный процессор.
Так как операционная система работает только на одном процессоре и функции управления полностью централизованы, то такая ОС оказывается не намного сложнее, чем у однопроцессорной системы.
Симметричное мультипроцессированиекак способ организации вычислительного процесса может быть реализовано в системах только с симметричной мультипроцессорной архитектурой. Операционная система при этом полностью децентрализована и является общей для всех процессоров. При симметричной организации все процессоры равноправно участвуют и в управлении вычислительным процессом, и в выполнении прикладных задач. Например, сигнал прерывания от принтера, который распечатывает данные процесса, выполняемого на одном процессоре, может быть обработан другим процессором. Разные процессоры могут в какой-то момент одновременно обслуживать как разные, так и одинаковые модули общей операционной системы. Для этого программы операционной системы должны обладать свойством повторной входимости (реентерабельностью).
Модули ОС выполняются на любом доступном процессоре. Как только процессор завершает выполнение очередной задачи, он передает управление планировщику задач, который выбирает из общей для всех процессоров системной очереди задачу, которая будет выполняться на данном процессоре следующей. Все ресурсы выделяются для каждой выполняемой задачи по мере возникновения в них потребности и никак не закрепляются за процессором. В случае отказа одного из процессоров симметричные системы сравнительно просто реконфигурируются, что является их большим преимуществом перед плохо реконфигурируемыми асимметричными системами.
В симметричных архитектурах вычислительный процесс может быть организован как симметричным, так и асимметричным образом. Однако асимметричная архитектура непременно влечет за собой и асимметричный способ организации вычислений.
Планирование процессов и потоков
Понятия «процесс» и «поток»
Для реализации многозадачности необходимо определить, каким образом ОС будет разделять между задачами процессор и другие ресурсы компьютера. С этой целью было введено понятие последовательного процесса или просто процесса.
Процесс – некая последовательность действий, выполняемая процессором с привлечением необходимых ресурсов (памяти, внешних устройств и т. д.). Процесс определяется программой, соответствующей данной задаче.
Программа представляет собой последовательность команд (поток команд). После запуска программы она загружается из внешней памяти компьютера в оперативную и ставится на выполнение процессором. Каждая команда занимает в памяти по конкретным физическим адресам одну или несколько ячеек памяти (байтов). Процессор последовательно выбирает команды из памяти и их выполняет. Для выборки команд из памяти используется специальный регистр, называемый программным счетчиком (program counter – PC), который содержит адрес текущей команды. Регистры процессора и переменные в оперативной памяти содержат текущие данные программы. Во время своей работы программа может использовать и другие ресурсы компьютера: открытые файлы, внешние устройства и т. д.
В литературе используется и такое определение процесса. Процесс (задача) – это выполнение отдельной программы с ее данными на последовательном процессоре.
Примеры процессов (задач): выполнение прикладных программ пользователей, утилит и других системных обрабатывающих программ, трансляция исходной программы, ее компоновка, исполнение. Причем трансляция какой-нибудь исходной программы является одним процессом, а трансляция следующей исходной программы – другим процессом, поскольку, хотя транслятор как объединение программных модулей здесь выступает как одна и та же программа, но данные, которые он обрабатывает, являются разными.
Процесс представляет собой обособленное явление, что необходимо для того, чтобы защитить один процесс от влияния другого, поскольку они совместно используют ресурсы компьютера и конкурируют друг с другом за обладание ими. ОС считает процессы совершенно не связанными друг с другом и берет на себя роль арбитра в спорах процессов за ресурсы. Каждый процесс имеет собственные (рис. 4.2): виртуальное адресное пространство; глобальные переменные; открытые файлы; внешние устройства; состояние; программный счетчик РС; регистры процессора; стек.
Рис. 4.2. Выполнение процесса на процессоре
Таким образом, процесс реализует две главные концепции: группирование ресурсов для программы и выполнение программы на процессоре.
Выделяют три основных состояния процесса:
Готовность – все необходимые ресурсы для процесса выделены, он готов выполняться, однако процессор занят выполнением другого процесса.
Выполнение – активное состояние процесса, во время которого процесс обладает всеми необходимыми ресурсами и непосредственно выполняется процессором.
Ожидание – процесс заблокирован и не может выполняться до осуществления некоторого события, например, завершения операции ввода-вывода, получения сообщения от другого процесса, освобождения какого-либо необходимого ему ресурса.
В ходе жизненного цикла каждый процесс переходит из одного состояния в другое, в соответствии с алгоритмом планирования процессов, реализуемым в данной операционной системе.
Рассмотренная трактовка термина «процесс» существовала долгое время, пока не возникла необходимость в организации параллельной обработки в рамках одного процесса (приложения, программы). Для реализации этой необходимости было введено новое понятие – поток или нить (thread).
В новой трактовке понятие процесс меняет смысл. В операционных системах, где существуют и процессы, и потоки, процесс рассматривается операционной системой как заявка на потребление всех видов ресурсов, кроме одного – процессорного времени. Этот последний важнейший ресурс распределяется операционной системой между потоками. Процессу ОС выделяет область памяти и другие ресурсы, которые совместно используются всеми его потоками. В простейшем случае процесс состоит только из одного потока. Поток получил свое название благодаря тому, что он представляет собой последовательность (поток) выполняемых команд программы. В рамках одного процесса может функционировать множество потоков, которые разделяют между собой (рис. 4.3): единое адресное пространство процесса; глобальные переменные; открытые файлы; внешние устройства и т.д.
При этом каждый из потоков имеет собственные: программный счетчик; регистры процессора; стек; состояние.
Например, при работе текстового редактора (один процесс) квазипараллельно выполняются три потока: ввод данных пользователя с клавиатуры, переформатирование документа, периодическое автосохранение документа.
Многопоточность в рамках одного процесса (приложения) позволяет повысить эффективность работы приложения. Например, в рассмотренном примере, при попытке записи на диск, если он занят другим процессом, ОС может не выполнять переключение на другой процесс, а поставить на выполнение другой поток выполняемого процесса.
Рис. 4.3. Выполнение потока текущего процесса на процессоре