Атака условия циклического ожидания

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

Другой способ, позволяющий избежать циклического ожидания, заключается в поддержке общей нумерации всех ресурсов (рис. 6.11, а). Теперь действует следующее правило: процессы могут запрашивать ресурс, когда только пожелают, но все запросы должны быть сделаны в порядке нумерации ресурсов. Процесс может запросить сначала принтер, затем накопитель на магнитной ленте, но не может сначала потребовать плоттер, а затем принтер.

Если придерживаться этого правила, то у графа распределения ресурсов никогда не будет циклов. Посмотрим, почему это имеет место в случае двух процессов, показанных на рис. 6.11, б. Взаимоблокировка может произойти, только если процесс А запросит ресурс], а процесс В запросит ресурс I. Предположим, что ресурсы I и] относятся к разным типам, тогда они будут иметь и разные номера. Если I >], то процессу А не разрешается запрашивать ресурс], потому что его номер меньше, чем номер уже имеющегося у него ресурса. Если же I < ], то процесс В не может запрашивать ресурс I, потому что его номер меньше номера уже удерживаемого этим процессом ресурса. Так или иначе, взаимоблокировка невозможна.

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

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


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

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


Различные методы предупреждения взаимоблокировок сведены в табл. 6.1.


6.7.

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

Еще по теме Атака условия циклического ожидания:

  1. 6.1. Развитие циклических представлений
  2. 13.1.2. Циклические и волновые теории жизни общества
  3. 5.3.2. Мозговая атака
  4. АТАКА МОЗГОВАЯ
  5. Правило "атака – лучшая оборона".
  6. Правило «атака — лучшая оборона».
  7. § 2 Условное обязательство. – Разные виды условий. – Наступление условия и его действие. – Соотношение условий. – Понятие о сроке. – Действие срока.
  8. § 66 Об условных назначениях вообще. – Условия невозможные и незаконные. – Условия, стесняющие гражданскую свободу.
  9. ТРЕВОГА ОЖИДАНИЯ
  10. ПОЧЕМУ ДЕЙСТВУЮТ ПОЗИТИВНЫЕ ОЖИДАНИЯ
  11. ЗАКОН ОЖИДАНИЯ