- •Введение
- •Понятие операционной системы. Типы операционных систем
- •Функции операционной системы
- •Структура операционной системы. Ос ms dos
- •Файлы и каталоги на дисках
- •Драйверы устройств
- •Базовая система ввода-вывода (bios)
- •Загрузчик операционной системы
- •Ядро ms dos
- •Командный процессор dos
- •Внешние команды dos
- •Файловая структура диска
- •Стартовый сектор
- •Каталоги
- •Область данных
- •Операционные системы Windows
- •Выбор платформы Windows
- •Термины
- •Архитектура Windows Режимы выполнения программного кода
- •Многозадачность
- •Управление памятью в Windows
- •Выполнение приложений
- •Интерфейс прикладного программирования Win32
- •Реестр Windows
- •Операционная система unix
- •Ядро и процессы unix
- •Диспетчер unix
- •Процессы unix
- •Дескриптор и контекст процесса
- •Иерархия процессов
- •Идентификаторы процесса
- •Группы процессов
- •Взаимодействие процессов
- •Процессы-«демоны»
- •Межпроцессные коммуникации unix
- •Сигналы
- •Сигналы unix по мере возрастания их значений:
- •Семафоры
- •Программные каналы (Pipes)
- •Очереди сообщений
- •Разделяемая память
- •Многопользовательская защита в unix
- •Идентификаторы пользователя и группы
- •Код защиты файла
- •Привилегированный пользователь
- •Эффективные и реальные идентификаторы
- •Свопинг и пейджинг в unix
- •Буфер кеш-памяти
- •Управление вводом/выводом
- •Специальные файлы
- •Взаимодействие драйверов с программной и аппаратной средой
- •Файловая система unix
- •Основные системные каталоги
- •Корневой каталог /
- •Каталог /var
- •Каталог /etc
- •Каталог /usr
- •Каталог /home (/export/home)
- •Каталог/opt (/opti, /opt2, ... /optn)
- •Команды управления swap
- •Команда mkfile
- •Специальные файлы
- •Класс устройства
- •Тип и номер
- •Связь физической и логической структур
- •Создание и монтирование файловой системы
- •Дисковые устройства в unix
- •Внутренняя структура файловой системы Распределение дискового пространства
- •Индексные дескрипторы
- •Системные вызовы unix для работы с файлами
- •Стандартные библиотечные функции ввода/вывода
- •Поточные функции ввода/вывода
- •Литература
- •Оглавление
-
Очереди сообщений
Очереди сообщений также являются средством обмена информациеп между процессами, но в отличие от программных каналов допускают более гибкую организацию взаимодействий процессов.
То есть здесь совсем не обязательно существование парных процессов - "читателя" и "писателя". Просто будет существовать некая очередь сообщений, которая используется как хранилище сообщений для любых процессов, которые к ней обращаются, - и "читатели" и "писатели".
При формировании очереди сообщений не используется потоковая модель данных. Каждое сообщение имеет строго определенную структуру: тип и данные. В сообщении допустимы любые данные. Длина данных выбирается пользователем и может быть произвольной в пределах памяти, отведенной под размещение очереди в момент ее создания.
Ядро никак не интерпретирует содержания сообщений, а только обеспечивает размещение и выборку в соответствии с указанным типом. Шаблон сообщения хранится в файле <sys/msg.h>.
struct msgbuf {
long mtype; /* тип сообщения */
char mtext[1] /* данные */
}
Для работы с очередями в UNIX System V существуют следующие системные вызовы:
msggct - создание очереди;
msgetl - установка параметров;
msgsnd - посылка сообщений в очередь;
msgrcv - получение сообщений из очереди.
Очереди имеют свои преимущества; по сравнению, например, с программными каналами.
Например, чтобы осуществлять полнодуплексную связь между двумя процессами, очевидно, что нужно создать два канала: один для записи, а другой для чтения. В случае использования очередей можно обойтись одной очередью, если различать сообщения по типу: от клиента к серверу и наоборот.
Кроме того, имеется возможность извлекать сообщения из очереди не только по дисциплине FIFO, по и в произвольном порядке. Эта особенность открывает перспективу построения систем с приоритетным обслуживанием клиентов.
-
Разделяемая память
Разделяемая память является другой важной особенностью .коммуникации между процессами. Обычно разделяемая память применяется для того, чтобы увеличить скорость прохождения данных между процессами.
Во всех рассмотренных выше случаях (очереди сообщений, программные каналы) обмен информацией между процессами происходил через ядро.
Техника разделяемой памяти предоставляет процессам другой - простой, но очень эффективный способ обмена информацией: не через ядро, а используя некую часть виртуального адресного пространства, куда они помещают и откуда считывают данные.
Эта идея не нова, но реализация ее в UNIX предлагает удобные средства для программистов, которые избавляют их от познания изощренных способов виртуальной адресации, которые могут быть различны на различных платформах и в различных версиях UNIX.
После создания разделяемого сегмента памяти, любой из "процсссов -пользователей" может подсоединить его к своему собственному виртуальному пространству и работать с ним, как с обычным сегментом памяти. Единственным недостатков при этом является отсутствие каких бы то ни было средств синхронизации, однако при этом можно использовать, например, технику семафоров.
Для разделяемых сегментов используются следующие системные вызовы и управляющие файлы:
#include <sys/types.h>
#include <sys/ipc.h>
Системные вызовы:
shmget - создание сегмента;
shmetl - установка параметров;
shmat - подсоединение сегмента
shmdt - отсоединение сегмента.