
- •Определение, структура программного обеспечения
- •Вычислительной системы
- •Определение, функции операционной системы (ос)
- •Определение, основные принципы построения ос
- •Понятие вычислительного процесса
- •Понятие ресурса
- •Понятие активного процесса. Динамика состояний процесса
- •Понятие потока, мультипрограммирования
- •Идентификация процесса
- •Взаимодействие потоков
- •Классификация процессов
- •Классификация ресурсов
- •Понятие критических секций, основные требования к ним
- •Понятие тупика, условия его возникновения
- •14. Методы борьбы с тупиками. Описание каждого метода
- •15. Виды межпроцессных коммуникаций. Очереди сообщений. Сигналы
- •16. Виды межпроцессных коммуникаций. Конвейер. Сокеты
- •17. Понятие системных часов, таймера
- •18. Планирование выполнения процессов в системах реального времени
- •19. Отображение пространства имен на физическую память компьютера
- •20. Сегментный способ организации виртуальной памяти
- •21. Страничный способ организации виртуальной памяти
- •22. Сегментно-страничный способ организации виртуальной памяти
- •23. Управление памятью вычислительной системы
- •24. Понятие файловой системы
- •25. Особенности файловой системы fat
- •26. Особенности файловой системы ntfs
- •27. Понятие ввода/вывода. Основные задачи супервизора ввода/вывода
- •28. Режимы ввода/вывода, их характеристика
- •29. Процесс управления вводом/выводом
- •30. Понятие микроядерной операционной системы
- •В пользовательское пространство
- •31. Понятие монолитной операционной системы
- •32. Классификация операционных систем
- •33. Особенности сетевых и распределенных операционных систем
- •34. Понятие прерывания. Механизм обработки прерываний
- •35. Синхронные и асинхронные прерывания
- •36. Дисциплины диспетчеризации
- •37. Понятие утилиты. Виды утилит
- •38. Понятие компилятора, интерпретатора, отладчика, компоновщика, байт-кода
- •39. Виды систем защиты программного обеспечения
- •40. Показатели применимости и критерии оценки систем защиты программного обеспечения
15. Виды межпроцессных коммуникаций. Очереди сообщений. Сигналы
Совместно выполняемые процессы могут быть либо независимыми, либо взаимодействующими. Взаимодействие процессов часто понимается в смысле взаимного обмена данными через общий буфер данных.
Взаимодействие процессов удобно рассматривать в схеме производитель-потребитель. Для взаимодействия процесса-производителя и процесса-потребителя создается совместный буфер, заполняемый процессом-производителем и потребляемый процессом-потребителем. Буфер имеет фиксированные размеры и, следовательно, процессы могут находиться в состоянии ожидания, когда:
буфер заполнен – ожидает процесс-производитель;
буфер пуст – ожидает процесс-потребитель.
Буфер может предоставляться и поддерживаться самой ОС, например, с помощью средств межпроцессорных коммуникаций, либо должен быть организован прикладным программистом.
Взаимодействие заключается в передаче данных между процессами или совместном использовании некоторых ресурсов и обычно реализуется с помощью таких механизмов, как сигналы, конвейеры, очереди сообщений, разделяемые сегменты памяти, сокеты, почтовые ящики.
Очереди сообщений (queue) являются более сложным методом связи между взаимодействующими процессами по сравнению с каналами. С помощью очередей также можно из одной или нескольких задач независимым образом посылать сообщения некоторой задаче-приёмнику. При этом только процесс-приёмник может читать и удалять сообщения из очереди, а процессы-клиенты имеют право лишь помещать в очередь свои сообщения. Таким образом, очередь работает только в одном направлении. Если же необходима двухсторонняя связь, то можно создать две очереди.
Работа с очередями сообщений имеет много отличий от работы с конвейерами. Во-первых, очереди сообщений предоставляют возможность использовать несколько дисциплин обработки сообщений:
FIFO – сообщение, записанное первым, будет первым и прочитано;
LIFO – сообщение, записанное последним, будет прочитано первым;
приоритетный – сообщения читаются с учётом их приоритетов;
произвольный доступ, то есть можно читать любое сообщение, тогда как канал обеспечивает только дисциплину FIFO.
Во-вторых, если при чтении сообщения из канала (конвейера) оно удаляется из него, то при чтении сообщения из очереди этого не происходит, и сообщение при желании может быть прочитано несколько раз,
В третьих, в очередях присутствуют не непосредственно сами сообщения, а только их адреса в памяти и размер. Эта информация размещается системой в сегменте памяти, доступном для всех задач, общающихся с помощью данной очереди.
Каждый процесс, использующий очередь, должен предварительно получить разрешение на использование общего сегмента памяти с помощью системных запросов API, ибо очередь – это системный механизм и для работы с ним требуются системные ресурсы и, соответственно, обращение к самой ОС. Во время чтения из очереди задача-приёмник пользуется следующей информацией:
идентификатор процесса (PID – process ID), который передал сообщение;
адрес и длина переданного сообщения;
ждать или нет, если очередь пуста;
приоритет переданного сообщения;
номер освобождаемого семафора, когда сообщение передаётся в очередь.
Рассмотрим основные функции, управляющие работой очереди без подробного описания передаваемых параметров, т.к. в различных ОС обращения к этим функциям могут существенно различаться:
CreateQueue – создание новой очереди;
OpenQueue – открытие существующей очереди;
ReadQueue – чтение и удаление сообщения из очереди;
PeekQueue – чтение сообщения без его последующего удаления из очереди;
WriteQueue – добавление сообщения в очередь;
CloseQueue – завершение использования очереди;
PurgeQueue – удаление из очереди всех сообщений;
QueryQueue – определение числа элементов в очереди.
Сигналами (signals) называют программные прерывания, уведомляющие процесс о наступлении определенного события. Сигнал – простейшая форма межпроцессого взаимодействия, которое используется для передачи от одного процесса другому или ядра системы какому-либо процессу уведомления о возникновении определенного события. Сигналы не позволяют процессам обмениваться друг с другом какой-либо информацией. Системные сигналы зависят от операционной системы и типов программных прерываний, поддерживаемых определенным процессором. При поступлении сигнала операционная система сначала определяет кому предназначен данный сигнал, а потом – как процесс должен на него отреагировать. Процессы могут:
перехватывать сигналы;
игнорировать сигналы;
маскировать сигналы.
Процесс перехватывает (catches) сигнал и определяет процедуру, вызываемую операционной системой в случае поступления сигнала.
Процесс может проигнорировать (ignores) сигнал, то есть переложить ответственность за выполнение действия по умолчанию (default action) по обработке сигнала на операционную систему. Чаще всего по умолчанию задается аварийное завершение (abort) процесса. Другой, не менее распространенной операцией по умолчанию является дамп памяти (memory dump), который аналогичен аварийному завершению процесса, только перед завершением генерируется файл ядра (core file) процесса, содержащий контекст выполнения процесса и данные из адресного пространства, что облегчает отладку программ. Третьим вариантом действия по умолчанию является игнорирование сигнала. Два других действия по умолчанию вызывают приостановку выполнения процесса и его последующее возобновление.
Процесс может заблокировать обработку сигнала путем его маскирования (masking). Когда процесс маскирует сигнал определенного типа (например, сигнал приостановки), операционная система блокирует этого типа до тех пор, пока маскирование сигнала не будет отключено. Как правило, процесс блокирует сигналы того типа, который обрабатывается в текущий момент времени. Подобно замаскированным прерываниям, маскированные сигналы могут быть потеряны (это зависит от конкретной реализации операционной системы).
ОС UNIX, предоставляющая каждому пользователю виртуальный компьютер, поддерживает систему прерываний, отвечающую стандартным требованиям:
обработка исключительных ситуаций;
средства обработки внешних и внутренних прерываний;
средства управления системой прерываний.
Всем этим требованиям в ОС UNIX отвечает техника сигналов, которая не только воспринимает и обрабатывает сигналы, но может их порождать и посылать на другие машины (процессы). Сигналы могут быть:
синхронными, когда сам процесс инициирует сигнал;
асинхронными, когда интерактивный пользователь за терминалом инициирует возникновение сигнала. Источником асинхронных прерываний может быть ядро, когда оно контролирует состояние аппаратуры.