E1Distributed operating system project
ГлавнаяАрхитектура Е1ДокументыКоманда
Rus
Eng
Архитек...Междоменные вызовы
Архитектура E1
Концепциии E1
Распределенный объект
Обзор архитектуры
Домены защиты
Междоменные вызовы
Потоки
Компонентные сервисы
Репликация
Разработка ПО
Междоменные вызовы

Объекты в Е1 взаимодействуют посредством вызова методов. Данный вид взаимодействия является синхронным. Каждый вызов сопровождается передачей набора аргументов и возвратом нуля или более значений. Передаваемые аргументы и возвращаемые значения описываются разработчиком объекта средствами Языка Описания Интерфейсов (IDL).

В Е1 все вызовы методов выполняются локально. Т.е., при вызове распределенного объекта происходит обращение к его реплике в локальном узле. Для того чтобы во время работы с объектом такая реплика существовала и не была уничтожена системой сборки мусора, необходимо предварительно создать сильную ссылку на данный объект >>.

Для вызова методов объекта используется указатель на один из его интерфейсов. Поскольку все объекты в Е1 находятся в едином виртуальном адресном пространстве, этот указатель является действительным в любом узле сети и в любом домене. Объект, владеющий указателем на интерфейс другого объекта, может вызывать его методы одинаковым образом, независимо от того, находится ли вызываемый объект в том же или в другом домене. Все интерфейсы в Е1 содержат стандартный метод навигации, позволяющий получить указатель на любой другой интерфейс того же распределенного объекта.

Рассмотрим, каким образом выполняются вызовы методов в Е1. В пределах одного домена взаимодействие объектов происходит так же как в языке C++. Вызов метода представляет собой простую передачу управления по адресу, записанному в таблице методов вызываемого объекта. При этом аргументы вызова помещаются в стек и в регистры процессора.

С точки зрения взаимодейстующих объектов, междоменные вызовы ничем не отличаются от локальных. Однако, их реализация на уровне ОС несколько сложнее. При обращении к объекту, расположенному вне локального домена, возникает исключительная ситуация. Обработка данного исключения осуществляется специальным объектом Адаптером Междоменных Вызовов(АМВ), находящимся в том же домене, что и объект, вызвавший исключение. Задача АМВ - подготовить стек, который будет отображен в домен вызываемого объекта и на котором будет выполнен вызов метода. В этот стек необходимо скопировать аргументы вызова. В Е1 поддерживаются аргументы двух типов: передаваемые по значению и по ссылке. Аргументы, передаваемые по значению, копируются в стек непосредственно. Данные, передаваемые по ссылке, также необходимо скопировать в стек и соответствующим образом настроить указатель на них. Механизм междоменных вызовов не позволяет передавать большие массивы данных без копирования. Для этого следует использовать аппарат разделяемой памяти Е1.

В каждом узле находится только один АМВ, который отображается во все домены. Таким образом, АМВ выполняет роль универсального прокси, обрабатывающего все междоменные вызовы в системе. Подготовка стека для междоменного вызова должна производиться на основе IDL-описания вызываемого метода. Поэтому для копирования параметров в стек вызова АМВ обращается к объекту класса вызываемого объекта, который предоставляет для этого специальные методы.

Для того чтобы не создавать отдельный сегмент стека для выполнения каждого междоменного вызова, АМВ использует стек, на котором поток, производящий данный вызов, выпонялся в исходном домене. Вершина стека выравнивается по границе страницы и полученный адрес интерпретируется как дно нового стека (см. рисунок). Таким образом, после перехода в целевой домен поток продолжает выполняться на том же стеке, что и в исходном домене, но при этом содержимое исходного стека изолировано от вызываемого объекта.

Стек при междоменном вызове

Управление стеком при междоменном вызове. BP и SP - указатели дна и вершины стека в исходном домене. BP’ и SP’ - указатели дна и вершины стека в целевом домене.

После подготовки стека АМВ передает управление микроядру для завершения междоменного вызова. Ядро обращается к Реестру Объектов для проверки права вызывающего объекта на выполнение данного вызова, после чего отображает сформированный стек в целевой домен и передает управление вызываемому объекту. Возврат из междоменного вызова происходит аналогичным образом, через АМВ целевого домена.

Copyright E1 Team 2003
mail:team@E1OS.org