Мультипроцессирование это режим работы при котором параллельные вычисления

Работа по теме: ОС_лекции. Глава: Мультипрограммирование и мультипроцессирование. ВУЗ: КНИТУ-КАИ.
article placeholder

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

Мультипрограммирование
– одновременное выполнение нескольких
процессов на вычислительной машине с
одним процессором. В этом случае
распараллеливание процессов осуществляется
за счет того, что пока для одного процесса
выполняется операция ввода-вывода,
другой процесс использует время ЦП.

Мультипроцессирование
– одновременное выполнение нескольких
процессов на вычислительной машине,
имеющих несколько процессоров; если
количество одновременно выполняемых
процессов не превышает количества
процессоров, то все процессы будут
реально выполняться по времени, каждый
на своем процессоре. Если больше, то на
некоторых процессорах будет выполняться
мультипрограммирование. (рис)

При рассмотрении
вопросов мультипроцессирования часто
используют такие термины, как симметричный
и ассиметричный мультипроцесс
(применительно к аппаратуре и к организации
вычислительного процесса). Симметричная
мультипроцессорная архитектура
представляет из себя мультипроцессорную
систему с несколькими одинаковыми м/п.
Обычно такие м/п организованы в одном
корпусе. В случае ассиметричной
мультипроцессорной архитектуры
вычислительная система содержит
несколько различных процессоров,
выполняющих различные функции. В таких
системах 1 из процессоров управляет
работой остальных и называется ведущим,
все остальные – ведомыми.

При симметричной
организации вычислительного процесса
модули ОС могут выполняться на любом
из процессоров. (рис) При ассиметричной
организации вычислительного процесса
модули могут выполняться только на 1м
или на нескольких определенных
процессорах. При ассиметричной архитектуре
возможно только ассиметричная организация
вычислительного процесса, а при
симметричной архитектуре – как
симметричная, так и ассиметричная
организация вычислительного процесса.

Структуры ос

За 10летия развития
ОС наибольшую популярность получили
следующие структуры:

  1. Монолитные
    системы

Монолитная система
представляет из себя набор модулей,
которые в процессе функционирования
могут вызывать друг друга. Интерфейс
всех модулей строго определен. Монолитные
системы строятся путем компоновки
входящих в них модулей в 1 или несколько
исполняемых файлов. Например MS-DOS
представляет собой 2 выполняемых
монолитных файла: IO.com,
DOS.com.
1й определяет в себе модули физических
операций ввода-вывода, а 2й объединяет
логические функции ввода-вывода, те
функции работы на уровне файлов. Несмотря
на то, что монолитные системы представляют
из себя просто набор модулей, эти модули
все же несколько структурированы.
Например, все модули MS-DOS
структурированы в следующую структуру:
(рис)

Системные сервисы
реализуют функции, вызываемые пользователем
(считать сектор диска, записать), а
системные утилиты представляют из себя
модули, реализующие элементарные
операции, используемые системными
сервисами.

Вызов функции в
MS-DOS
выполняется следующим образом:

— в регистр AL
записывается код (номер) вызываемой
функции

— в другие регистры
заносятся параметры передаваемые этой
функцией

— после этого
вызывается программа прерывания Int
21h

— у этого прерывания
управление получает главная процедура
– она анализирует регистр AL
и вызывает соответствующую функцию
или системный сервис, передавая ей
параметры указанные в регистрах.

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

Достоинства
монолитной системы: простота реализации

Недостатки:
сложность модификации (все модули
связаны – придется заново производить
перекомпоновку системы), очень сложная
реализация контроля доступа (защиты)

  1. Многоуровневая
    система

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

1я многоуровневая
система была разработана в 1968г и
называлась THE.
В этой системе было реализовано 6 уровней:

5) системный оператор

4) прикладные
процессы

3) управление
вводом-выводом

2) консоль

1) управление
памятью

0) управление
процессами

На самом низком
привилегированном уровне выполнялось
управление процессами и обработка
прерываний. На 1м более высоком уровне
для процессов выделялась память, на 2м
уровне обеспечивался доступ к терминалу,
3й уровень управлял операциями
ввода-вывода, 4й – выполнением прикладных
программ, 5й обеспечивал управление
системой. Все эти 6 уровней ОС были
реализованы программно, поэтому не
обеспечивали полную защиту уровней
друг от друга. А в MULTICS
и Unix
уровни реализованы программно-аппаратно,
поэтому там защита и управление доступом
хорошо развиты.

  1. Системы виртуальных
    машин

1я машина была
разработана IBM
VM/370
(рис)

На аппаратуре
работает управляющая программа СР,
выполняющая действия:

  1. выполнение операций
    ввода-вывода на устройства

  2. обработка прерываний

  3. моделирование
    нескольких виртуальных машин, являющихся
    точной копией реальной аппаратуры

  4. периодическое
    выделение виртуальным машинам квантов
    времени ЦП, при этом сама СР работает
    в привилегированном режиме (может
    выполнять все операции), а виртуальные
    машины работают в пользовательском
    режиме. На каждой виртуальной машине
    работает либо пользовательская
    (однозадачная) ???, либо более мощная.

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

Несколько другой
подход будет применен Intel
в своих м/п. м/п Intel
начиная с 80386 поддерживают режим так
называемого 8086. Это означает, что они
могут создавать в защищенном режиме
несколько параллельно работающих
виртуальных машин, моделирующих м/п
8086.

  1. Системы с
    экзоядром

Эти системы являются
частным случаем виртуальных машин, в
которых все физические ресурсы
вычислительной системы частями
закрепляются за разными виртуальными
машинами. (рис)

Это позволяет еще
больше функций перевести из
привилегированного режима в
пользовательский. Реализация становится
намного сложнее, следовательно системы
с экзоядром особого распространения
не получили.

  1. Система
    «клиент-сервер»

В системах
«клиент-сервер» большинство выполняемых
процессов как пользовательских, так и
системных подразделяется на 2 группы –
клиенты и серверы. Серверы – процессы,
которые предоставляют в использование
некоторые ресурсы или выполняют
запрашиваемые клиентами функции, а
клиенты – процессы, которые либо
потребляют ресурсы, либо посылают
запросы к серверу. И клиенты, и серверы
выполняются в пользовательском режиме
в соответствующих адресных пространствах,
и поэтому защищены друг от друга. (рис)

Клиенты не
взаимодействует непосредственно с
серверами, а посылают свои запросы ОС,
а ОС перенаправляет запрос соответствующему
серверу. Выполнив запрос, сервер
пересылает ответ также ОС, а она
перенаправляет его к соответствующему
клиенту. За счет того, что часть модулей
по работе с ресурсами перенесены на
более высокий уровень, ядро стало более
компактным. Поэтому в системах
«клиент-сервер» его часто называют
микроядром. Повышается надежность. Еще
одним преимуществом системы «клиент-сервер»
является возможность легкого переноса
этой архитектура на сетевую среду (может
выполняться на разных компьютерах сети,
также использует соответствующие вызовы
ядра).

Процессы
и потоки

Любая операционная
система должна учитывать используемые
ресурсы и проделанную работу. Особенно
это касается мультипрограммных
вычислительных систем. В качестве
единицы работы практически во всех ОС
используется процесс. Процесс- это
загруженная в память и выполняющаяся
программа. Одна и та же программа может
одновременно выполняться в рамках
нескольких процессов. Каждый процесс
при создании получает своё собственное
адресное пространство. Ему выделяются
такие ресурсы как файлы, устройства,
различные системные объекты. Каждому
процессу присваивается уникальный
идентификатор, называемый process
ID.
С помощью этого идентификатора система
различает процессы. С каждым процессом
связываются различные управляющие
структуры, с помощью которых ОС учитывает
состояние самого процесса и связанные
с ним устройства. Совокупность всех
управляющих структур, связанных с
процессом, называют контекстом процесса.
Когда ОС переходит с выполнения одного
процесса на другой, она сохраняет
контекст текущего процесса и восстанавливает
контекст следующего нового процесса.
Поэтому очень часто переключение
процессора с выполнения одного процесса
на другой называют переключением
контекста. Переключение контекста может
быть 2х типов:

  1. Принудительное
    переключение контекста, при котором
    ОС сама прекращает выполнение процесса

  2. Добровольное
    переключение контекста. Происходит
    когда выполняющийся процесс сам перешёл
    в ожидание.

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

htmlconvd 4cEYnC html b8af2fb19d00f99b

В состоянии ГОТОВ,
объект полностью готов к выполнению и
ждёт, когда ОС ему выделит время
процессора. В качестве претендента на
следующее выполнение ОС просматривает
только готовые процессы. Сразу после
его создания процесс…….

После того как
процесс выбран для выполнения (на ЦП),
его контекст восстанавливается, и он
переводится в состояние АКТИВЕН. В
активном состоянии процесс находится
до тех пор, пока не произойдёт оно из
следующих событий:

  1. Истёк
    квант времени, выделенный процессу для
    выполнения. ОС
    приостанавливает выполнение процесса,
    его контекст сохраняется и он переводится
    назад в очередь, а на его место запускается
    следующий процесс.

  2. За
    время работы процесса в очереди готовых
    появился процесс с более высоким
    приоритетом. ОС
    приостановит активный процесс, сохранит
    его контекст и опять по переходу 2
    переведёт его в состояние ГОТОВ, а на
    место него запустит более приоритетный
    процесс.

  3. За
    время своего выполнения, активный
    процесс перешел в ожидание какого-либо
    ресурса или события. В этом случае его
    контекст также сохраняется и он по
    переходу 3 переводится в состояние
    БЛОКИРОВАН, а на место него запускается
    следующий процесс. Переход 3- добровольное
    переключение контекста (процесса).

  4. Во
    время своего выполнения процесс
    завершился (5й переход). После этого
    процесс уничтожается. В состоянии
    БЛОКИРОВАН процесс находится до тех
    пор, пока не освободится ожидаемый
    ресурс или не произойдёт ожидаемое им
    событие. В этом случае процесс из
    состояния БЛОКИРОВАН переводится в
    состояние ГОТОВ и снова может конкурировать
    с другими процессами за время ЦП.

Мы рассмотрели
выполнение процессов в многозадачной
системе, когда время центрального
процессора выделяется процессом. Многие
современные ОС являются многопоточными.
То есть позволяют распараллеливать
вычисления внутри одного процесса путём
параллельного выполнения различных
функций процесса. Каждая такая
параллельно-выполняемая функция процесса
называется потоком.
Таким образом в многопоточных системах
каждый процесс может содержать несколько
потоков и время центрального процессора
в многопоточных системах уже выделяется
не процессом, а потоком, независимо от
того, к какому процессу они принадлежат.
Все потоки одного процесса работают в
едином адресном пространстве процессора,
и им доступны все ресурсы процесса,
независимо от того, какой поток эти
ресурсы создал. В многопоточной системе
схема для состояния процесса полностью
соответствует состоянию потока. В
многопоточных системах как правило с
потоками связывают уровень их приоритета
и в соответствии с этим приоритетом
помещают в очередь готовых. ОС выбирает
на выполнение самый высокоприоритетный
готовый поток. В многопоточных системах
есть 2 способа реализации параллельных
вычислений:

htmlconvd 4cEYnC html 4a6f707367ea5fbc

Либо организовать
b
и с как отдельные процессы, в каждом из
которых будет по одному потоку, либо
организовать их в один процесс, но каждой
ветке b
и c
организовать свой поток.

С точки зрения
времени выполнения и минимизации
используемых ресурсов лучше 2й вариант-
реализация параллельных ветвей алгоритма,
потому что потоки работают в едином
адресном пространстве и переключение
между ними не вызывает переключение
контекста процесса. Но параллельные
ветки алгоритма никак не защищены друг
от друга. Если параллельные ветки
необходимо защищать друг от друга, то
их лучше организовывать в вид отдельных
процессов, тогда каждая ветка будет
работать в своём адресом пространстве.

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

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Многопроцессорность (Мультипроцессорность, Многопроцессорная обработка, англ. Multiprocessing) — использование пары или большего количества физических процессоров в одной компьютерной системе. Термин также относится к способности системы поддержать больше чем один процессор и/или способность распределить задачи между ними. Существует много вариантов данного понятия, и определение многопроцессорности может меняться в зависимости от контекста, главным образом в зависимости от того, как определены процессоры (много ядер в одном кристалле, множество чипов в одном корпусе, множество корпусов в одном системном модуле, и т. д.).

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

Содержание

  • 1 Типы
    • 1.1 Процессорная симметричность
    • 1.2 Потоки команд и данных
    • 1.3 Соединения процессоров
  • 2 Программные реализации
    • 2.1 Многопроцессорная обработка с SISD
    • 2.2 Многопроцессорная обработка SIMD
    • 2.3 Многопроцессорная обработка MISD
    • 2.4 Многопроцессорная обработка MIMD
  • 3 Ссылки

Типы

Процессорная симметричность

В многопроцессорной системе все центральные процессоры могут быть равными, или некоторые могут быть зарезервированы для особых целей. Комбинация конструктивных соображений программного обеспечения аппаратной и операционной системы определяет симметрию (или отсутствие её) в данной системе. Например, аппаратные или программные соображения могут потребовать, чтобы только один центральный процессор отвечал на все аппаратные прерывания, тогда как вся другая работа в системе может быть распределена одинаково среди процессоров; или выполнение кода привилегированного режима может быть ограничено только одним процессором (или определенным процессором, или только один процессор за один раз), тогда как код непривилегированного режима может быть выполнен на любой комбинации процессоров. Часто многопроцессорные системы проще проектировать, если введены такие ограничения, но они имеют тенденцию быть менее эффективными чем системы, в которых используются все центральные процессоры.

Системы, которые обрабатывают все центральные процессоры одинаково, называют системами с симметричной многопроцессорной обработкой (SMP). В системах, где все центральные процессоры не равны, системные ресурсы могут быть разделены многими способами, в том числе асимметричной многопроцессорной обработкой (ASMP), многопроцессорной обработкой с неоднородным доступом к памяти (NUMA) и кластеризованной многопроцессорной обработкой (qq.v.).

Потоки команд и данных

В многопроцессорной обработке процессоры могут использоваться для выполнения одной последовательности команд во множественных контекстах (единственная машинная команда, множественные данные или SIMD, часто используемый в векторной обработке), множественные последовательности команд в единственном контексте («множественный поток команд, одиночный поток данных» или Архитектура MISD, используемая для избыточности в отказоустойчивых системах и иногда применяемая, чтобы описать конвеерные процессоры или гиперпоточность), или множественные последовательности команд во множественных контекстах («множественный поток команд, множественные поток данных» или MIMD).

Соединения процессоров

Многопроцессорные системы с сильной связью (англ. Tightly-coupled multiprocessor systems) содержат несколько процессоров, которые подключены на шинном уровне. Эти процессоры могут иметь доступ к центральной разделяемой памяти (SMP или UMA), или могут участвовать в иерархии памяти и с локальной и с разделяемой памятью (NUMA). IBM p690 Regatta является примером мощной системы SMP. Процессоры Intel Xeon доминировали над многопроцессорным рынком для деловых PC и были единственной x86-опцией до выпуска линейки процессоров AMD Opteron в 2004 году. Обе линейки процессоров имели свой собственный встроенный кэш, но по разному обеспечивают доступ к разделяемой памяти: процессоры Xeon через общий канал, а процессоры Opteron через независимые магистрали к системной оперативной памяти.

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

Многопроцессорные системы с гибкой связью (англ. Loosely-coupled multiprocessor systems), часто называемые кластерами, основаны на множественных автономных одиночных или двойных компьютерах, связанных через высокоскоростную систему связи (например, Gigabit Ethernet). Кластер Беовульфа под управлением Linux — пример гибко связанной системы.

Системы с сильной связью работают лучше и физически они меньше, чем гибко связанные системы, но исторически потребовали больших начальных инвестиций и могут быстро амортизовываться; узлы в гибко связанной системе — обычно недорогие компьютеры и могут быть использованы как независимые машины после удаления из кластера.

Системы с сильной связью имеют тенденцию быть намного больше энергоэффективными, чем кластеры. Значительная энергоэффективность достигается за счёт того, что компоненты в таких системах заранее проектируются для работы в конкретной системе, в то время как гибко связанные системы зачастую используют компоненты спроектированные для работы в более широком классе систем.

Программные реализации

Многопроцессорная обработка с SISD

Основная статья: SISD

В компьютере с одиночным потоком команд и одиночным потоком данных один процессор последовательно обрабатывает команды; каждая машинная команда обрабатывает один элемент данных. Пример — фон-неймановская архитектура.

Многопроцессорная обработка SIMD

Основная статья: SIMD

В компьютере с одиночным потоком команд и множественным потоком данных один процессор обрабатывает поток команд, каждая из которых может выполнить параллельные вычисления на множестве данных.

Многопроцессорная обработка SIMD хорошо подходит для параллельной или векторной обработки, в которой большой набор данных может быть разделён на части, которые обрабатываются идентичными, но независимым операциями. Одиночный поток команд направляет[куда?] операцию модулей мультипрограммирования для выполнения однотипных манипуляций одновременно на потенциально большом количестве данных.

Для определённых типов вычислительных приложений этот тип архитектуры может дать значительное увеличение производительности с точки зрения затраченного времени. Однако, недостаток этой архитектуры состоит в том, что большая часть системы начинает простаивать при выполнении программ или системных задач, которые не могут быть разделены на модули (подзадачи), которые могут быть обработаны параллельно.

Кроме того, программы должны быть тщательно и специально написаны, чтобы иметь возможность максимально задействовать возможности архитектуры. Часто применяются специальные оптимизирующие компиляторы, спроектированные чтобы создать код специально для использования в этой среде. Некоторые компиляторы в этой категории обеспечивают специальные конструкции или расширения, чтобы позволить программистам непосредственно определять операции, которые будут выполнены параллельно (например, операторы DO FOR ALL в Фортране, используемого на ILLIAC IV, который был многопроцессорным суперкомпьютером с SIMD-архитектурой).

Многопроцессорная обработка SIMD находит широкое применение в некоторых областях, таких как компьютерное моделирование, но малополезна в универсальном настольном компьютере и бизнес-задачах.

Многопроцессорная обработка MISD

Основная статья: MISD

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

Многопроцессорная обработка MIMD

Основная статья: MIMD

Архитектура многопроцессорной обработки MIMD является подходящей для большого числа разнообразных задач, в которых реализовано полностью независимое и параллельное выполнение команд, касающихся различных наборов данных. По этой причине и потому что это просто осуществить, MIMD преобладает в многопроцессорной обработке.

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

В MIMD могут возникнуть проблемы взаимной блокировки и состязания за обладание ресурсами, так как потоки, пытаясь получить доступ к ресурсам, могут столкнуться непредсказуемым способом. MIMD требует специального кодирования в операционной системе компьютера, но не требует изменений в прикладних программах, кроме случаев когда программы сами используют множественные потоки (MIMD прозрачен для однопоточных программ под управлением большинства операционных систем, если программы сами не отказываются от управления со стороны ОС). И системное и пользовательское программное обеспечение, возможно, должны использовать программные конструкции, такие как семафоры, чтобы препятствовать тому, чтобы один поток вмешался в другой, в случае если они содержат ссылку на одни и те же данные. Такое действие увеличивает сложность кода, снижает производительность и значительно увеличивают количество необходимого тестирования, хотя обычно не настолько чтобы свести на нет преимущества многопроцессорной обработки.

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

Ссылки

Аннотация: Основные термины и понятия, необходимые для обсуждения параллельных вычислений; общие подходы к созданию многопроцессорных вычислительных установок и планирование потоков в операционных системах.

Многозадачность в Windows

Для современных операционных систем и для различных систем программирования в современном мире поддержка разработки и реализация многозадачности стала необходимой. При этом на применяемые решения влияет значительное число факторов.

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

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

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

Основные понятия

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

  • Мультипроцессирование — использование нескольких процессоров для одновременного выполнения задач.
  • Мультипрограммирование — одновременное выполнение нескольких задач на одном или нескольких процессорах.

В завершение знакомства укажем некоторые термины, определяющие базовые понятия, которыми оперируют операционные системы.

Мультипроцессирование

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

Разные подходы к реализации мультипроцессирования

Рис.
6.1.
Разные подходы к реализации мультипроцессирования

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

Кроме того, очень часто используются многопроцессорные вычислительные системы, в которых используется несколько центральных процессоров. Сложилось несколько подходов к созданию таких компьютеров:

  • наиболее массовыми являются так называемые SMP (Shared Memory Processor или Symmetric MultiProcessor) машины. В таких компьютерах несколько процессоров подключены к общей оперативной памяти и имеют к ней равноправный и конкурентный доступ (см. рис. 6.2). По мере увеличения числа процессоров производительность оперативной памяти и коммутаторов, связывающих процессоры с памятью, становится критически важной. Обычно в SMP используются 2-8 процессоров; реже число процессоров достигает десятков. Взаимодействие одновременно выполняющихся процессов осуществляется посредством использования общей памяти, к которой имеют равноправный доступ все процессоры.

    SMP компьютер

    Рис.
    6.2.
    SMP компьютер

  • при необходимости создания систем с качественно большим числом процессоров прибегают к MPP (Massively Parallel Processors) системам. Для этого используют несколько однопроцессорных или SMP-систем, объединяемых с помощью некоторого коммуникационного оборудования в единую сеть (см. рис. 6.3). При этом может применяться как специализированная высокопроизводительная среда передачи данных, так и обычные сетевые средства — типа Ethernet. В MPP системах оперативная память каждого узла обычно изолирована от других узлов, и для обмена данными требуется специально организованная пересылка данных по сети. Для MPP систем критической становится среда передачи данных; однако в случае мало связанных между собой процессов возможно одновременное использование большого числа процессоров. Число процессоров в MPP системах может измеряться сотнями и тысячами.

    MPP система

    Рис.
    6.3.
    MPP система

  • иногда используют так называемые NUMA и cc-NUMA архитектуры; они являются компромиссом между SMP и MPP системами: оперативная память является общей и разделяемой между всеми процессорами, но при этом память неоднородна по времени доступа. Каждый процессорный узел имеет некоторый объем оперативной памяти, доступ к которой осуществляется максимально быстро; для доступа к памяти другого узла потребуется значительно больше времени (см. рис. 6.4). cc-NUMA отличается от NUMA тем, что в ней на аппаратном уровне решены вопросы когерентности кэш-памяти (cache-coherent) различных процессоров. Формально на NUMA системах могут работать обычные операционные системы, созданные для SMP систем, хотя для обеспечения высокой производительности приходится решать нетипичные для SMP задачи оптимального размещения данных и планирования с учетом неоднородности памяти.

    NUMA или cc-NUMA система

    Рис.
    6.4.
    NUMA или cc-NUMA система

Таким образом, с точки зрения реализации мультипроцессирования, для разработчиков ПО важно иметь представление о том, каковы средства взаимодействия между параллельно работающими ветвями кода — общая память с равноправным или неравноправным доступом, либо некоторая коммуникационная среда с механизмом пересылки данных. Наибольшее распространение получили SMP и MPP системы, соответственно, большинство операционных систем содержат необходимые средства для эффективного управления SMP системами. Для реализации MPP систем, как правило, используются обычные операционные системы на всех узлах и либо обычные сетевые технологии, с применением распространенных стеков протоколов, либо специфичное коммуникационное оборудование со своими собственными драйверами и собственными средствами взаимодействия с приложениями. NUMA системы распространены в меньшей степени, хотя выпускаются серийно. Нормальным при этом является применение массовых операционных систем, рассчитанных на SMP установки, несмотря на то, что это несколько снижает эффективность использования NUMA.

Windows содержит встроенные механизмы, необходимые для работы на SMP; также возможна установка этой ОС на cc-NUMA системах (современные версии Windows имеют механизмы поддержки cc-NUMA систем). Специальных, встроенных в ОС средств для исполнения приложений на MPP системах в Windows не предусмотрено. Windows предполагает альтернативное применение MPP систем, построенных на обычных сетях, для реализации web- или файловых серверов с балансировкой нагрузки по узлам кластера.

Мультипрограммирование

Мультипрограммирование (то есть одновременное выполнение разного кода на одном или нескольких процессорах) возможно и без реального мультипроцессирования. Конечно, при наличии только одного процессора должен существовать некоторый механизм, обеспечивающий переключение процессора между разными выполняемыми потоками. Такой режим разделения процессорного времени позволяет одному процессору обслуживать несколько задач «как бы одновременно»: осуществляя быстрое переключение между разными задачами и выполняя в данный момент времени код только одной задачи, процессор создает иллюзию одновременного выполнения кода разных задач. Более того, даже на многопроцессорных системах при реальной возможности распараллеливания задач по разным процессорам, обычно используют механизм разделения времени на каждом из доступных процессоров. Формально мультипрограммирование предполагает именно разделение процессорного времени, поэтому иногда его противопоставляют мультипроцессированию: реализация многозадачности на одном процессоре в противовес использованию многих процессоров.

Важно подчеркнуть, что мультипрограммирование предполагает управление одновременно выполняющимися приложениями пользователя, а не вообще всяким кодом. Любая реальная вычислительная система должна предусматривать специальные меры для своевременного обслуживания поступающих прерываний, исключений и остановок. Такое обслуживание должно выполняться независимо от работы приложений пользователя и в большинстве случаев имеет абсолютный приоритет над приложениями, так как задержка в обработке подобных событий чревата возникновением неустранимых сбоев и потерь данных. В результате операционные системы предоставляют некоторый механизм, обслуживающий возникающие прерывания и только в промежутках между прерываниями — приложения пользователя. Более того, поскольку аппаратные прерывания происходят в большинстве случаев асинхронно по отношению к приложениям и по отношению к другим прерываниям, то получается так, что система должна содержать два планировщика или диспетчера — один для прерываний, другой для приложений. Работа диспетчера прерываний здесь не рассматривается, поскольку относится сугубо к ядру операционной системы и практически не затрагивает работу приложений.

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

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

Планирование задач

Рис.
6.5.
Планирование задач

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

Понятия абсолютных и относительных приоритетов связаны с их влиянием на момент переключения с одной задачи на другую: в системах с абсолютными приоритетами такое переключение выполняется, как только в очереди готовых к исполнению задач появляется задача с более высоким приоритетом, чем выполняемая. В системах с относительными приоритетами появление более приоритетной задачи не приводит к немедленному переключению — момент переключения задач будет определяться по каким-либо иным критериям.

Выделяют понятия вытесняющей и невытесняющей многозадачности: в случае невытесняющей многозадачности решение о переключении принимает выполняемая в данный момент задача, а в случае вытесняющей многозадачности такое решение принимается операционной системой (или иным арбитром), независимо от работы активной в данный момент задачи.

На приведенном графе состояний задачи (см. рис. 6.6) прямая линия от состояния «выполнение» к состоянию «готовность» нарисована пунктиром, чтобы выделить отличие невытесняющей многозадачности от вытесняющей. В случае невытесняющей многозадачности выполняющаяся задача может либо завершиться, либо перейти в состояние «ожидание».

Граф состояния задачи

Рис.
6.6.
Граф состояния задачи

И тот, и другой переходы определены логикой работы самой задачи. На графе состояний задачи в случае невытесняющей многозадачности пунктирной линии от состояния «выполнение» к состоянию «готовность» не будет. В случае вытесняющей многозадачности вытеснение осуществляется по решению системы, а не только по инициативе задачи.

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

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

Характерный пример невытесняющей многозадачности — 16-ти разрядные Windows (включая собственно 16-ти разрядные версии Windows, выполнение 16-ти разрядных приложений в Windows-95, 98, ME и выполнение 16-ти разрядных приложений в рамках одной Windows-машины в NT, 2000, XP и 2003). В таких приложениях операционная система не прерывает выполнение текущей задачи до вызова ею функций типа GetMessage или WaitMessage, во время которых Windows осуществляет при необходимости переключение на другую задачу.

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

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

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

Большинство современных операционных систем используют комбинированные планировщики, одновременно применяющие квантование с переменной продолжительностью кванта и абсолютные или относительные приоритеты (см. рис. 6.7).

Моменты перепланирования задач

Рис.
6.7.
Моменты перепланирования задач

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

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

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

Реализации Windows NT, 2000, XP, 2003+ предусматривают достаточно развитый и сложный планировщик, учитывающий множество факторов и корректирующий как назначение и длительность отводимых задаче квантов, так и приоритеты задач. При этом планировщик является настраиваемым, и его логика работы несколько отличается в зависимости от настроек системы (некоторые доступны через панель управления) и от назначения системы (работа планировщика различна у серверов и рабочих станций).

Важно отметить, что Windows является гибкой системой разделения времени с вытесняющей многозадачностью и не может рассматриваться в качестве системы реального времени. Даже те процессы, которые с точки зрения Windows относятся к классу процессов так называемого «реального времени», на самом деле требованиям, предъявляемым к системам реального времени, не удовлетворяют. Такие процессы получат приоритетное распределение процессорного времени и будут обрабатываться планировщиком с учетом их «особого статуса»; однако при этом нельзя гарантировать строгого выполнения временных ограничений. Более того, в силу используемых механизмов управления памятью, нельзя точно предсказать время, необходимое для выполнения той или иной операции. В любой момент времени при самом невинном обращении к какой-либо переменной или функции может потребоваться обработка ошибок доступа, подкачка выгруженных страниц, освобождение памяти и т.д. — то есть действия, время завершения которых предсказать крайне трудно. Фактически можно давать лишь вероятностные прогнозы по времени выполнения той или иной операции. До определенных рамок Windows можно применять в мягких системах реального времени — с достаточно свободными ограничениями, но даже незначительная вероятность превышения временных ограничений иногда просто недопустима.

Базовая терминология

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

Процесс является объектом планирования адресного пространства и некоторых ресурсов, выделенных задаче. Но при этом процесс не является потребителем процессорного времени и не подлежит планированию.

Поток является объектом планирования процессорного времени. Дополнительно к этому с потоком ассоциируют некоторые другие свойства, например, пользователя, — это позволяет потокам даже одного процесса действовать от имени разных пользователей (воплощение) и использовать механизмы ограничения доступа к ресурсам операционной системы. Например, сервер, предоставляющий доступ к каким-либо файлам, может создать поток, обслуживающий конкретного клиента, и воплотить его с правами доступа, назначенными этому клиенту. Однако в данный момент для нас важно, что управление процессорным временем осуществляется применительно к потокам, а управление адресным пространством — применительно к процессам; каждый процесс содержит, как минимум, один поток.

Принято также деление потоков на потоки ядра и потоки пользователя (эти термины тоже неоднозначны). Потоки ядра в данном контексте являются потоками, для управления которыми предназначен планировщик, принадлежащий ядру операционной системы. Потоки пользователя при этом рассматриваются как потоки, которые управляются планировщиком пользовательского процесса. Строго говоря, потоки пользователя являлись переходным этапом между «задачами» и «процессами»: с точки зрения операционной системы использовались «задачи», которым выделялись и ресурсы, и процессорное время, тогда как разделение «задачи» на «потоки» осуществлялось непосредственно в самом приложении.

В Windows для обозначения этих понятий использованы термины process (процесс), thread (поток) и fiber (волокно). Достаточно часто термин «thread» переводится на русский язык как «нить», а не «поток». Термин «fiber» также может переводиться либо как «нить», либо как «волокно». Поток соответствует потоку ядра и планируется ядром операционной системы, а волокно соответствует потоку пользователя и планируется в приложении пользователя.

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

4.1. Мультипрограммирование

Мультипрограммирование


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

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

http://lcg.tpu.ru/OPSYS_0961/img/3_1.gif

Рисунок 5 – Пример выполнения двух программ в мультипрограммном режиме

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

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

· пропускная способность – количество задач, выполняемых вычислительной системой в единицу времени;

Рекомендуемые материалы

· удобство работы пользователей, заключающееся, в частности, в том, что они имеют возможность интерактивно работать одновременно с несколькими приложениями на одной машине;

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

Как было отмечено выше в п. 2.2, в зависимости от выбранного критерия эффективности, ОС делят на системы пакетной обработки, системы разделения времени и системы реального времени, каждая из которых имеет свои особенности реализации мультипрограммирования, причем некоторые ОС могут поддерживать несколько режимов. Учитывая все это, рассмотрим более подробно особенности реализации мультипрограммирования для каждого из рассмотренных типов ОС.

http://lcg.tpu.ru/web-ct/ru/img/shim.gif
4.1.1. Мультипрограммирование в системах пакетной обработки

Мультипрограммирование в системах пакетной обработки


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

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

Для достижения этой цели в системах пакетной обработки используется следующая схема функционирования. В начале работы формируется пакет заданий, каждое из которых содержит требование к системным ресурсам. Из пакета заданий формируется мультипрограммная «смесь», то есть множество одновременно выполняемых задач. Для одновременного выполнения выбираются задачи, предъявляющие разные требования к ресурсам, так, чтобы обеспечивалась сбалансированная загрузка всех устройств вычислительной машины. Например, в мультипрограммной смеси желательно одновременное присутствие вычислительных задач и задач с интенсивным вводом-выводом.

Таким образом, выбор нового задания из пакета заданий зависит от внутренней ситуации, складывающейся в системе, то есть выбирается «выгодное» в некотором смысле задание. Следовательно, в вычислительных системах, работающих под управлением пакетных ОС, невозможно гарантировать выполнение того или иного задания в течение определенного периода времени. Кроме того, переключение процессора с выполнения одной задачи на выполнение другой происходит по инициативе самой активной задачи, например, когда она отказывается от процессора из-за необходимости выполнить операцию ввода-вывода. Поэтому существует высокая вероятность того, что одна задача может надолго занять процессор и выполнение интерактивных задач станет невозможным.

Взаимодействие пользователя с вычислительной машиной, на которой установлена система пакетной обработки, сводится к тому, что он приносит задание, отдает его диспетчеру-оператору, а в конце дня после выполнения всего пакета заданий получает результат. Очевидно, что такой порядок повышает эффективность функционирования аппаратуры, но снижает эффективность работы пользователя.

http://lcg.tpu.ru/web-ct/ru/img/shim.gif
4.1.2. Мультипрограммирование в системах разделения времени

Мультипрограммирование в системах разделения времени


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

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

Очевидно, что системы разделения времени обладают меньшей пропускной способностью, чем системы пакетной обработки, так как на выполнение принимается каждая запущенная пользователем задача, а не та, которая «выгодна» системе. Кроме того, производительность системы снижается из-за возросших накладных расходов вычислительной мощности на более частое переключение процессора с задачи на задачу. Это вполне соответствует тому, что критерием эффективности систем разделения времени является не максимальная пропускная способность, а удобство и эффективность работы пользователя. Вместе с тем мультипрограммное выполнение интерактивных приложений повышает пропускную способность компьютера (пусть и не в такой степени, как пакетные системы). Аппаратура загружается более эффективно, поскольку в то время, пока одно приложение ждет сообщения пользователя, другие приложения могут обрабатываться процессором.

http://lcg.tpu.ru/web-ct/ru/img/shim.gif
4.1.3. Мультипрограммирование в системах реального времени

Мультипрограммирование в системах реального времени


Еще одна разновидность мультипрограммирования используется ОСРВ, предназначенных, как отмечено выше в п. 2.2, для управления с помощью компьютера различными техническими объектами или технологическими процессами. Критерием эффективности этих систем является способность выдерживать заранее заданные интервалы времени между запуском программы и получением результата (управляющего воздействия). Это время называется временем реакции системы, а соответствующее свойство системы – реактивностью. Требования ко времени реакции зависят от специфики управляемого процесса.

В ОСРВ «мультипрограммная смесь» представляет собой фиксированный набор заранее разработанных программ, а выбор программы на выполнение осуществляется по прерываниям (исходя из текущего состояния объекта) или в соответствии с расписанием плановых работ.

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

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

http://lcg.tpu.ru/web-ct/ru/img/shim.gif
4.1.4. Мультипрограммирование при мультипроцессорной обработке

Мультипрограммирование при мультипроцессорной обработке


Мультипроцессорная обработка – это способ организации вычислительного процесса в системах с несколькими процессорами, при котором несколько задач (процессов, потоков) могут одновременно выполняться на разных процессорах системы.

Мультипроцессорные вычислительные системы начали появляться с середины 80-х гг. и к настоящему моменту обычным делом является наличие нескольких процессоров даже в архитектуре персонального компьютера. Более того, многопроцессорность теперь является одним из необходимых требований, которые предъявляются к компьютерам, используемым в качестве центрального сервера крупной вычислительной сети.

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

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

Мультипроцессорные системы разделяют на симметричные и несимметричные (асимметричные). При этом следует четко разделять, к какому аспекту мультипроцессорной системы относится эта характеристика – к типу архитектуры или к способу организации вычислительного процесса. Сначала рассмотрим особенности такого разделения с точки зрения архитектуры.

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

В настоящее время функции поддержки симметричной мультипроцессорной обработки данных имеются во всех популярных ОС, таких как MS Windows NT Workstation 4.0, Microsoft Windows Server 2003, Windows XP Professional, QNX Neutrino.

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

В асимметричной архитектуре разные процессоры могут отличаться как своими характеристиками (производительностью, надежностью, системой команд и т.д., вплоть до модели микропроцессора), так и функциональной ролью, которая поручается им в системе. Например, одни процессоры могут предназначаться для работы в качестве основных вычислителей, другие – для управления подсистемой ввода-вывода, третьи – для каких-то иных целей.

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

Масштабирование в асимметричной архитектуре реализуется иначе, чем в симметричной. В связи с тем, что требование «единого корпуса» отсутствует, система может состоять из нескольких устройств, каждое из которых содержит один или несколько процессоров – масштабирование по горизонтали. Каждое такое устройство называется кластером, а вся мультипроцессорная система – кластерной.

Рассмотрев особенности организации мультипроцессорных систем с точки зрения архитектуры, отметим особенности их организации с точки зрения вычислительного процесса.

Асимметричное мультипроцессирование является наиболее простым способом организации вычислительного процесса в системах с несколькими процессорами. Этот способ иногда условно называют «ведущий-ведомый». Функционирование системы по принципу «ведущий-ведомый» предполагает выделение одного из процессоров в качестве «ведущего», на котором работает ОС и который управляет всеми остальными «ведомыми» процессорами. В этом случае «ведущий» процессор берет на себя функции распределения задач и ресурсов, а «ведомые» процессоры работают только как обрабатывающие устройства и никаких действий по организации работы вычислительной системы не выполняют. Учитывая то, что ОС работает исключительно на одном процессоре и функции управления централизованы, то такая система по сложности схожа с ОС однопроцессорной системы.

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

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

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

http://lcg.tpu.ru/web-ct/ru/img/shim.gif
4.1.5. Роль прерываний при мультипрограммировании

Роль прерываний при мультипрограммировании


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

Идея прерывания была предложена в середине 50-х годов и можно без преувеличения сказать, что она внесла наиболее весомый вклад в развитие вычислительной техники. Основная цель введения прерываний – реализация асинхронного режима функционирования и распараллеливание работы отдельных устройств вычислительного комплекса.

Механизм прерываний реализуется аппаратно-программными средствами вычислительной системы. Структуры систем прерывания (в зависимости от аппаратной архитектуры) могут быть самыми разными, но все они имеют одну общую особенность – прерывание непременно влечет за собой изменение порядка выполнения команд процессором.

В зависимости от источника все прерывания делят на два класса:

· аппаратные (внешние и внутренние);

· программные.

Аппаратные (англ. Interrupt Request – IRQ) – события от периферийных устройств или события в микропроцессоре, возникающие вследствие подачи некоторой аппаратурой электрического сигнала, который передается на специальный вход прерывания процессора. При этом внешними будут прерывания, инициированные периферийными устройствами (например, нажатия клавиш клавиатуры, движение мыши, сигнал от таймера, сетевой карты или дискового накопителя), а внутренними – те, что происходят в микропроцессоре.

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

Внутренние прерывания, называемые также исключениями (англ. exception), происходят в микропроцессоре и инициируются синхронно выполнению программы при появлении аварийной ситуации в ходе исполнения некоторой инструкции программы – возникают непосредственно в ходе выполнения тактов команды («внутри» выполнения). Примерами исключений являются деление на нуль, ошибки защиты памяти, обращения по несуществующему адресу, попытка выполнить привилегированную инструкцию в пользовательском режиме и т.п.

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

Механизм обработки прерываний независимо от архитектуры вычислительной системы подразумевает выполнение некоторой последовательности шагов.

Шаг 1. Установление факта прерывания (прием сигнала запроса на прерывание) и идентификация прерывания (в ОС идентификация прерывания иногда осуществляется повторно, на шаге 4).

Шаг 2. Запоминание состояния прерванного процесса вычислений. Состояние процесса выполнения программы определяется, прежде всего, значением счетчика команд (адресом следующей команды), содержимым регистров процессора, и может включать также спецификацию режима (например, режим пользовательский или привилегированный) и другую информацию.

Шаг 3. Управление аппаратно передается на подпрограмму обработки прерывания. В простейшем случае в счетчик команд заносится начальный адрес подпрограммы обработки прерываний, а в соответствующие регистры – информация из слова состояния.

Шаг 4. Сохранение информации о прерванной программе, которую не удалось спасти на шаге 2 с помощью аппаратуры. В некоторых процессорах предусматривается запоминание довольно большого объема информации о состоянии прерванных вычислений.

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

Шаг 6. Восстановление информации, относящейся к прерванному процессу (этап, обратный шагу 4).

Шаг 7. Возврат на прерванную программу.

Следует отметить, что шаги 1-3 реализуются аппаратно, а шаги 4-7 – программно.

Главные функции механизма прерываний – это:

· распознавание или классификация прерываний;

· передача управления соответствующему обработчику прерываний;

· корректное возвращение к прерванной программе.

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

http://lcg.tpu.ru/OPSYS_0961/img/3_1_5-1.gif

Рисунок 6 – Обобщенная схема обработки прерывания

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

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

Из рис. 6 видно, что в схеме обработки прерывания имеется две служебные секции – в первой осуществляется сохранение контекста прерванных вычислений, а в заключительной – наоборот, восстановление этого контекста. Для того, чтобы система не среагировала повторно на сигнал запроса на прерывание, выполняется защита от повторного срабатывания, поэтому система обработки обычно автоматически «закрывает» (отключает) прерывания, и необходимо позже в подпрограмме обработки прерываний вновь включать систему прерываний. В конце первой секции подпрограммы обработки осуществляется установка режимов приоритетов обработки прерываний. Таким образом, на время выполнения центральной секции прерывания разрешены. На время работы заключительной секции подпрограммы обработки система прерываний вновь должна быть отключена, и после восстановления контекста опять включена. Поскольку эти действия необходимо выполнять практически в каждой подпрограмме обработки прерываний, во многих ОС первые секции подпрограмм обработки прерываний выделяются в специальный системный программный модуль – супервизор прерываний.

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

Организация обработки прерывания при участии супервизора представлена на рис. 7

http://lcg.tpu.ru/OPSYS_0961/img/3_1_5-2.gif

Рисунок 7 – Обработка прерывания при участии супервизора

Как видно из представленной схемы, здесь отсутствует возврат в прерванную ранее программу непосредственно из самой подпрограммы обработки прерывания. Для прямого возврата достаточно адрес возврата сохранить в стеке, что и делает аппаратура процессора. При этом стек легко обеспечивает возможность возврата в случае вложенных прерываний, поскольку он всегда реализует дисциплину LCFS. Супервизор прерываний сохраняет в дескрипторе текущей задачи рабочие регистры процессора, определяющие контекст прерываемого вычислительного процесса. Далее он определяет ту подпрограмму, которая должна выполнить действия, связанные с обслуживанием настоящего (текущего) запроса на прерывание. Наконец, перед тем, как передать управление на эту подпрограмму, супервизор прерываний устанавливает необходимый режим обработки прерывания (осуществляется маскирование, определяющее запрет некоторых сигналов прерывания). После выполнения подпрограммы обработки прерывания управление вновь передается ядру ОС. На этот раз уже на тот модуль, который занимается диспетчеризацией задач (см. п. 3). И уже диспетчер задач, в свою очередь, в соответствии с принятой дисциплиной распределения процессорного времени (между выполняющимися вычислительными процессами) восстановит контекст той задачи, которой будет решено выделить процессор.

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

Вместе с этой лекцией читают «7.3. Информационные технологии экспертной деятельности».

На рис. 8 изображен обычный порядок (приоритеты) обработки прерываний в зависимости от типа прерываний.

http://lcg.tpu.ru/OPSYS_0961/img/3_1_5-3.gif

Рисунок 8 – Распределение прерываний по уровням приоритета

Например, если приоритет запрашиваемого прерывания ниже приоритета средства контроля процессора, то в этом случае прерывания не произойдет.

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

Многопроцессорность (Мультипроцессорность, Многопроцессорная обработка, англ. Multiprocessing) — использование пары или большего количества физических процессоров в одной компьютерной системе.

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

Операционная система или программа называется многопроцессорной, если способна распределять задачи между процессорами (см. многопоточность).

Существует много вариантов данного понятия, и определение многопроцессорности может меняться в зависимости от контекста, главным образом в зависимости от того, как определены процессоры (много ядер в одном кристалле, множество чипов в одном корпусе, множество корпусов в одном системном модуле и так далее).

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

Типы

Процессорная симметричность

В многопроцессорной системе все центральные процессоры могут быть равными, или некоторые могут быть зарезервированы для особых целей. Комбинация конструктивных соображений программного обеспечения аппаратной и операционной системы определяет симметрию (или отсутствие её) в данной системе. Например, аппаратные или программные соображения могут потребовать, чтобы только один центральный процессор отвечал на все аппаратные прерывания, тогда как вся другая работа в системе может быть распределена одинаково среди процессоров; или выполнение кода привилегированного режима может быть ограничено только одним процессором (или определенным процессором, или только один процессор за один раз), тогда как код непривилегированного режима может быть выполнен на любой комбинации процессоров. Часто многопроцессорные системы проще проектировать, если введены такие ограничения, но они имеют тенденцию быть менее эффективными чем системы, в которых используются все центральные процессоры.

Системы, которые обрабатывают все центральные процессоры одинаково, называют системами с симметричной многопроцессорной обработкой (SMP). В системах, где все центральные процессоры не равны, системные ресурсы могут быть разделены многими способами, в том числе асимметричной многопроцессорной обработкой (ASMP), многопроцессорной обработкой с неоднородным доступом к памяти (NUMA) и кластеризованной многопроцессорной обработкой (qq.v.).

Потоки команд и данных

В многопроцессорной обработке процессоры могут использоваться для выполнения одной последовательности команд во множественных контекстах (единственная машинная команда, множественные данные или SIMD, часто используемый в векторной обработке), множественные последовательности команд в единственном контексте («множественный поток команд, одиночный поток данных» или Архитектура MISD, используемая для избыточности в отказоустойчивых системах и иногда применяемая, чтобы описать конвейерные процессоры или гиперпоточность), или множественные последовательности команд во множественных контекстах («множественный поток команд, множественные поток данных» или MIMD).

Соединения процессоров

Многопроцессорные системы с сильной связью (англ. Tightly-coupled multiprocessor systems) содержат несколько процессоров, которые подключены на шинном уровне. Эти процессоры могут иметь доступ к центральной разделяемой памяти (SMP или UMA), или могут участвовать в иерархии памяти и с локальной и с разделяемой памятью (NUMA). IBM p690 Regatta является примером мощной системы SMP. Процессоры Intel Xeon доминировали над многопроцессорным рынком для деловых PC и были единственной x86-опцией до выпуска линейки процессоров AMD Opteron в 2004 году. Обе линейки процессоров имели свой собственный встроенный кэш, но по-разному обеспечивают доступ к разделяемой памяти: процессоры Xeon через общий канал, а процессоры Opteron через независимые магистрали к системной оперативной памяти.

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

Многопроцессорные системы с гибкой связью (англ. Loosely-coupled multiprocessor systems), часто называемые кластерами, основаны на множественных автономных одиночных или двойных компьютерах, связанных через высокоскоростную систему связи (например, Gigabit Ethernet). Кластер Беовульфа под управлением Linux — пример гибко связанной системы.

Системы с сильной связью работают лучше и физически они меньше, чем гибко связанные системы, но исторически потребовали больших начальных инвестиций и могут быстро амортизовываться; узлы в гибко связанной системе — обычно недорогие компьютеры и могут быть использованы как независимые машины после удаления из кластера.

Системы с сильной связью имеют тенденцию быть намного больше энергоэффективными, чем кластеры. Значительная энергоэффективность достигается за счёт того, что компоненты в таких системах заранее проектируются для работы в конкретной системе, в то время как гибко связанные системы зачастую используют компоненты спроектированные для работы в более широком классе систем.

Программные реализации

Многопроцессорная обработка с SISD

Основная статья: SISD

В компьютере с одиночным потоком команд и одиночным потоком данных один процессор последовательно обрабатывает команды; каждая машинная команда обрабатывает один элемент данных. Пример — фон-неймановская архитектура.

Многопроцессорная обработка SIMD

Основная статья: SIMD

В компьютере с одиночным потоком команд и множественным потоком данных один процессор обрабатывает поток команд, каждая из которых может выполнить параллельные вычисления на множестве данных.

Многопроцессорная обработка SIMD хорошо подходит для параллельной или векторной обработки, в которой большой набор данных может быть разделён на части, которые обрабатываются идентичными, но независимыми операциями. Одиночный поток команд направляет операцию модулей мультипрограммирования для выполнения однотипных манипуляций одновременно на потенциально большом количестве данных.

Для определённых типов вычислительных приложений этот тип архитектуры может дать значительное увеличение производительности с точки зрения затраченного времени. Однако, недостаток этой архитектуры состоит в том, что большая часть системы начинает простаивать при выполнении программ или системных задач, которые не могут быть разделены на модули (подзадачи), которые могут быть обработаны параллельно.

Кроме того, программы должны быть тщательно и специально написаны, чтобы иметь возможность максимально задействовать возможности архитектуры. Часто применяются специальные оптимизирующие компиляторы, спроектированные чтобы создать код специально для использования в этой среде. Некоторые компиляторы в этой категории обеспечивают специальные конструкции или расширения, чтобы позволить программистам непосредственно определять операции, которые будут выполнены параллельно (например, операторы DO FOR ALL в Фортране, используемого на ILLIAC IV, который был многопроцессорным суперкомпьютером с SIMD-архитектурой).

Многопроцессорная обработка SIMD находит широкое применение в некоторых областях, таких как компьютерное моделирование, но малополезна в универсальном настольном компьютере и бизнес-задачах.

Многопроцессорная обработка MISD

Основная статья: MISD

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

Многопроцессорная обработка MIMD

Основная статья: MIMD

Архитектура многопроцессорной обработки MIMD является подходящей для большого числа разнообразных задач, в которых реализовано полностью независимое и параллельное выполнение команд, касающихся различных наборов данных. По этой причине и потому что это просто осуществить, MIMD преобладает в многопроцессорной обработке.

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

В MIMD могут возникнуть проблемы взаимной блокировки и состязания за обладание ресурсами, так как потоки, пытаясь получить доступ к ресурсам, могут столкнуться непредсказуемым способом. MIMD требует специального кодирования в операционной системе компьютера, но не требует изменений в прикладных программах, кроме случаев когда программы сами используют множественные потоки (MIMD прозрачен для однопоточных программ под управлением большинства операционных систем, если программы сами не отказываются от управления со стороны ОС). И системное и пользовательское программное обеспечение, возможно, должны использовать программные конструкции, такие как семафоры, чтобы препятствовать тому, чтобы один поток вмешался в другой, в случае если они содержат ссылку на одни и те же данные. Такое действие увеличивает сложность кода, снижает производительность и значительно увеличивают количество необходимого тестирования, хотя обычно не настолько чтобы свести на нет преимущества многопроцессорной обработки.

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

Ссылки

  • Современные операционные системы (пер. с англ.), Эндрю С. Таненбаум. Глава 8.1 Мультипроцессоры (англ.)
  • multiprocessing — Encyclopædia Britannica, Inc.

modif
Эта страница в последний раз была отредактирована 11 мая 2020 в 03:31.

Как только страница обновилась в Википедии она обновляется в Вики 2.
Обычно почти сразу, изредка в течении часа.

Понравилась статья? Поделить с друзьями:
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Мультипроцессирование multiprocessing это режим работы
  • Мулинское рыбоводное хозяйство режим работы
  • Мультипрограммный режим работы это