Состязательная ситуация

В некоторых операционных системах совместно работающие процессы могут использовать какое-нибудь общее хранилище данных, доступное каждому из них по чтению и по записи. Это общее хранилище может размещаться в оперативной памяти (возможно, в структуре данных ядра) или может быть представлено каким-нибудь общим файлом.
Расположение общей памяти не меняет характера взаимодействия и возникающих при этом проблем. Чтобы посмотреть, как взаимодействие процессов осуществляется на практике, давайте рассмотрим простой общеизвестный пример — спулер печати. Когда процессу необходимо распечатать какой-нибудь файл, он помещает имя этого файла в специальный каталог спулера.

Другой процесс под названием демон принтера периодически проверяет наличие файлов для печати и в том случае, если такие файлы имеются, распечатывает их и удаляет их имена из каталога.

Представьте, что в нашем каталоге спулера имеется большое количество областей памяти с номерами 0, 1, 2..., в каждой из которых может храниться имя файла. Также представьте, что есть две общие переменные: ом£, указывающая на следующий файл, предназначенный для печати, и т, указывающая на следующую свободную область в каталоге. Эти две переменные могли бы неплохо сохраняться в файле, состоящем из двух слов и доступном всем процессам. В какой-то момент времени области от 0 до 3 пустуют (файлы уже распечатаны). Почти одновременно процессы А и Б решают, что им нужно поставить файл в очередь на печать. Эта ситуация показана на рис. 2.15.

В правовом пространстве, где применимы законы Мэрфи, может случиться следующее. Процесс А считывает значение переменной т и сохраняет значение 7 в локальной переменной по имени пв&_ /твв_$1о1 (следующая свободная область). Сразу же после этого происходит прерывание по таймеру, центральный процессор решает, что процесс А проработал достаточно долго, и переключается на выполнение процесса Б.

Процесс Б также считывает значение переменной т и также получает число 7. Он также сохраняет его в своей локальной переменной пв^_/твв_$1о1. К текущему моменту оба процесса полагают, что следующей доступной областью будет 7. Процесс Б продолжает

Рис. 2.15. Одновременное стремление двух процессов получить доступ к общей памяти


выполняться. Он сохраняет имя своего файла в области 7 и присваивает переменной т обновленное значение 8. Затем он переходит к выполнению каких-нибудь других действий. Через некоторое время выполнение процесса А возобновляется с того места, где он был остановлен. Он считывает значение переменной пвх1_ /твв_8Ы, видит там число 7 и записывает имя своего файла в область 7, затирая то имя файла, которое только что было в него помещено процессом Б. Затем он вычисляет пвх1_/твв_$1о1 + 1, получает значение 8 и присваивает его переменной ш. В каталоге спулера нет внутренних противоречий, поэтому демон печати не заметит никаких нестыковок, но процесс Б никогда не получит вывода на печать.

Пользователь Б будет годами бродить вокруг принтера, тоскливо надеясь получить распечатку, которой не будет никогда. Подобная ситуация, когда два или более процесса считывают или записывают какие-нибудь общие данные, а окончательный результат зависит от того, какой процесс и когда именно выполняется, называется состязательной ситуацией. Отладка программ, в которых присутствует состязательная ситуация, особой радости не доставляет. Результаты большинства прогонов могут быть вполне приемлемыми, но до поры до времени, пока не наступит тот самый редкий случай, когда произойдет нечто таинственное и необъяснимое. К сожалению, с ростом параллелизма из-за все большего количества ядер состязательные ситуации встречаются все чаще.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Состязательная ситуация:

  1. Принципы состязательности и равноправия сторон
  2. Психология сторон. Принцип состязательности
  3. 2.3.3. Реакция на ситуацию интервью, а не на первоначальную ситуацию.
  4. СИТУАЦИЯ
  5. Не известная ситуация.
  6. СИТУАЦИЯ ПОГРАНИЧНАЯ
  7. 5.2.5. Сопоставимые ситуации
  8. 7.3.1. Реакции на ситуацию интервью
  9. 13.4. Типовые следственные ситуации
  10. Жизненные ситуации
  11. Г л а в а 40 ЭКСТРЕМАЛЬНЫЕ СИТУАЦИИ
  12. СИТУАЦИЯ ТЕСТИРОВАНИЯ: ХАРАКТЕРИСТИКА РЕЛЕВАНТНАЯ
  13. СИТУАЦИЯ ПРОБЛЕМНАЯ
  14. 2.4.2. Наглядное представление оригинальной ситуации
  15. Современная ситуация
  16. 4.4.6. Подразумеваемая ссылка на ситуацию
  17. 5.2.1. Гибкость ситуации интервью