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

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

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

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

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

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

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

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

Условие Метод
Взаимное исключение Организация очереди на диске
Удержание и ожидание Изначальный запрос всех ресурсов
Невыгружаемость Отобрать ресурсы
Циклическое ожидание Провести порядковую нумерацию ресурсов







Дата добавления: 2017-01-29; просмотров: 1239;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.003 сек.