Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Процессы-ресурсы - теория.doc
Скачиваний:
21
Добавлен:
20.08.2019
Размер:
894 Кб
Скачать
☆

2.2.7. Система прохождения сообщений

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

При определении системы прохождения сообщений обычно применяют конструкцию данных, называемую буфером, которая служит в качестве “почтового ящика” при передаче сообщений.

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

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

Сам буфер обычно организуется в виде очереди с определенной дисциплиной (обычно - FIFO, но с учетом приоритета). Размер буфера выбирается с учетом предъявляемых требований. Если при передаче сообщения буфер оказывается переполненным, то передающий процесс может быть приостановлен, пока адресат не извлечет сообщение из буфера.

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

2.2.8. Многозадачность и языки программирования

Большинство современных языков программирования разрабатывались с ориентацией на последовательное выполнение программ, поэтому в них не предусматриваются специальные средства для написания параллельных программ и для синхронизации их выполнения. При использовании таких языков для синхронизации параллельно выполняющихся процессов могут использоваться средства, предоставляемые операционными системами. Но существуют языки, в которые при их разработке были заложены средства для создания параллельно выполняющихся частей программ (например, Modula, Ада).

На концептуальном уровне процесс можно представить как аналог процедуры: описание каждой процедуры представляет собой определение ее данных и выполняемых над ними действий. Для возбуждения этих действия существует отдельный оператор вызова процедуры.

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

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

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

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

Если расширить понятие процедуры так, чтоб оно охватывало представление параллельных процессов, то такое их определение имеет несомненное достоинство, состоящее в том, что упрощается понимание процесса. В действительности подобные механизмы используются в различных языках (определение процессов в языке Modula, описание задач в языке Ада, потоков в Java, Delphi и C++ Builder). Средства описания процедур в этих языках дополняются специальными операторами для организации межпроцессного взаимодействия.

Для получения доступа к средствам управления процессами операционных систем могут использоваться специальные библиотеки (например, для порождения потоков и управления их взаимодействием в программах, написанных на C или C++ для Windows 95 или Windows NT).