
- •Операционные системы и спо
- •Понятие процесса.
- •Прерывания:
- •Планирование и управление ресурсами. Цели планирования
- •Дисциплины диспетчеризации.
- •Проектирование взаимодействующих вычислительных процессов.
- •Светофоры (семафоры)
- •Почтовые ящики
- •Программные каналы (pipe)
- •Очереди сообщений
- •Понятие тупиковой ситуации и выполнение параллельных вычислительных процессов.
- •Организация ввода-вывода Основные понятия
- •Режимы управления вводом/выводом
- •Спулинг
- •Основные системные таблицы ввода/вывода
- •Основные характеристики
- •Ос unix.
- •Основные концепции системы
- •Функции ядра
- •Процесс
- •Межпроцессорные коммуникации
- •Свопинг
- •Файловые системы
- •Специальные файлы
- •Файлы связи
- •Обычные файлы
- •Каталоги
- •Переназначение входа и выхода
- •Конвейеры.
- •Защита информации.
Светофоры (семафоры)
Светофор - переменная специального типа, которая доступна параллельным
процессам для проведения над ней только двух операций: открытия и закрытия (P и V).
Для работы с семафорами необходима его инициализация, осуществляемая с помощью системного вызова (имя_свет, начал_знач_перемен.)
Смысл операции P., закрытия светофора, заключается в том, чтобы проверить текущее значение светофора. Если оно неотрицательное, то осуществляется переход к следующей операции, стоящей за операцией Р и при этом значение семафора уменьшается на 1 (-1).
Операция V заключается в том, что значение семафора увеличивается на 1 (+1) при этом один или несколько процессов претендующих на ресурс устанавливается в состояние готовности.
InitSem (S,0) тогда структура:
ПР1: begin ПР2: begin
P(S) P(S)
CS1 CS2
V(S) V(S)
End End
Семафоры получили очень широкое распространение в ОС нашего времени.
В основном различаются: по количеству допустимых светофоров; по диапазону начальных значений, а также по процедурам исполнения операций открытия-закрытия.
Даже для одного критического ресурса можно устанавливать несколько семафоров.
Характерная особенность: при задании семафоров фактически не определяется критический ресурс.
Лекция 8. 11.10.02
Почтовые ящики
Для организации взаимодействия между вычислительными процессами нужна не только их синхронизация, но и передача сообщений между ними. Для этого и служат почтовые ящики.
Почтовые
ящики - это информационная структура,
поддерживаемая ОС, состоящая из головного
элемента и набора буферов.
Размер и количество буферов определяется при создании почтового ящика.
Головной элемент обычно содержит информацию о количестве буферов и их размерах.
Если какой-то процесс Р1 хочет передать информацию Р2 то он задает запрос системе на создание почтового ящика, а остальные процессы должны знать о его существовании. И с помощью специального системного вызова запросить у системы на доступ почтового ящика. После процессы могут записывать и считывать сообщения из этого ящика.
В тех случаях когда передаваемые сообщения очень длины, то может передаваться не само сообщение, а только адрес того сообщения, где оно находится.
Почтовые ящики могут использоваться отправителями и получателями по-разному. Может быть обеспечена связь между 1 отправителем и одним получателем – это простейший случай.
Правило работы с почтовыми ящиками могут различаться у ОС.
Некоторый процесс Р1 может передать, а Р2 может читать. При этом Р2 может читать, а может не читать.
Процесс отправитель может продолжить работу или встать в состояние "ожидание", до тех пор пока не получит подтверждение от получателя. При этом подтверждение может приходить в том же буфере, где было исходящее сообщение, а может помещаться в другой буфер, в этом случае такие ящики называются двунаправленные.
В некоторых системах случаи заполнения всех почтовых ящиков, отправитель должен ждать пока освободиться хотя бы один буфер. В других системах буфера освобождаются принудительно, для этого ОС помечают все выданные сообщения временными метками и при необходимости удаляют самые старые сообщения, несмотря на то что оно не получено получателем.
Иногда используется и такой режим работы с почтовыми ящиками:
Если образуется много процессов не получивших сообщения, но ждущих их, то чтобы продвинуть как-то очередь система передает им пустые сообщения.
Реализация почтовых ящиков требует использования специальных операторов. Наиболее типовые операторы:
SEND_MESSADGE (получатель, сообщение, буфер )
В результате использования этого оператора операционной системой, текст сообщения помещается в свободный буфер. Адрес этого буфера заносится в переменную буфер, и эта переменная добавляется в очередь указанного получателя.
Процесс, который выдал этот оператор, продолжает свою работу, а получатель может прочитать из своей очереди переданных сообщений адрес буфера, где находятся сообщения.
WAIT_MESSADGE ([отправитель], [ сообщение ], [ буфер ])
Оператор используется для того, чтобы ждать сообщения от другого процесса. Процесс, выдавший сообщение становится в состояние ожидания до тех пор, пока к нему не поступит сообщение. После поступления сообщения, этот процесс разблокируется, сообщение забирается и удаляется из буфера. Если параметры указаны, то ждут сообщения от определенного отправителя в определенном буфере. Если они не указаны, то это означает что он ждет любого сообщения от любого другого процесса.
SEND_ANSWER (ответ, [буфер])
Ответ помещается в буфер в котором находилось сообщение. Если отправитель ждал ответ, то он разблокируется.
WAIT_ANSWER (ответ, буфер)
Процесс блокируется до тех пор, пока ответ не поступает.
Основные достоинства использования почтовых ящиков:
+ простота, привычный механизм обмена сообщениями.
+ почтовые ящики могут служить синхронизаторами.
+ получатель и отправитель достаточно независимы друг от друга (т. е могут ждать, а могут и не ждать)