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

Взаимодействие процессов.

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

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

Для взаимодействия процесса-производителя и процесса-потребителя создается совместный буфер в памяти, заполняемый процессом-производителем и потребляемым процессом-потребителем.

Буфер имеет фиксированные размеры и, следовательно, процессы могут находиться в состоянии ожидания, когда:

  • буфер заполнен — ожидает процесс-производитель;

  • буфер пуст — ожидает процесс-потребитель.

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

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

Транспортеры (каналы). Являются средством взаимодействия родственных процессов, представляют собой область памяти, выступает в качестве буфера. Реализуется очередь обслуживания. Порядок записи данных на транспортер неизменен, не допускается повторное считывание данных. Обмен данными происходит не непосредственно, а через транспортер. Из вызвавшего процесса задается размер транспортера. Дочерние процессы могут использовать родительский транспортер.

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

Операционные системы используют разные термины для определения способов межпроцессного взаимодействия.

В операционных системах OS/2 и Microsoft Windows существует специальный механизм для взаимодействия процессов в реальном масштабе времени. Этот механизм называется DDE (Dynamic Data Exchange — динамический обмен данными). Он стандартизирует процесс обмена командами, сообщениями и объектами для обработки между задачами. Наиболее распространенным процессом, для которого используется DDE, является печать.

Другим интерфейсом для обмена данными является OLE (Object Linking and Embedding — связывание и встраивание объектов). Этот интерфейс позволяет хранить объекты, созданные одной программой, в объектах, созданных другой программой, а также редактировать (печатать) их без нарушения целостности информации и связей.

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