<<
>>

Решение проблемы производителя и потребителя с помощью семафоров

Как показано в листинге 2.5, проблему потерянных сигналов запуска можно решить с помощью семафоров. Очень важно, чтобы они были реализованы неделимым образом. Стандартным способом является реализация операций down и up в виде системных вызовов с запретом операционной системой всех прерываний на период проверки семафора, изменения его значения и возможного перевода процесса в состояние ожидания.
Поскольку для выполнения всех этих действий

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

Листинг 2.5. Решение проблемы производителя и потребителя с помощью семафоров

В представленном решении используются три семафора: один для подсчета заполненных сегментов буфера (full), другой для подсчета пустых сегментов (empty), а третий предназначен для исключения одновременного доступа производителя и потребителя (mutex) к буферу. Значение счетчика full изначально равно нулю, счетчик empty равен числу сегментов в буфере, а счетчик mutex равен 1. Семафоры, исходное значение которых установлено в 1, предназначенные для исключения одновременного нахождения в критической секции двух

процессов, называются двоичными семафорами.

Взаимное исключение обеспечивается, если каждый процесс выполняет операцию down перед входом в критическую секцию и up — после выхода из нее.

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

В примере, представленном в листинге 2.5, семафоры используются двояко. Это различие достаточно ощутимо, чтобы сказать о нем особо. Семафор mutex предназначен для реализации взаимного исключения, то есть для исключения одновременного обращения к буферу и к связанным переменным двух процессов. Мы рассмотрим взаимное исключение и методы его реализации в следующем разделе.

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

2.2.6.

<< | >>
Источник: Э. ТАНЕНБАУМ, А. ВУДХАЛЛ. ОПЕРАЦИОННЫЕ СИСТЕМЫ Разработка и реализация 3-е издание. 2007

Еще по теме Решение проблемы производителя и потребителя с помощью семафоров:

  1. Причиной любой проблемы является ее решение.
  2. Совместный поиск взаимоприемлемого решения проблемы
  3. СОВРЕМЕННЫЕ ТЕНДЕНЦИИ И ПРОБЛЕМЫ В ОТЕЧЕСТВЕННОЙ ТЕОРИИ И ПРАКТИКЕ ПСИХОЛОГИЧЕСКОЙ ПОМОЩИ
  4. Теоретико-методологические предпосылки практических решений проблемы личности в правоохранительных органах.
  5. 5.2.19. Внимание ко всем предыдущим аспектам и безразличие к другим проблемам, решение которых не составит никакого труда
  6. Чтобы избавиться от растерянности, надо научиться жить с еще не решенными проблемами и не требовать от жизни немедленного совета, как их устранить.
  7. 3. Права производителей фонограмм.
  8. 5. Права производителя фонограммы
  9. 1. Понятие потребителя
  10. § 6. Исключительные права на средства индивидуализации товаров и их производителей
  11. 3. Договоры о передаче исключительных прав производителя фонограммы
  12. Ориентация организации на потребителя.
  13. 3. Право потребителей на информацию
  14. 5. 3ащита прав потребителей
  15. § 3. Исправление недостатков решения арбитражного суда. Дополнительное решение
  16. Глава 31. Патентное право, права на средства индивидуализации товаров и их производителей («промышленная собственность»)
  17. 5. Договоры о передаче прав на средства индивидуализации товаров и их производителей