Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Примерные ответы.docx
Скачиваний:
9
Добавлен:
24.09.2019
Размер:
358.54 Кб
Скачать

16. Межзадачное взаимодействие

Задача – сочетание программы и данных.

Pipe

Наиболее простым способом для передачи информации с помощью потоковой модели между различными процессами или даже внутри одного процесса в операционной системе Linux является pipe (канал, труба, конвейер). Прочитанная информация немедленно из него удаляется и не может быть прочитана повторно.

Pipe представляет собой область памяти, недоступную пользовательским процессам напрямую. По буферу при операциях чтения и записи перемещаются два указателя, соответствующие входному и выходному потокам. При этом выходной указатель никогда не может перегнать входной и наоборот.

Канал pipe служит для организации однонаправленной или симплексной связи.

FIFO

Для организации потокового взаимодействия любых процессов (а не только родственных, как pipe) применяется средство связи FIFO (First Input First Output) или именованный pipe. FIFO во всем подобен каналу pipe, за одним исключением: данные о расположении FIFO в адресном пространстве ядра и его состоянии процессы могут получать не через родственные связи, а через файловую систему. Для этого при создании именованного канала на диске заводится файл специального типа, обращаясь к которому процессы могут получить интересующую их информацию.

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

В систему SYSTEM V IPC входят:

Разделяемая память

Операционная система может позволить нескольким процессам совместно использовать некоторую область адресного пространства.

1.Функция ftok служит для преобразования имени существующего файла и небольшого целого числа, например, порядкового номера экземпляра средств связи, в ключ System V IPC.

2.Для создания области разделяемой памяти с определенным ключом или доступа по ключу к уже существующей области применяется системный вызов shmget() .

3.Для включения область разделяемой памяти в адресное пространство текущего процесса используется системный вызов shmat() .

В результате возвращается указатель на область разделяемой памяти, работу с которой можно осуществлять непосредственно в программе.

Семафоры

Понятие семафорного механизма было введено Э.Дейкстрой в 1965г. Семафор Дейкстры представляет собой целочисленную переменную, с которой ассоциирована очередь ожидающих процессов. Над семафором возможно проведение только двух операций - “открытия” и “закрытия”, названных соответственно P- и V- операциями. Существенно, что операции над семафорами являются неделимыми (непрерываемыми), поэтому их часто называют примитивами.

Пытаясь пройти через семафор, процесс пытается вычесть из значения переменной 1. Если значение переменной больше или равно 1, процесс проходит сквозь семафор успешно (семафор открыт). Если переменная равна нулю (семафор закрыт), процесс останавливается и ставится в очередь. Таким образом, семафор выполняет роль вспомогательного критического ресурса. Закрытие семафора соответствует захвату ресурса, доступ к которому контролируется этим семафором. Процесс, закрывший семафор, захватывает ресурс. Если ресурс захвачен, остальные процессы вынуждены ждать его освобождения. Закончив работу с ресурсом, процесс увеличивает значение семафора на единицу, открывая его. При этом первый из стоявших в очереди процессов активизируется, вычитает из значения семафора единицу, и снова закрывает семафор. Если же очередь была пуста, то ничего не происходит, просто семафор остается открытым. Тогда первый процесс, подошедший к семафору, успешно пройдет через него.

Очереди сообщений

Очереди сообщений, как и семафоры, и разделяемая память, являются средством связи с непрямой адресацией, требуют инициализации для организации взаимодействия процессов и специальных действий для освобождения системных ресурсов по окончании взаимодействия. Пространством имен очередей сообщений является то же самое множество значений ключа, генерируемых с помощью функции ftok(). Для выполнения примитивов send и receive, соответствующим системным вызовам в качестве параметра передаются IPC- дескрипторы очередей сообщений, однозначно идентифицирующих их во всей вычислительной системе.

Очереди сообщений располагаются в адресном пространстве ядра операционной системы в виде однонаправленных списков и имеют ограничение по объему информации, хранящейся в каждой очереди. Каждый элемент списка представляет собой отдельное сообщение. Сообщения имеют атрибут, называемый типом сообщения. Выборка сообщений из очереди (выполнение примитива receive) может осуществляться тремя способами:

1.В порядке FIFO, независимо от типа сообщения.

2.В порядке FIFO для сообщений конкретного типа.

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