
4.3.
Удаление сущностей, на которые нет ссылок 257
который файл, причем в будущем этот файл ни одному процессу не понадобит-
ся,
Р может при своем завершении удалить этот файл. К сожалению, управление
удалением сущностей в распределенных системах обычно сложнее. Так, в част-
ности, нередко неизвестно, где в системе были созданы ссылки на удаляемую
сущность с намерением воспользоваться ими позднее для доступа к ней. Если
впоследствии к удаленной сущности действительно произойдет попытка досту-
па с помощью одной из таких ссылок, это приведет к ошибке.
С другой стороны, недопустимо также вообще не удалять сущность просто
из-за отсутствия гарантий, что на нее не существует ссылок. Если ссылок все же
не существует, мы окажемся в ситуации, когда сущность, которая продолжает по-
треблять ресурсы, никогда не будет использоваться. Понятно, что эта сущность
—
просто мусор и ее следует удалить.
Для снижения остроты проблем, связанных с удалением сущностей, на кото-
рые нет ссылок, распределенные системы могут предоставить механизмы их ав-
томатического удаления. Эти механизмы известны под общим названием рас-
пределенных сборщиков
мусора
{distributed garbage
collectors).
В этом разделе мы
поближе познакомимся с взаимоотношениями сущностей именования и локали-
зации, а также с автоматической уборкой «ничейных» сущностей.
4.3.1.
Проблема объектов, на которые нет ссылок
Чтобы понять, как производится уборка мусора, сосредоточимся на уборке рас-
пределенных объектов, в частности удаленных объектов. Напомним, что удален-
ный объект реализуется так, что его состояние целиком находится на сервере
объектов, а клиент работает исключительно с заместителем. Как мы узнали в раз-
деле 2.3, ссылка на удаленный объект обычно реализуется парой (заместитель,
скелетон). Заместитель клиента содержит всю информацию, необходимую для
работы с объектом через связанный с ним скелетон, реализованный на сервере.
В
наших примерах скелетон принимает участие в администрировании, необходи-
мом для сборки мусора, вместе с заместителем. Другими словами, все что необхо-
димо сделать для сборки мусора, скрыто как от пользователя, так и от самого объ-
екта. Отметим, что и сам объект может содержать удаленные ссылки на другие
объекты, например локальные ссылки на заместители этих объектов. Точно так
же удаленные ссылки могут передаваться другим процессам путем копирования
заместителя, связанного с процессом, в другой процесс.
Из этого следует, что к объекту можно получить доступ, только если у нас
есть удаленная ссылка на него. Объект, на который отсутствуют удаленные ссыл-
ки,
можно удалять из системы. С другой стороны, наличие удаленных ссылок не
означает, что объект будет доступным всегда. По различным причинам возмож-
но возникновение двух объектов, ссылающихся друг на друга и не имеющих дру-
гих ссылок. Эта ситуация может быть легко обобщена на цепочку объектов, каж-
дый из которых ссылается на соседа. Подобные объекты также следует выявлять
и удалять.
В общем виде модель ссылок на объекты может быть представлена в виде гра-
фа, каждый узел которого
—
это объект. Ребро, идущее от узла М к узлу N, отра-