Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
os3.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
683.52 Кб
Скачать

3.10.3. Средства коммуникаций в существующих ос

Современные ОС используют несколько механизмов коммуникаций между процессами. Перечислим эти механизмы.

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

  1. Сообщения. Обеспечивают базовые примитивы для приема и передачи данных между процессами.

  1. Семафоры. Используются для координации доступа между процессами и подробно обсуждены.

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

Хотя перечисленные средства обычно применяются на одной машине, существуют расширения, позволяющие процессам находиться в сети.

Программные каналы

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

Linux

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

pipe(fileDescriptor[2]).

При создании возвращается дескриптор fd файла для записи и чтения. Запись в fd[0] позволяет считывать данные из fd[1] и наоборот. Операции с каналами осуществляются с помощью обычных команд файловой системы:

read(), write().

Чтобы поток стал именованным, он должен подключиться к узлу файловой системы командой fattach(fileDescriptor, path). Эта команды выполняется на сервере сети. Клиенты выполняют команду open(path) и затем могут связываться друг с другом через данный канал. Отсоединение имени осуществляется командой fdetach(path).

Windows

Для обеспечения обмена данными между процессами с помощью программных каналов Windows предусматривает два режима:

  1. неименованный однонаправленный;

  2. именованный двунаправленный.

CreatePipe(readHandle, writeHandle, security,numBytes) - создается неименованный канал c размером, буфера - numBytes. readHandle, writeHandle - дескрипторы для чтения и записи; security - структура для описания прав доступа.

Для чтения и записи могут использоваться вызовы WriteFile() и ReadFile().

CreateNamedPipe(...) - создает именованный программный канал на серверной машине. В функцию передается масса параметров - имя, режим (двунаправленный, однонаправленный), размеры буферов, права доступа, величина таймаута.

ConnectNamedPipe() - ожидание процессом сервером запроса на открытие канала (вызова функции CallNamePipe процессом-клиентом).

DisconnectNamedPipe() - разъединение канала.

PeekNamedPipe() - копирование данных из буфера канала без удаления.

TransactNamePipe() - выполнение операции чтения из канала или записи в канал.

GetNamedPipeHandleState(), GetNamedPipeInfo() – получение информации о канале.

SetNamedPipeHandleState() - изменение параметров канала.

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

Очереди сообщений - это более совершенный и более популярный механизм коммуникаций. Для работы с сообщениями предлагаются расширенные и мощные интерфейсы API.

Интерфейсы Linux

  1. msgget() - создание очереди сообщений;

  2. msgsnd() - занесение данных в очередь сообщений;

  3. msgrcv() - извлечение сообщений из очереди;

  4. msgctl() - управляющие операции с очередью, например, опрос состояния или удаление.

Интерфейсы Windows

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

CreateMailSlot - создание почтовой ячейки на серверном компьютере.

Клиент получает доступ к ячейке вызовом CreateFile.

GetMailSlotInfo - запрос информации о почтовой ячейке.

SetMailSlotInfo - установка параметров, в основном таймаута.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]