Примитивы взаимодействия процессов
Вводится понятия двух примитивов.
sleep - системный запрос, в результате которого вызывающий процесс блокируется, пока его не запустит другой процесс.
wakeup - системный запрос, в результате которого блокированный процесс будет запущен.
Применение примитивов
Основное преимущество - это отсутствие активного ожидания..
Проблема заключается в следующем, если спулер пуст, то wakeup срабатывает в пустую.
Проблема переполненного буфера (проблема производителя и потребителя)
Рассмотрим два процесса, которые совместно используют буфер ограниченного размера, один процесс пишет в буфер, другой считывает данные.
Чтобы первый процесс не писал, когда буфер полный, а второй не считывал, когда он пуст, вводится переменная count для подсчета количества элементов в буфере.
Проблема переполненного буфера
В этой ситуации оба процесса могут попасть в состояние ожидания, если пропадет сигнал активации.
Алгоритм такой ситуации:
1. ПроцессВ, считал count=0 (заблокироваться он еще не успел)
2. Планировщик передал управление процессу А
3. ПроцессА, выполнил все вплоть до wakeup, пытаясь разблокировать процесс В(но он не заблокирован, wakeup срабатывает впустую)
4. Планировщик передал управление процессу В
5. И он заблокировался, и больше сигнала на разблокировку не получит
6. ПроцессАв конце концов заполнит буфер и заблокируется, но сигнала на разблокировку не получит.
Дата добавления: 2014-12-21; просмотров: 793;