stringtranslate.com

Тупик

Оба процесса нуждаются в ресурсах для продолжения выполнения. P1 требует дополнительного ресурса R1 и владеет ресурсом R2 , P2 требует дополнительного ресурса R2 и владеет R1 ; ни один процесс не может продолжаться.
Четыре процесса (синие линии) конкурируют за один ресурс (серый кружок), следуя политике «правый перед левым». Взаимная блокировка возникает, когда все процессы одновременно блокируют ресурс (черные линии). Тупиковую ситуацию можно разрешить, нарушив симметрию.

В параллельных вычислениях тупик — это любая ситуация, в которой ни один член некоторой группы объектов не может продолжить работу, поскольку каждый из них ожидает, пока другой член, включая себя, предпримет действие, например отправит сообщение или, что чаще, снимет блокировку . [1] Тупики являются распространенной проблемой в многопроцессорных системах, параллельных вычислениях и распределенных системах , поскольку в этих контекстах системы часто используют программные или аппаратные блокировки для арбитража общих ресурсов и реализации синхронизации процессов . [2]

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

В системе связи взаимоблокировки возникают в основном из-за потери или повреждения сигналов, а не из-за конкуренции за ресурсы. [5]

Два процесса конкурируют за два ресурса в противоположном порядке.
  1. Происходит единый процесс.
  2. Более поздний процесс должен подождать.
  3. Взаимная блокировка возникает, когда первый процесс блокирует первый ресурс в то же время, когда второй процесс блокирует второй ресурс.
  4. Взаимную блокировку можно разрешить, отменив и перезапустив первый процесс.

Индивидуально необходимые и совместно достаточные условия тупиковой ситуации.

Тупиковая ситуация на ресурсе может возникнуть только в том случае, если в системе одновременно возникают все следующие условия: [6]

  1. Взаимное исключение : хотя бы один ресурс должен храниться в режиме, не предназначенном для совместного использования; то есть ресурс может использовать только один процесс одновременно. [7] В противном случае процессам не будет запрещено использовать ресурс при необходимости. В любой момент времени только один процесс может использовать ресурс. [8]
  2. Удержание и ожидание или удержание ресурсов: процесс в настоящее время удерживает хотя бы один ресурс и запрашивает дополнительные ресурсы, которые удерживаются другими процессами.
  3. Никакого вытеснения : ресурс может быть освобожден только добровольно удерживающим его процессом.
  4. Циклическое ожидание: каждый процесс должен ожидать ресурса, удерживаемого другим процессом, который, в свою очередь, ожидает, пока первый процесс освободит ресурс. В общем, существует набор процессов ожидания P = { P 1 , P 2 , ..., P N }, таких, что P 1 ожидает ресурса, удерживаемого P 2 , P 2 ожидает ресурса, удерживаемого P 2 . на P 3 и так далее, пока P N не будет ждать ресурса, удерживаемого P 1 . [4] [9]

Эти четыре условия известны как условия Коффмана из-за их первого описания в статье Эдварда Г. Коффмана-младшего 1971 года [9].

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

Обработка тупиков

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

Игнорирование тупика

В этом подходе предполагается, что взаимоблокировки никогда не возникнут. Это также применение алгоритма Страуса . [12] [13] Первоначально этот подход использовался в MINIX и UNIX . [9] Это используется, когда временные интервалы между возникновением взаимоблокировок велики и потеря данных, возникающая каждый раз, является допустимой.

Игнорирование взаимоблокировок можно безопасно выполнить, если формально доказано, что взаимоблокировки никогда не возникают. Примером является структура RTIC. [14]

Обнаружение

При обнаружении взаимоблокировок допускается возникновение взаимоблокировок. Затем состояние системы проверяется на наличие взаимоблокировки и впоследствии исправляется. Используется алгоритм, который отслеживает распределение ресурсов и состояние процессов, откатывает и перезапускает один или несколько процессов, чтобы устранить обнаруженную взаимоблокировку. Обнаружить уже произошедшую взаимоблокировку легко, поскольку ресурсы, которые каждый процесс заблокировал и/или запрашивал в данный момент, известны планировщику ресурсов операционной системы. [13]

После обнаружения взаимоблокировки ее можно исправить одним из следующих методов :

  1. Завершение процесса: один или несколько процессов, вовлеченных в тупик, могут быть прерваны. Можно было бы решить прервать все конкурирующие процессы , вовлеченные в тупик. Это гарантирует, что тупиковая ситуация будет разрешена надежно и быстро. [ нужна цитата ] Но затраты высоки, поскольку частичные вычисления будут потеряны. Или можно выбрать прерывание одного процесса за раз, пока тупиковая ситуация не будет устранена. Этот подход имеет большие накладные расходы, поскольку после каждого прерывания алгоритм должен определить, находится ли система по-прежнему в тупике. [ нужна цитата ] При выборе кандидата на прекращение необходимо учитывать несколько факторов, таких как приоритет и давность процесса. [ нужна цитата ]
  2. Вытеснение ресурсов: ресурсы, выделенные различным процессам, могут последовательно вытесняться и выделяться другим процессам до тех пор, пока тупиковая ситуация не будет преодолена. [15] [ не удалось проверить ]

Профилактика

(А) Два процесса конкурируют за один ресурс, следуя политике «первым пришел — первым обслужен». (Б) Тупиковая ситуация возникает, когда оба процесса одновременно блокируют ресурс. (C) Тупик можно разрешить , нарушив симметрию замков. (D) Тупиковую ситуацию можно предотвратить , нарушив симметрию запирающего механизма.

Предотвращение тупиковых ситуаций предотвращает возникновение одного из четырех условий Коффмана.

Предотвращение тупиковых ситуаций

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

Для предотвращения тупиковых ситуаций операционной системе заранее предоставляется дополнительная информация о том, какие ресурсы процесс будет запрашивать и использовать в течение своей жизни. Алгоритм предотвращения тупиковых ситуаций анализирует каждый запрос, проверяя, что нет возможности возникновения тупиковой ситуации в будущем, если запрошенный ресурс будет выделен. Недостатком этого подхода является требование заранее предоставить информацию о том, как ресурсы будут запрашиваться в будущем. Одним из наиболее часто используемых алгоритмов предотвращения тупиковых ситуаций является алгоритм Банкера . [17]

Лайвлок

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

Этот термин был придуман Эдвардом А. Эшкрофтом в статье 1975 года [18] в связи с исследованием систем бронирования авиабилетов. [19] Livelock — это особый случай нехватки ресурсов ; общее определение лишь констатирует, что конкретный процесс не прогрессирует. [20]

Livelock представляет собой риск, связанный с некоторыми алгоритмами , которые обнаруживают взаимоблокировку и восстанавливаются из нее . Если действие предпринимают более одного процесса, алгоритм обнаружения взаимоблокировок может запускаться повторно. Этого можно избежать, гарантируя, что только один процесс (выбранный произвольно или по приоритету) выполняет действие. [21]

Распределенный тупик

Распределенные взаимоблокировки могут возникать в распределенных системах при использовании распределенных транзакций или управления параллелизмом .

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

Фантомные взаимоблокировки — это взаимоблокировки, которые ошибочно обнаруживаются в распределенной системе из-за внутренних задержек системы, но на самом деле не существуют. Например, если процесс освобождает ресурс R1 и выдает запрос на R2 , а первое сообщение теряется или задерживается, координатор (детектор взаимоблокировок) может ошибочно заключить о взаимоблокировке (если запрос R2 при наличии R1 приведет к тупик).

Смотрите также

Рекомендации

  1. ^ Кулурис, Джордж (2012). Концепции и проектирование распределенных систем . Пирсон. п. 716. ИСБН 978-0-273-76059-7.
  2. ^ Падуя, Дэвид (2011). Энциклопедия параллельных вычислений. Спрингер. п. 524. ИСБН 9780387097657. Архивировано из оригинала 18 апреля 2021 года . Проверено 16 октября 2020 г.
  3. ^ Фальсафи, Бабак; Мидкифф, Сэмюэл; Деннис, ДжекБ; Деннис, ДжекБ; Готинг, Амол; Кэмпбелл, Рой Х; Клаузекер, Кристоф; Кранцльмюллер, Дитер; Эмер, Джоэл; Фоссум, Трюггве; Смит, Бертон; Филипп, Бернар; Самех, Ахмед; Иригоэн, Франсуа; Фотрие, Поль; Праун, Кристоф фон; Боккино, Роберт Л.; Снир, Марк; Джордж, Томас; Зарин, Вивек; Янн, Джоефон (2011). «Тупики». Энциклопедия параллельных вычислений . Бостон, Массачусетс: Springer US. стр. 524–527. дои : 10.1007/978-0-387-09766-4_282. ISBN 978-0-387-09765-7. S2CID  241456017. Взаимная блокировка — это состояние, которое может возникнуть в системе, состоящей из нескольких процессов, которые могут получить доступ к общим ресурсам. Говорят, что тупиковая ситуация возникает, когда два или более процесса ждут друг от друга освобождения ресурса. Ни один из процессов не может добиться прогресса.
  4. ^ abc Зильбершац, Авраам (2006). Принципы операционной системы (7-е изд.). Вили-Индия. п. 237. ИСБН 9788126509621. Архивировано из оригинала 25 января 2022 года . Проверено 16 октября 2020 г.
  5. ^ Шнайдер, Г. Майкл (2009). Приглашение в информатику. Cengage Обучение. п. 271. ИСБН 978-0324788594. Архивировано из оригинала 18 апреля 2021 года . Проверено 16 октября 2020 г.
  6. ^ Зильбершац, Авраам (2006). Принципы операционной системы (7-е изд.). Вили-Индия. п. 239. ИСБН 9788126509621. Архивировано из оригинала 18 апреля 2021 года . Проверено 16 октября 2020 г.
  7. ^ Концепции операционной системы . Уайли. 2012. с. 319. ИСБН 978-1-118-06333-0.
  8. ^ «ECS 150, весна 1999 г.: четыре необходимых и достаточных условия тупика» . nob.cs.ucdavis.edu . Архивировано из оригинала 29 апреля 2018 года . Проверено 29 апреля 2018 г.
  9. ^ abc Сибу, К. (2009). Введение во встраиваемые системы (1-е изд.). Тата МакГроу-Хилл Образование. п. 446. ИСБН 9780070145894. Архивировано из оригинала 18 апреля 2021 года . Проверено 16 октября 2020 г.
  10. ^ «Операционные системы: Тупики». www.cs.uic.edu . Архивировано из оригинала 28 мая 2020 года . Проверено 25 апреля 2020 г. Если категория ресурсов содержит более одного экземпляра, то наличие цикла в графе распределения ресурсов указывает на возможность тупика, но не гарантирует его. Рассмотрим, например, рисунки 7.3 и 7.4 ниже:
  11. ^ Зильбершац, Авраам (2006). Принципы операционной системы (7-е изд.). Вили-Индия. п. 237. ИСБН 9788126509621. Архивировано из оригинала 18 апреля 2021 года . Проверено 16 октября 2020 г.
  12. ^ аб Стюарт, Брайан Л. (2008). Принципы операционных систем (1-е изд.). Cengage Обучение. п. 446. ИСБН 9781418837693. Архивировано из оригинала 18 апреля 2021 года . Проверено 16 октября 2020 г.
  13. ^ аб Таненбаум, Эндрю С. (1995). Распределенные операционные системы (1-е изд.). Пирсон Образование. п. 117. ИСБН 9788177581799. Архивировано из оригинала 18 апреля 2021 года . Проверено 16 октября 2020 г.
  14. ^ «Предисловие - Параллелизм в реальном времени, управляемый прерываниями» . Архивировано из оригинала 18 сентября 2020 года . Проверено 1 октября 2020 г.
  15. ^ «Центр знаний IBM». www.ibm.com . Архивировано из оригинала 19 марта 2017 года . Проверено 29 апреля 2018 г.
  16. ^ Зильбершац, Авраам (2006). Принципы операционной системы (7-е изд.). Вили-Индия. п. 244. ИСБН 9788126509621. Архивировано из оригинала 18 апреля 2021 года . Проверено 16 октября 2020 г.
  17. ^ «Алгоритмы предотвращения тупиков в операционной системе (ОС)» . Электронный разум . 26 января 2022 г.
  18. ^ Эшкрофт, Э.А. (1975). «Доказательство утверждений о параллельных программах». Журнал компьютерных и системных наук . 10 : 110–135. дои : 10.1016/S0022-0000(75)80018-3 .
  19. ^ Квонг, Ю.С. (1979). "Об отсутствии лайвлоков в параллельных программах". Семантика параллельных вычислений . Конспекты лекций по информатике. Том. 70. стр. 172–190. дои : 10.1007/BFb0022469. ISBN 3-540-09511-Х.
  20. ^ Андерсон, Джеймс Х.; Ён Джик Ким (2001). «Взаимное исключение общей памяти: основные тенденции исследований с 1986 года». Архивировано из оригинала 25 мая 2006 года.
  21. ^ Цёбель, Дитер (октябрь 1983 г.). «Проблема тупика: классифицирующая библиография». Обзор операционных систем ACM SIGOPS . 17 (4): 6–15. дои : 10.1145/850752.850753 . ISSN  0163-5980. S2CID  38901737.

дальнейшее чтение

Внешние ссылки