Современные операционные системы

Современные операционные системы
Процессы и потоки  Передача сообщений

Передача сообщений

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

Передача сообщений читать полное описание.


Процессы и потоки  Семафоры full и empty

Семафоры full и empty

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

Семафоры full и empty читать полное описание.


Процессы и потоки  Код процедуры mutex_lock

Код процедуры mutex_lock

Код процедуры mutex_lock аналогичен коду enter_region в листинге 2.2, но с одной существенной разницей. Когда процедуре enter region не удается войти в критическую область, она продолжает повторное тестирование значение переменной lock (выполняет активное ожидание). По истечении определенного периода времени планировщик возобновляет работу какого-нибудь другого процесса. Рано или поздно возобновляется работа процесса, удерживающего блокировку, и он ее освобождает.

Код процедуры mutex_lock читать полное описание.


Процессы и потоки  Алгоритм Петерсона

Алгоритм Петерсона

Используя сочетание идеи очередности с идеей блокирующих и предупреждающих переменных, голландский математик Деккер (Т. Dekker) был первым, кто придумал программное решение проблемы взаимного исключения, не требующее четкой очередности. Обсуждение алгоритма Деккера приведено в книге Дейкстры (Dijkstra, 1965). В 1981 году Петерсон придумал гораздо более простой способ достижения взаимного исключения, которое перевело решение Деккера в разряд устаревших. Алгоритм Петерсона показан в листинге 2.2. Этот алгоритм состоит из двух процедур, написанных на ANSI С, а это значит, что для всех определенных и используемых функций должны быть предоставлены функции-прототипы. Но в целях экономии места мы не будем показывать прототипы ни в этом, ни в последующих примерах.

Алгоритм Петерсона читать полное описание.


Процессы и потоки  Мониторы

Мониторы

Если вы думаете, что благодаря семафорам и мьютексам организация взаимодействия процессов кажется весьма простой задачей, то выкиньте это из головы. Присмотритесь к порядку выполнения операций down перед вставкой или удалением записей из буфера, показанному в листинге 2.6. Допустим, что две процедуры down в коде производителя были переставлены местами, чтобы значение mutex было уменьшено до уменьшения значения empty, а не после него. Если бы буфер был заполнен под завязку, производитель был бы заблокирован, а значение mutex было бы установлено в 0. Следовательно, при следующей попытке доступа производителя к буферу он осуществлял бы down в отношении mutex, который теперь имеет значение 0, и также блокировал бы его.

Мониторы читать полное описание.