Основная сущность в ядре - объект. Объект имеет атрибуты и имя. Если установлен атрибут "публичный", объект имеет имя, и его можно подключить к своему процессу при помощи системного вызова (см. ниже). Объекты поддерживают все или часть из универсальных методов, в зависимости от типа, а так же собственные методы: [*]Создать [*]Передать права [*]Забрать права [*]Ожидать события (специфичного для объекта или уничтожения) [*]Подписаться на событие [*]Уничтожить [*]Вызвать [*]Передать [*]Получить атрибуты [*]Установить атрибуты
Передача и отбирание прав доступно только владельцу объекта. Общее право для всех типов объектов - владелец, его нельзя отобрать. Остальные права - специфичные для типа объекта.
При уничтожении объекта удаляется хендл объекта, принадложащий текущему процессу, и уменьшается число ссылок. Когда число ссылок достигает 0, уничтожаются сам объект и все объекты, владельцем которых является уничтоженный объект.
Метод передачи возвращает идентификатор для указанного объекта и процесса, который можно передать процессу.
Объекты бывают следующих типов: [*]Процесс. Представляет собой контейнер для других объектов. Метод "Вызвать" не доступен. [*]Поток. Вызов потока начинает выполнение процесса в контексте владельца. [*]Регион памяти. Поддерживает специальные методы: подключить, отключить, установить имя и флаг разделения. Метод "Вызвать" не доступен. [*]Регион ввода-вывода. Доступен на платформах, на которых есть порты. Поддерживает методы подключить и отключить. Подключение является эксклюзивным. [*]Ящик сообщений. Владелец ящика может подписать его на события других объектов, но нельзя подписать ящик на события ящиков. Поддерживает право "можно вызвать", которое присваивается всем процессам, подключающим публичный ящик.
Помимо методов существует вызов перечисления, который возвращает в виде региона памяти информацию о объектах с указанными атрибутами - тип, владелец и т.п., и вызов подключения публичного объекта по имени с правами по умолчанию, специфичными для типа.
|