
- •2010 Г.
- •1. Основы системного программного обеспечения
- •Классификация процессов
- •Классификация ресурсов
- •Запрос ВыделениеИспользованиеОсвобождение
- •2. Задачи синхронизации
- •3. Межпроцессные коммуникации
- •4. Операционные системы
- •5. Архитектура операционной системы
- •6. Распределенные и Мультипроцессорные ос.
- •7. Сетевые ос (сос)
- •2. Функциональные компоненты сос
- •3. Сетевые службы и сетевые сервисы.
- •4. Встроенные сетевые службы и сетевые оболочки.
- •8. Системные программы
- •Список литературы
3. Межпроцессные коммуникации
Цель: изучить средства обмена информацией между процессами.
Задачи:
Изучить механизм сигналов.
Рассмотреть виды сигналов.
Рассмотреть понятие очереди сообщений.
Если задуматься над вопросом, что в наши дни является ключевой компонентой в области передовых компьютерных технологий, то без сомнения можно было бы ответить, что такой технологией в наши дни является технология "клиент-сервер". Действительно, эта универсальная модель служит основой построения любых сколь угодно сложных систем, в том числе и сетевых. Пользуясь известным выражением, можно было бы сказать, что технология "клиент-сервер" является ключевым звеном в цепи, ухватившись за которое можно вытащить всю цепь. Разработчики СУБД, коммуникационных систем, систем электронной почты, банковских систем и т.д. во всем мире используют эту технологию. В этом смысле ОС UNIX является для разработчиков системного и прикладного программного обеспечения идеальным средством, потому что в своей основе наиболее полно отвечает требованиям технологии "клиент-сервер", далеко опережая при этом своих основных конкурентов. Для построения моделей типа "клиент-сервер" в UNIX существуют великолепные возможности:
сигналы;
семафоры;
программные каналы;
именованные программные каналы;
очереди сообщений;
сегменты разделяемой памяти;
специальные команды (write, cu, mail);
средства межмашинного взаимодействия (uucp, tcp/ip, nfs, rfs).
Сигналы
Если рассматривать процесс как некую виртуальную машину, то в такой системе должна существовать система прерываний, отвечающая стандартным требованиям:
обработка исключительных ситуаций;
средства обработки внешних и внутренних прерываний;
средства управления системой прерываний (маскирование и демаскирование).
Всем этим требованиям в UNIX отвечает механика сигналов, которая может не только воспринимать и обрабатывать сигналы, но и порождать их и посылать на другие машины (процессы). Сигналы могут быть синхронными, когда инициатор сигнала - сам процесс, и асинхронными, когда инициатор возникновения сигнала - интерактивный пользователь за терминалом. Источником асинхронных сигналов может быть также ядро, когда оно контролирует определенные состояния аппаратуры рассматриваемые как ошибочные. Для удобства использования каждый сигнал закодирован и цифровое значение сигнала с использованием мнемонической формы записи хранится в файле signal.h
Нижеследующий перечень сигналов представлен в порядке возрастания значений сигналов (целое число в скобках).
ИМЯ СОДЕРЖАНИЕ РЕАКЦИЯ
SIGHUP(1) Вырабатывается при отключении связи с Закончить процесс,
терминалом. Рассылается всем процессам принявший сигнал.
TGID
SIGINT(2) При нажатии определенной клавиши. Закончить процесс
Всем процессам TGID
SIGQUIT(3) При нажатии клавиши quit. Всем Здесь и далее
процессам TGID закончить процесс
SIGILL(4) При возникновении аппаратных некон-
тролируемых состояний. Текущему PID
SIGTRAP(5) При трассировке. Текущему PID
SIGIOT(6) При неисправности в аппаратуре.
Текущему PID
SIGTEMT(7) При выполнении команды EMT. Текущему
PID
SIGFPE(8) При обработке чисел с плавающей
точкой. Текущему PID
SIGKILL(9) При выдаче системного вызова kill.
Адресуемому PID
SIGBUS(10) При ошибке в косвенной адресации.
Текущему PID
SIGSEGV(11) При выходе за пределы сегмента.
Текущему PID
SIGSYS(12) При неверном системном вызове.
Текущему PID
SIGPIPE(13) При записи в Pipe, когда нет читающего
процесса. Текущему PID записи в канал
SIGALARM(14) При окончании временной установки.
Посылается к PID установки
SIGTERM(15) При выполнении команды kill в команд-
ном режиме. К адресуемому PID
SIGUSR1(16) При системном вызове kill.
SIGUSR2(17) К адресуемому PID
SIGCLD(18) При окончании "процесса-сына". Сброс сигнала
К "процессу-отцу"
SIGPWR(19) При уменьшении напряжения в сети. В зависимости от
В зависимости от реализации реализации.
SIGPOOL(22) При регистрации события в Stream- Закончить процесс.
устройстве. К процессу, работающему
с потоком.
---------------------------------------------------------------------------
Возможности системного вызова signal позволяют обрабатывать сигналы следующими способами:
Реакция по умолчанию
Замаскировать сигнал (т.е. проигнорировать его). Для указания указания возможности маскирования второму аргументу присваивается специальное значение SIG_IGN.
Перехватить посланный процессу сигнал и написать собственную программу обработки прерывания по асинхронно посланному сигналу.
Используя технику сигналов, можно решать самые разнообразные задачи, в том числе можно даже предотвратить такую неприятную особенность, как появление в системе "процессов-зомби".
Очереди сообщений
Очереди сообщений также являются средством обмена информацией между процессами, но в отличие от программных каналов допускают более гибкую организацию взаимодействий процессов.
То есть здесь совсем не обязательно существование парных процессов "читателя" и "писателя". Просто будет существовать некая очередь сообщений, которая используется как хранилище сообщений для любых процессов, которые к ней обращаются, - и "читатели" и "писатели".
При формировании очереди сообщений не используется потоковая модель данных. Каждое сообщение имеет строго определенную структуру: тип и данные. В сообщении допустимы любые данные. Длина данных выбирается пользователем и может быть произвольной в пределах памяти, отведенной под размещение очереди в момент ее создания.
Ядро никак не интерпретирует содержания сообщений, а только лишь обеспечивает размещение и выборку в соответствии с указанным типом. Шаблон сообщения хранится в файле sys/msg.h.
Для работы с очередями в UNIX System V существуют следующие системные вызовы:
msgget - создание очереди;
msgctl - установка параметров;
msgsnd - посылка сообщений в очередь;
msgrcv - получение сообщений из очереди;
Очереди имеют свои преимущества по сравнению, скажем, с программными каналами. Например, чтобы осуществлять полнодуплексную связь между двумя процессами, очевидно, что нужно создать два канала: один для записи, а другой для чтения. В случае использования очередей можно обойтись одной очередью, если различать сообщения по типу: от клиента к серверу и наоборот. Кроме того, имеется возможность извлекать сообщения из очереди не только по дисциплине FIFO, но и в произвольном порядке. Эта особенность открывает перспективу построения систем с приоритетным обслуживанием клиентов.
Вопросы для самопроверки.
Что такое синхронный и асинхронный сигнал?
Назовите виды сигналов.
Что такое очередь сообщений?
Назовите системные вызовы для работы с очередями в UNIX System V.