Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Os_Otvety.docx
Скачиваний:
143
Добавлен:
01.04.2022
Размер:
32.58 Mб
Скачать

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

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

Конвейер. Представляет собой буфер в оперативной памяти, поддерживающий очередь байт по алгоритму ФИФО

Два виртуальных адресных пространств: процесс - отправитель/получатель, пользовательских код, буфер обмена. Передать напрямую не получается, так как адресные пространства изолированы. Поэтому с помощью системной области через буфер общей системной памяти передаем нашу последовательность байт.

Каналы.

  1. безымянные каналы. Позволяют обмениваться данными только родственным процессам. Т.е. если у вас родственные процессы, то действует и используется дескриптор канала. Отличие неименованного канала от файла: прочитанная информация удаляется и не м.б. прочитана повторно.

  2. именованные каналы. Более универсальны. Имеют имя, которое является записью в каталоге файловой системы ОС (не только про файлы). Пригодны для обмена данными между произвольными процессами или потоками этих процессов.

Каналы являются одной из самых сильных и характерных особенностей ОС Linux, доступных даже на уровне командного интерпретатора. Программный канал – это файл особого типа (FIFO (first in, first out) – «первым вошел – первым вышел»). Процессы могут записывать и считывать данные из канала как из обычного файла. Если канал заполнен, процесс записи в канал останавливается до тех пор, пока не появится свободное место, чтобы снова заполнить его данными. С другой стороны, если канал пуст, то читающий процесс останавливается до тех пор, пока пишущий процесс не запишет данные в этот канал. В отличие от обычного файла здесь нет возможности позиционирования по файлу с использованием указателя.

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

Искусственно делаем так, что части виртуальных адресных пространств разных процессов отображается на одну и ту же область физической памяти. И это делает данные доступными и 1-ому и 2-ому процессу.

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

Почтовые ящики

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

Почтовые ящики - особенность Виндовс. Однонаправленные соединения. Поддерживают в отличии от каналов широковещание (рассылку).

Сокеты.

Сокет — это средство связи, позволяющее разрабатывать клиентсерверные системы для локального или сетевого использования.

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

Для обмена данными каждый процесс (процесс А и процесс Б) реализуют сокет.

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

Не только по сети, но и для обмена на одном устройстве.