
9.3. Globe 605
Ссылки на объекты и контактные адреса
Всякий распределенный разделяемый объект в Globe имеет глобальный уникаль-
ный идентификатор (OID)
—
256-битную строку. OID в Globe
—
это, согласно
определению из главы 4, правильный (true) идентификатор. Другими словами,
OID в Globe относится самое большее к одному распределенному разделяемому
объекту, не может быть использован повторно для именования другого объекта
и
любой объект имеет максимум один идентификатор OID.
OID в Globe используется только для сравнения ссылок на объекты. Так, на-
пример, предположим, что процессы Ли В привязаны к распределенному разде-
ляемому объекту. Каждый из процессов может запросить OID объекта, к которо-
му они привязаны. Процессы А и В будут считаться привязанными к одному
и
тому же объекту в том и только в том случае, если одинаковы их идентифика-
торы OID.
Чтобы локализовать объект, необходимо разрешить контактный адрес этого
объекта в службе локализации Globe. Объекты ссылаются на эту службу посред-
ством
дескриптора объекта {object
handle),
который представляет собой битовую
строку, содержащую OID и другую информацию, необходимую службе локали-
зации. Дескриптор объекта также является идентификатором, однако нет ника-
ких гарантий того, что один и тот же объект всегда будет иметь один и тот же
дескриптор объекта. Важно понимать, что дескриптор объекта, используемый
в службе локализации Globe, не несет какой-либо информации о текущем место-
положении объекта.
Служба локализации Globe организована по принципу иерархической служ-
бы локализации, о которых говорилось в пункте 4.2.4, и мы не станем повторять
здесь этот материал. Детальные сведения по этой теме можно найти в [24, 469].
Вопрос проектирования и реализации собственно сервера локализации вместе
с соображениями о его производительности разбирается в [33].
Служба локализации Globe возвращает контактный адрес. Этот контактный
адрес напоминает ссылки на объект, не зависящие от его местонахождения, ко-
торые используются в CORBA и других распределенных системах. Если игно-
рировать некоторые частные детали, контактный адрес состоит из двух частей.
Первая
—
это
идентификатор адреса {address
identifier), по которому служба ло-
кализации может определить правильный листовой узел для пересылки на него
операций вставки или удаления, предназначенных для соответствующего кон-
тактного адреса. Напомним, что поскольку контактный адрес зависит от место-
положения, важно, чтобы вставка или удаление для него начинались с нужного
листового узла.
Вторая часть содержит реальную информацию об адресе, но эта информация
для службы локализации абсолютно недоступна. Для службы локализации ад-
рес
—
это просто массив байтов, который может в равной степени соответство-
вать реальному сетевому адресу, указателю на интерфейс (после маршалинга ука-
зателя) или даже полностью «упакованному» (путем маршалинга) заместителю.
В Globe в настоящее время поддерживаются два типа адресов. Упакованный
адрес {stacked address)
представляет многоуровневый набор протоколов, каждый
из уровней которого описывается записью с тремя полями (табл. 9.15).