Студопедия — Синхронизация процессов при помощи семафоров
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Синхронизация процессов при помощи семафоров






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

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

program блокированиевозобновления;

var событие: семафор;

procedure процессодин;

Begin

предшествующиеоператорыодин;

Р(событие);

прочиеоператорыодин

End;

procedure процессдва;

Begin

предшествующиеоператорыдва;

V(событие);

прочиеоператорыдва

End;

Begin

инициализадйясемафора (событие, 0);

Рис. 4.10Синхронизация блокирования/возобновление процессов при помощи семафоров.  
parbegin

процессодин;

процессдва

Parend

End;

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

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

4.13 Пара "производитель-потребитель";

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

program парапроизводительпотребитель;

var исключительныйдоступ: семафор;

числозанесено: семафор;

буферчисла: целое;

procedure процесспроизводитель;

var следующийрезультат: целое;

Begin

while истина do

Begin

вычислениеследующегорезультата;

Р(исключительныйдоступ);

буферчисла:= следующийрезультат;

V(исключительныйдоступ);

V(числозанесено)

End

End;

procedure процесспотребитель;

var следующийрезультат: целое;

Begin

while истина do

Begin

Р(числозанесено);

Р(исключительныйдоступ);

следующийрезультат:= буферчисла;

V(исключительныйдоступ);

записать (следующий результат)

End

End;

Begin

инициализациясемафора(исключительныйдоступ, 1);

инициализациясемафора(числозанесено, 0);

Рис. 4.11Реализация взаимодействия в паре "производитель – потребитель" при помощи семафоров.  
parbegin

процесспроизводитель;

процесспотребитель

Parend

End;

Рассмотрим следующую пару (отношение) "производитель – потребитель". Предположим, что один процесс, источник, или производитель, генерирует информацию, которую другой процесс, получатель, или потребитель, использует. Предположим, что они взаимодействуют при помощи одной разделяемой целой перемен­ной с именем "буферчисла". Процесс-производитель производит некоторые вычисления, а затем заносит результат в "буферчисла";

процесс-потребитель читает "буферчисла" и печатает результат.

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

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

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

На рис. 4.11 показана параллельная программа, в которой для реализации взаимодействия в паре "производитель – потребитель" применяются операции над семафорами.

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







Дата добавления: 2015-09-07; просмотров: 545. Нарушение авторских прав; Мы поможем в написании вашей работы!



Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

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

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

ЛЕКАРСТВЕННЫЕ ФОРМЫ ДЛЯ ИНЪЕКЦИЙ К лекарственным формам для инъекций относятся водные, спиртовые и масляные растворы, суспензии, эмульсии, ново­галеновые препараты, жидкие органопрепараты и жидкие экс­тракты, а также порошки и таблетки для имплантации...

Тема 5. Организационная структура управления гостиницей 1. Виды организационно – управленческих структур. 2. Организационно – управленческая структура современного ТГК...

Методы прогнозирования национальной экономики, их особенности, классификация В настоящее время по оценке специалистов насчитывается свыше 150 различных методов прогнозирования, но на практике, в качестве основных используется около 20 методов...

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

Виды сухожильных швов После выделения культи сухожилия и эвакуации гематомы приступают к восстановлению целостности сухожилия...

КОНСТРУКЦИЯ КОЛЕСНОЙ ПАРЫ ВАГОНА Тип колёсной пары определяется типом оси и диаметром колес. Согласно ГОСТ 4835-2006* устанавливаются типы колесных пар для грузовых вагонов с осями РУ1Ш и РВ2Ш и колесами диаметром по кругу катания 957 мм. Номинальный диаметр колеса – 950 мм...

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия