Операционные системы. Теория и практика. Замятин А.В. - 73 стр.

UptoLike

Составители: 

73
К недостаткам использования семафоров относят то, что некор-
ректное использование операций на семафоре может привести к нару-
шению работоспособности параллельных систем.
Действительно, если в рассмотренном примере переставить места-
ми операции P(e) и P(b) в функции «писатель», то при некотором стече-
нии обстоятельств эти два процесса могут взаимно заблокировать друг
друга. Так, пусть «писатель» первым войдет в критическую секцию и
обнаружит отсутствие свободных буферов; он начнет ждать, когда «чи-
татель» возьмет очередную запись из буфера, но «читатель» не сможет
этого сделать, так как для этого необходимо войти в критическую сек-
цию, вход в которую заблокирован процессом «писатель».
Мониторы. В связи с тем, что использование семафоров требует
особой осторожности (одна незначительная ошибка может привести к
останову системы), для облегчения корректного функционирования
программ было предложено высокоуровневое средство синхронизации,
называемое монитором. Мониторы представляют собой тип данных,
обладающий собственными переменными, определяющими его состоя-
ние. Значения этих переменных извне могут быть изменены только с
помощью вызова функций-методов монитора. Функции-методы могут
использовать в работе только данные, находящиеся внутри монитора, и
свои параметры. Важной особенностью мониторов является то, что в
любой момент времени только один процесс может быть активен, т.е.
находиться в состоянии готовность или исполнение, внутри данного
монитора. Вот пример описания монитора:
monitor monitor_name
{
описание переменных;
void m1(...){... }
void m2(...){... }
...
void mn(...){... }
{ блок инициализации внутренних переменных;}
}
Однако одних только взаимоисключений недостаточно для того,
чтобы в полном объеме реализовать решение задач, возникающих при
взаимодействии процессов. Необходимы средства организации очеред-
ности процессов, подобно семафорам f(full) и e(empty) в примере.
Для этого в мониторах было введено понятие условных перемен-
ных, над которыми можно совершать две операции wait и signal, отчасти
похожие на операции P и V над семафорами.
monitor ProducerConsumer
{
condition full, empty;
int count;