Взаимодействие параллельных процессов

Сущность, основные способы реализации механизмов синхронизации, характерные задачи. Особенности схемы "производитель-потребитель", "Читатель и писатель". Главные вопросы построения механизмов синхронизации. Процесс использования семафоров, их построение.

Рубрика Программирование, компьютеры и кибернетика
Вид лекция
Язык русский
Дата добавления 09.10.2013
Размер файла 42,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Лекция

Взаимодействие параллельных процессов

1. Задачи синхронизации

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

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

Часто механизм синхронизации выполняет 2 функции: упорядочивают развитие процессов, обеспечивают информационное взаимодействие.

Число задач синхронизации не ограничено, но сущ. некоторые типичные случаи:

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

2) критические области не должны иметь приоритет в отношении друг друга.

3) остановка процесса вне КО никак не влияет на работу других процессов по использованию КО

4) для одновременно поступивших запросов от равно приоритетных процессов, решение о вхождении в КО конечного времени.

5) скорости развития процессов неизвестны и произвольны.

6) любой процесс переходит в любое неактивное состояние только за пределами КО.

7) процесс использует КО конечное время.

Задача «Производитель-потребитель»

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

Для согласования работы двух процессов необходимо:

выполнение задачи взаимного исключения для общей памяти.

учет состояния общей памяти: возможна или нет пересылка сообщения.

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

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

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

Эта задача реализована - используется при реализации конвейерных команд (dir | sort).

«Читатель и писатель»

Существует 2 типа процессов: читатели -- могут могут одновременно читать информацию из области; писатели могут писать информацию, исключая как друг друга, так и читателей (т.е. запись идет с условиями задачи взаимного исключения).

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

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

«Обедающие философы»

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

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

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

Возможны 2 ситуации:

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

Голодание отдельного философа в случае заговора его соседей. Каждый раз, когда он собирается поесть, то слева, то справа забирают вилку.

Используется при построении системы использования ресурсов.

2. Основные вопросы построения механизмов синхронизации

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

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

На промежутке tко КО имеет свойство неделимости, что необходимо для задачи взаимного исключения.

Достоинства: простота.

Недостатки:

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

2) во время tко машина никак не реагирует на внутренние и внешние события, другие процессы не могут развиваться, а текущий процесс становится монопольным хозяином не только КР но и ЦП.

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

синхронизация семафор потребитель

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

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

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

Действия при занятости основного ресурса могут быть: режим «занято»: процесс сам должен периодически проверять освобождение ресурса режим пассивного ожидания -- активный процесс переводится в состояние Blocked.

Требуется организовать очередь к ресурсу со всеми ее атрибутами (формирование, обслуживание и т.д.)

3. Использование семафоров

Понятие семафор введено в 75 г. {Дейлстром}.

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

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

Примеры:

Для простых семафоров возможны следующие варианты значений:

любые целые значения С

любые целые неотрицательные значения С

Особый случай - двоичный семафор.

Обобщенный алгоритм Р примитива:

Проверить значение S, если оно >0, перейти к выполнению следующей команды, если <=0 (S закрыт) перевести процесс в состояние пассивного ожидания, уменьшив S на 1. Процесс “засыпает” по С.

V-примитив

S увеличиваем на 1 и “будим” одного или несколько спящих процессов по С - перевод в очередь готовых процессов из блокировки.

Пример Р примитива:

S:=S-1;

If S<0 then

Перевести процесс в очередь к S (блокировка)

Else

Работа с КР

V - примитив

If S<0 then

Перевести один или несколько процессов в состояние READY;

S:=S+1;

Пример использования семафора:

Begin

S:=1;

StartParallelProcess ;

1: ... P(S); KO; V'(S); ...

2: ... P(S); KO; V'(S); ...

:

StopParallelProcess;

End.

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

Вариант первый.

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

В этом случае возможен тупик.

S=1

P1 - S=0 ;

P2 - S= -1 ; “заснул”

V1 - S=0

P2 - S= -1 ; ”заснул”

P1 - S= -2 ; “заснул”

В случае использования другого алгоритма - этого нет.

При S<0 (когда семафор закрыт); ABS(S) определяет длину очереди к семафору из заснувших процессов. Еще нужно из М процессов одновременно использовать КР N процессами. Алгоритм может быть таким:

Begin

S:=N;

StartParallelProcess;

1: ... P(S); KO; V'(S); ...

2: ... P(S); KO; V'(S); ...

:

:

M: ... P(S); KO; V(S); ...

StopParallelProcess;

END.

Второй вариант.

Рассмотрим, когда S не может быть больше 0.

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

Примитив P'(S)

IF S=0 THEN BEGIN

Остановить процесс и перевести его в очередь к S;

L:=L+1 END

ELSE S:=S-1;

Примитив V'(S)

IF L<>0 THEN BEGIN

Пометить 1 процесс из очереди к S в Ready

L:=L-1 END

ELSE S:=S+1

Для приведенного V'(S) в готовности переводится только один процесс.

При этом процессы, стоящие в очереди к семафору имеют как бы более высокий приоритет, т. к. после V' один из них переводится в готовность, а затем входит в КО. При выполнении P' процесс всегда попадет в очередь к семафору при L<>0, и должен будет пройти 2 очереди - к семафору и к готовности. Для выравнивания приоритетов всех процессов можно при выполнении V' все процессы из очереди перевести в готовность. В этом случае используется первый вариант реактивации. Недостаток способа: увеличение системных издержек. Рассмотрим такой пример.

BEGIN

S:=1; Q=0; КО: 1,2,2,2,1,1,1

StartParallelProcess ;

1: ... P(S); KO; V'(S); ...

2: ... P(S); KO; V'(S); ...

:

StopParallelProcess;

END.

Var S,Q: Semaphore

BEGIN

S:=1; Q:=1;

S:=1;

StartParallelProcess ; {1,2,1,2,1}

1: ... P(S); KO; V'(S); ...

2: ... P(S); KO; V'(S); ...

:

StopParallelProcess

END.

В этом случае порядок работы с КО жестко задан.

Эта схема может использоваться при реактивации задачи производитель-потребитель (1-произв., 2-потреб.). Если область может хранить N сообщений, в этом случае S инициализируется числом и (S=N).

Размещено на Allbest.ru


Подобные документы

  • Функции программного интерфейса операционной системы Windows, предназначенные для работы с семафорами. Средства синхронизации Win32 АРI, основанные на использовании объектов исполнительной системы с дескрипторами. Проблемы при использовании семафоров.

    реферат [67,4 K], добавлен 06.10.2010

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

    курсовая работа [1,3 M], добавлен 16.12.2014

  • Взаимодействие процессов и потоков в операционной системе, основные алгоритмы и механизмы синхронизации. Разработка школьного курса по изучению процессов в операционной системе Windows для 10-11 классов. Методические рекомендации по курсу для учителей.

    дипломная работа [3,2 M], добавлен 29.06.2012

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

    доклад [26,7 K], добавлен 27.12.2013

  • Исследование принципа действия поэлементной синхронизации с добавлением и вычитанием импульсов. Характеристика кодирования в системах ПДС, классификации кодов, построения кодера и декодера циклического кода. Расчет параметров системы с ОС и ожиданием.

    курсовая работа [2,8 M], добавлен 08.12.2011

  • Основные ограничения синхронизации, необходимые для корректного функционирования системы. Добавление в код производителя и потребителя операторов синхронизации для обеспечения ее корректной работы. Сигнал конечного буфера производителя-потребителя.

    курсовая работа [167,0 K], добавлен 05.12.2012

  • Разработка приложения, автоматизирующего процесс синхронизации файлов между сменным носителем и каталогом на другом диске. Классы для работы с файловой системой. Интерфейс программы и способы взаимодействия пользователя с ним. Создание новой синхропары.

    курсовая работа [632,0 K], добавлен 21.10.2015

  • История разработки многозадачной операционной системы POSIX-стандарта - FreeBSD; описание ее виртуальной памяти, файловой системы, уровня защиты. Описание основных средств синхронизации процессов - сигналов и семафоров. Способы блокировки файлов.

    презентация [584,2 K], добавлен 02.06.2011

  • Классификация компьютерной памяти. Использование оперативной, статической и динамической оперативной памяти. Принцип работы DDR SDRAM. Форматирование магнитных дисков. Основная проблема синхронизации. Теория вычислительных процессов. Адресация памяти.

    курсовая работа [1,5 M], добавлен 28.05.2016

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

    дипломная работа [1,7 M], добавлен 03.06.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.