КАТЕГОРИИ: Архитектура-(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;
Дата добавления: 2014-01-20; Просмотров: 403; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |