Взаимные блокировки при обмене данными
Другая разновидность взаимоблокировок может проявиться в системах обмена данными (например, в сетях), в которых один и более процессов связываются путем обмена сообщениями. Общая договоренность предполагает, что процесс А отправляет сообщение-запрос процессу В, а затем блокируется до тех пор, пока В не пошлет назад ответное сообщение. Предположим, что сообщение-запрос где-то затерялось. Процесс А заблокирован в ожидании ответа. Процесс В заблокирован в ожидании запроса на какие-либо его действия. В результате возникает взаимоблокировка.
Но это не является классической взаимоблокировкой, связанной с ресурсами. Процесс А не обладает какими-то ресурсами, которые нужны процессу В, и наоборот. Фактически никаких ресурсов здесь нет даже и в помине. Но тем не менее это взаимоблокировка, соответствующая нашему формальному определению, поскольку есть группа из двух процессов, каждый из которых заблокирован, ожидая события, причиной которого может быть только другой процесс. Подобная ситуация называется коммуникационной взаимоблокировкой,чтобы отличить ее от более распространенной ресурсной взаимоблокировки.
Коммуникационные взаимоблокировки не могут быть предотвращены за счет упорядочения ресурсов (за неимением таковых) или обойдены за счет тщательного планирования (поскольку здесь нет моментов, когда запрос может быть отложен). К счастью, существует другая технология, которая обычно может быть применена для прекращения коммуникационной взаимоблокировки: это истечение времени ожидания. В большинстве сетевых систем обмена данными, как только послано сообщение, на которое ожидается ответ, тут же запускается таймер. Если выставленное в таймере время истечет до поступления ответа, отправитель сообщения предположит, что сообщение затерялось, и пошлет его снова (и снова, и снова, если нужно). Таким образом взаимоблокировка будет предотвращена.
Разумеется, если исходное сообщение не было утрачено, а ответ просто задержался, намеченный получатель может получить сообщение дважды или более раз, возможно, с нежелательными последствиями.
Не все взаимоблокировки, случающиеся в системах обмена данными или в сетях, относятся к коммуникационным. Здесь могут встречаться и ресурсные взаимоблокировки. Рассмотрим, к примеру, сеть, показанную на рис. 6.12. Здесь изображен весьма упрощенный взгляд на Интернет. Согласно рисунку, Интернет состоит из двух видов компьютеров: хостов и маршрутизаторов. Хост (host)— это пользовательский компьютер, либо чей-то домашний персональный компьютер, либо компьютер в компании, либо корпоративный сервер. Маршрутизатор (роутер, router)является специализированным коммуникационным компьютером, перемещающим пакеты с данными от источника к приемнику. Каждый хост подключен к одному или нескольким маршрутизаторам либо по DSL-каналу, либо через подключение к кабельному телевидению, по локальной сети, по обычной телефонной линии, по беспроводной сети, по оптическому кабелю, либо по чему-нибудь еще.
Когда пакет поступает в маршрутизатор от одного из хостов, он помещается в буфер для последующей передачи другому маршрутизатору, а затем другому, до тех пор пока не будет передан по назначению. Эти буферы являются ресурсами, и их количество выражается конечным числом. На рис. 6.12 у каждого маршрутизатора есть только восемь буферов (на практике у них имеются миллионы буферов, но это не меняет сути потенциальной взаимоблокировки, а только влияет на частоту ее возникновения). Предположим, что все пакеты с маршрутизатора А нужно передать маршрутизатору В, все пакеты с маршрутизатора В должны быть отправлены на маршрутизатор С, все пакеты с С должны уйти к Д, а все пакеты с D должны уйти к А. Но ни один пакет не может быть перемещен, поскольку на другом конце нет свободного буфера и мы имеем дело с классической ресурсной взаимоблокировкой, хотя и в центре коммуникационной системы.
Дата добавления: 2017-01-29; просмотров: 1554;