Студопедия

КАТЕГОРИИ:


Архитектура-(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]

<== предыдущая лекция | следующая лекция ==>
While (true) do | Функциональная организация скелетной мышцы
Поделиться с друзьями:


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


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



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




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