Студопедия

КАТЕГОРИИ:

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

Межпроцессовые коммуникации в ОС UNIX (сигналы, семафоры, программные каналы, очереди сообщений, разделяемая память).




Основная идея взаимодействия процессов – заключается в создании глобальных объектов, доступных всем процессам, с учетом их прав доступа.Все средства взаимодействия процессов разделяют на две группы:Средства обмена данными и Средства синхронизации процессов. Средства обмена данными. Одно из основных средств обмена данными в семействе ОС UNIX является разделяемая памятьсегмент памяти доступный нескольким процессам одновременно. Для работы с разделяемой памятью используются четыре системных вызова: shmget создает новый сегмент разделяемой памяти или находит существующий сегмент с тем же ключом; shmat подключает сегмент с указанным дескриптором к виртуальной памяти обращающегося процесса; shmdt отключает от виртуальной памяти ранее подключенный к ней сегмент с указанным виртуальным адресом начала; shmctl служит для управления параметрами сегмента разделяемой памяти.Создание сегмента не означает немедленного выделения под него основной памяти. Это действие откладывается до выполнения первого системного вызова.

id – десикрптор сегмента разделяемой памяти; cmd – команда управления сегментом разделяемой памяти.!!!Уничтожение: Если к моменту выполнения системного вызова ни один процесс не подключил сегмент к своей виртуальной памяти, то основная память, занимаемая сегментом, освобождается, а соответствующий элемент таблицы разделяемых сегментов объявляется свободным.В противном случае в элементе таблицы сегментов выставляется флаг, запрещающий выполнение системного вызова shmget по отношению к этому сегменту.Таким образом.Обмен данными между процессами выполняется путем записи и чтения данных по адресу подключенного сегмента разделяемой памяти с использованием обычных машинных команд чтения и записи.Сигналы представляют процессам систему прерываний на логическом уровне.Они используются в 3-х случаях:Для обработки исключительных ситуацийДля обработки внешний и внутренних прерыванийДля управления системой прерываний (маскирование, демаскирование). Коды сигналов хранятся в системной библиотеке signal. Семафоры – средство синхронизации процессов, на основе задержки выполнения процесса до изменения состояния некоторой системной переменной (структуры) глобальной для всех процессов.Семафор в ОС UNIX состоит из следующих элементов:значение семафора; идентификатор процесса, который хронологически последним работал с семафором; число процессов, ожидающих увеличения значения семафора; число процессов, ожидающих нулевого значения семафора.Для работы с семафорами поддерживаются три системных вызова:semget для создания и получения доступа к семафору; semop для манипулирования значениями семафоров (это именно тот системный вызов, который позволяет процессам синхронизоваться на основе использования семафоров); semctl для выполнения разнообразных управляющих операций над набором семафоров.Системный вызов к семафору позволяет проверить его состояние, уменьшить или увеличить.Механизм синхронизация процессов с помощью семафоров следующий.При организации доступа к общему ресурсу с помощью семафора создается критическая секция.Критическая секция - часть ресурса, доступ к которому разрешен строго определенному числу процессов. Количество разрешенных процессов определяется максимальным числом ресурсов, контролируемых семафором.Основные правила для семафоров:Когда счетчик текущего значения ресурсов > 0 семафор переходит в свободное состояние.Если счетчик = 0, семафор занят.Счетчик текущего числа ресурсов в семафоре не может быть <0, Счетчик текущего числа ресурсов не может быть больше максимального числа ресурсов.Очереди сообщений – механизм передачи сообщений от одного процесса к другому. При этом необязательно чтобы процессы были активны. Необходимо наличие активного объекта ядра – "очередь", который создается одним из процессов или сторонним процессом. Источник и приемник выполняют операцию открыть объект очередь, послать сообщение в очередь, извлечь (принять) сообщение.Для приема сообщений используется системный вызов msgrcv, msgget для образования новой очереди сообщений или получения дескриптора существующей очереди; msgsnd для посылки сообщения (для его постановки в указанную очередь сообщений); msgrcv для приема сообщения (вернее, для выборки сообщения из очереди сообщений); msgctl для выполнения ряда управляющих действий.Программные каналы – прототипы клиент серверной обработки. Различаются два вида программных каналов: именованные;неименованные.Именованный программный канал может служить для общения и синхронизации произвольных процессов, знающих имя данного программного канала и имеющих соответствующие права доступа. Неименованным программным каналом могут пользоваться только создавший его процесс и его потомки (необязательно прямые).Для создания именованных программных каналов (или получения доступа к уже существующим каналам) используется обычный системный вызов open. Основным отличием от случая открытия обычного файла является то, что если именованный программный канал открывается на запись, и ни один процесс не открыл тот же программный канал для чтения, то обращающийся процесс блокируется (усыпляется) до тех пор, пока некоторый процесс не откроет данный программный канал для чтения (аналогично обрабатывается открытие для чтения). Повод для использования такого режима работы состоит в том, что, вообще говоря, бессмысленно давать доступ к программному каналу на чтение (запись) до тех пор, пока некоторый другой процесс не обнаружит готовности писать в данный программный канал (соответственно читать из него).










Последнее изменение этой страницы: 2018-05-29; просмотров: 176.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...