Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

While (true) do

Begin

End.

Parend

Parbegin

Begin

Begin

Begin

End.

Parend

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

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

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

 

var S: семафор;

procedure Процесс_Х;

{Предшествующие операторы }

P(S); {семафор 0, ожидать на S [VB1], иначе S:=S-1}

{Остальная часть процесса_Х}

end;

procedure Процесс_Y;

{Предшествующие операторы }

V(S); {если процесс Х ожидает на S, разрешить работу, иначе S:=S+1}

{Остальная часть процесса_Y}

end;

Инициализация_S(S,0);

Процесс_Х;

Процесс_Y;

Самостоятельно рассмотреть ситуацию, когда процесс_Y обнаружит наступление события и просигнализирует об этом еще до того, как процесс_Х выполнит операцию P(S).

При этом семафор переключится из 0 в 1, так, что операция P(S) просто произведет обратное переключение из 1 в 0, и процесс_Х продолжит выполнение без ожидания.

Реализация взаимодействия в паре “производитель-потребитель” при помощи семафоров

 

Между процессами может возникать ситуация, при которой один процесс

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

Рассмотрим алгоритм, в котором для реализации взаимодействия в паре

“производитель”- “потребитель” применяются операции над смафорами.

 

 

var S1, S2: семафор; { S1 используется для обеспечения доступа к разделяемой переменной Буфер в режиме взаимоисключения, S2 используется для обеспечения синхронизации процессов}

Буфер: integer;

procedure_Производитель;

var Результат: integer;

<== предыдущая лекция | следующая лекция ==>
Parbegin | Семафор в ОС UNIX
Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 403; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.