КАТЕГОРИИ: Архитектура-(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) |
Семафор в ОС UNIX
Механизмы межпроцессных взаимодействий в ОС UNIX End. Parend Потребитель Parbegin Begin End V(S1); P(S1); P(S2); Begin While (true) do Begin End V(S2); V(S1); P(S1); Begin {Вычисление Результата} Буфер:= Результат; end; procedure_Потребитель; var Результат: integer; Результат:=Буфер; {Запись Результата} end; Инициализация_S1(S1,1); Инициализация_S2(S2,0); Производитель; Самостоятельно рассмотроеть переключение семафоров в данном алгоритме при различных соотношениях скоростей работы процессов “производитель-потребитель”. Дополнительный материал
В ОС UNIX механизмы межпроцессных взаимодействий реализованы с помощью избыточного набора системных средств, предназначенных для обеспечения возможности взаимодействия и синхронизации процессов, которые не обязательно связаны отношением родства. · IPC - Inter-Process Communication Facilities. · с появлением UNIX System V Release 4.0 все эти средства были узаконены и вошли в фактический стандарт ОС UNIX современного образца. · в разных вариантах системы средства IPC реализуются по-разному. · эффективность реализации различается. · усложняется разработка мобильных асинхронных программных комплексов. Пакет средств IPC · UNIX System V Release 3.0. · средства, обеспечивающие возможность наличия общей памяти между процессами (сегменты разделяемой памяти - shared memory segments). · средства, обеспечивающие возможность синхронизации процессов при доступе с совместно используемым ресурсам, например, к разделяемой памяти (семафоры - semaphores). · средства, обеспечивающие возможность посылки процессом сообщений другому произвольному процессу (очереди сообщений - message queues). Общие свойства всех трех механизмов: · для каждого механизма поддерживается общесистемная таблица, элементы которой описывают всех существующих в данный момент представителей механизма (конкретные сегменты, семафоры или очереди сообщений); · элемент таблицы содержит некоторый числовой ключ, который является выбранным пользователем именем представителя соответствующего механизма; · процесс, желающий начать пользоваться одним из механизмов, обращается к системе с системным вызовом из семейства "get", ответным параметром является числовой дескриптор; · ключ IPC_PRIVATE; · ключ IPC_CREAT; · защита доступа основывается на тех же принципах, что и защита доступа к файлам.
Для определения семафора в ОС UNIX введены следующие параметры: · значение семафора; · идентификатор процесса, который хронологически последним работал с семафором; · число процессов, ожидающих увеличения значения семафора; · число процессов, ожидающих нулевого значения семафора. Три системных вызова: · semget для создания и получения доступа к набору семафоров; · semop для манипулирования значениями семафоров; · semctl для выполнения управляющих операций над набором семафоров.
id = semget(key, count, flag);
· key, flag и id - обычный смысл; · count - число семафоров в наборе семафоров, обладающих одним и тем же ключом; · индивидуальный семафор идентифицируется дескриптором набора семафоров и номером семафора в наборе; · если набор семафоров с указанным ключом уже существует, то число семафоров в группе можно узнать с помощью системного вызова semctl;
oldval = semop(id, oplist, count);
· id - дескриптор группы семафоров; · oplist - массив описателей операций над семафорами группы; · count - размер этого массива; · возвращается значение последнего обработанного семафора. Элемент массива oplist: · номер семафора в указанном наборе семафоров; · операция; · флаги. Если проверка прав доступа проходит нормально: · указанные в массиве oplist номера семафоров не выходят за пределы общего размера набора семафоров; · для каждого элемента массива oplist значение семафора изменяется в соответствии со значением поля "операция". Значение поля операции положительно: · значение семафора увеличивается на единицу; · все процессы, ожидающие увеличения значения семафора, активизируются (пробуждаются). Значение поля операции равно нулю: · если значение семафора равно нулю, выбирается следующий элемент массива oplist; · иначе число процессов, ожидающих нулевого значения семафора, увеличивается на единицу; · обратившийся процесс переводится в состояние ожидания (усыпляется). Значение поля операции отрицательно: (1) его абсолютное значение меньше или равно значению семафора: · это отрицательное значение прибавляется к значению семафора; · если значение семафора стало нулевым, то ядро активизирует все процессы, ожидающие нулевого значения этого семафора.
(2) значение семафора меньше абсолютной величины поля операции: · число процессов, ожидающих увеличения значения семафора увеличивается на единицу; · текущий процесс откладывается. Системный вызов semop выполняется как атомарная операция. Флаг IPC_NOWAIT заставляет ядро ОС UNIX не блокировать текущий процесс, а лишь сообщать в ответных параметрах о возникновении ситуации, приведшей бы к блокированию процесса. semctl(id, number, cmd, arg); · id - это дескриптор группы семафоров; · number - номер семафора в группе; · cmd - код операции; · arg - указатель на структуру, содержимое которой интерпретируется в зависимости от операции.
3 [Дейкстра-65] Dijkstra E.W. Cooperating Sequential Processes. Technological University, Eindhoven, Netherlands, 1965 [VB1]
Дата добавления: 2014-01-20; Просмотров: 778; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |