Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Операционные системы_лекции.doc
Скачиваний:
48
Добавлен:
28.09.2019
Размер:
1.71 Mб
Скачать

3.3.7. Почтовые ящики, конвейеры и очереди сообщений

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

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

Множество буферов сообщений (гнёзд), предназначенных для одного процесса, называются почтовым ящиком. Почтовый ящик является информационной структурой и состоит из головного элемента и нескольких гнёзд. Головной элемент содержит сведения о почтовом ящике (количество гнёзд и их объёмы), которые задаются при создании почтового ящика.

Для работы с почтовым ящиком используются системные функции:

  • SAND_MASSAGE(Получатель, сообщение, буфер) – копирование сообщения в буфер, запись адреса буфера в переменную Буфер, добавление буфера в очередь к получателю;

  • WAIT_MASSAGE(Отправитель, Сообщение, Буфер) – блокирование процесса, запросившего сообщение до появления сообщения в его очереди; при передаче процесса на исполнение процессором он получает имя отправителя, текст сообщения и адрес буфера через переменные, указанные в списке параметров), затем буфер удаляется из очереди, а процесс может записать в него свой ответ отправителю;

  • SAND_ANSWER(Результат, Ответ, Буфер) – запись информации, определённой переменной Ответ в буфер, указанный переменной Буфер; переменная Результат указывает является ли ответ пустым или нет;

  • WAIT_ANSWER(Результат, Ответ, Буфер) – блокирование процесса, вызвавшего функцию до появления в его буфере какого-либо ответа; переменная результат указывает, является ли ответ пустым или нет, переменная Ответ получает ответ, переменная Буфер указывает адрес буфера, содержащего ответ; при передаче процесса на выполнение на процессоре, процесс получает ответ, а буфер очищается.

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

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

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

  • процессу нет надобности знать о других процессах до получения от них сообщений;

  • два процесса могут обменяться несколькими сообщениями за один раз;

  • операционная система гарантирует невмешательство в обмен сообщениями и ответами процессов, не имеющих к нему никакого отношения;

  • вследствие существования очередей буферов работа процессов-отправи­телей сообщений не зависит от процессов-получателей.

Недостатками почтовых ящиков являются:

  • появление дополнительных ресурсов, подлежащих управлению, которыми являются сами почтовые ящики;

  • статический характер почтовых ящиков.

Конвейеры, иначе транспортёры или каналы связи, представляют собой потоки байтов, передающихся между двумя и более процессами. Физически конвейеры реализуются как буферная память, работающая по принципу FIFO, но они не являются очередями. Как информационная структура конвейеры описываются идентификатором, размером (не более 64К), указателем начала данных и указателем конца данных, которые определяют адреса начала и конца данных. Конвейер представляет собой закольцованную очередь (рис. 3.8).

В исходном состоянии оба указателя равны нулю. При добавлении в конвейер данных оба указателя увеличиваются на единицу. Дальнейшее добавление данных увеличивает значение указателя на конец данных (рис. 3.8,а). Чтение и удаление данных происходит всегда с начала. Поэтому при чтении и удалении данных приходится изменять значения указателей. В итоге указатели движутся от начала конвейера к её концу. Серым цветом на рис. 3.8 показаны записанные данные. Свободная область в начале конвейера образовалась в результате удаления и чтения данных.

а)

Указатель Указатель

на конец на начало

б)

Рис. 3.8. Принцип действия конвейера

При достижении указателем конца данных правой границы конвейера дальнейшая запись будет происходить в левую свободную часть конвейера. Указатель на конец данных переместится сначала на левую границу конвейера, а затем начнёт перемещаться вправо, Левая свободная область будет "вытеснять" данные вправо вместе с указателем начала данных (рис. 3.8,б).

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

Очереди позволяют одному или нескольким процессам посылать сообщения одному процессу-приёмнику. Читать и удалять сообщения из очереди может только процесс приёмник. Процессы-источники могут только посылать сообщения в очередь. Пересылка сообщений возможна только от процессов источников к процессу-приёмнику, т.е. связь процессов односторонняя. Для получения двусторонней связи необходимо организовывать две очереди сообщений.

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

Второй особенностью очереди сообщений является сохранение в ней прочитанных записей, в то время как из конвейера они удаляются. Третьей особенностью очереди является присутствие в очереди не сообщений, а их адреса в памяти и размер. Эти данные хранятся в области памяти, которая является общей для процессов, обменивающихся сообщениями. Каждый процесс, пользующийся очередью должен получить доступ к общему разделу памяти через системные запросы API, т.к. очередь – это системный механизм.

Контрольные вопросы

  1. Что такое мультипрограммный и мультизадачный режимы работы операционной системы?

  2. Что такое дескриптор процесса? Какова его роль при прерывании процесса?

  3. В каких состояниях могут находиться процессы в операционной системе?

  4. Поясните пожалуйста основные функции операционной системы при управлении процессами.

  5. Что такое планирование и диспетчеризация процессов?

  6. Что такое стратегия планирования? На каких принципах она основана?

  7. Что означает термин "Задача переднего плана"?

  8. Что такое бесприоритетные дисциплины обслуживания? Какие они бывают?

  9. Поясните линейные дисциплины обслуживания.

  10. Поясните циклические дисциплины обслуживания.

  11. Что такое приоритетные дисциплины обслуживания? Перечислите и поясните группы дисциплин, относящихся к приоритетным дисциплинам.

  12. Что такое дисциплины с фиксированным приоритетом?

  13. Что такое дисциплины с динамическим приоритетом?

  14. Как организуются циклические алгоритмы дисциплины обслуживания?

  15. Что такое вытесняющие и невытесняющие дисциплины обслуживания?

  16. Что такое дисциплины SJN и SRT?

  17. Что такое карусельная дисциплина обслуживания? Как она реализуется?

  18. Чем отличается планирование процессов от диспетчеризации?

  19. Какими способами обеспечивается гарантированное обслуживание процесса?