→ Пошук по сайту       Увійти / Зареєструватися

Описатели объектов

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

Описатель объекта NT — это индекс в специфичной для процесса таблице объектов (object table). Таблица объектов процесса содержит указатели на все объекты, описатели которых открыты процессом. Процесс может получить описатель объекта, создав объект, или открыв описатель существующего объекта, или унаследовав описатель от другого процесса, или получив дубликат описателя из другого процесса. На рис. 3-7 показана связь между процессом и его таблицей объектов.

Каждый вход таблицы объектов содержит предоставленные права доступа для соответствующего описателя и его режим наследования (inheritance designation) — иными словами, получат ли процессы, созданные данным процессом, копию этого описателя в своих таблицах объектов. Хотя термин описатель (handle), строго говоря, относится только к индексу в таблице, разработчики используют этот термин и для обозначения данных, хранящихся в соответствующем входе таблицы.

Структура таблицы объектов

Рис. 3-7. Структура таблицы объектов.


Два процесса совместно используют объект, если оба они открыли его описатели. Каждый из этих описателей уникален, как показано на рис. 3-8.

Создатель объекта определяет, могут ли описатели объекта наследоваться из процесса теми процессами, которые он создал. Это средство позволяет поддерживать среды, включая Win32 и POSIX, разрешающие наследование ресурсов.

При завершении процесса соответствующий объект-процесс становится кандидатом на удаление из системы (в зависимости от того, используется ли он все еще другим процессом, как будет описано далее). Прежде чем удалить объект-процесс, диспетчер объектов вызывает метод "удалить" для объектов-процессов, который закрывает все описатели в таблице объектов процесса (подробнее см. разд. 3.2.3.)

Совместное использование объекта

Рис. 3-8. Совместное использование объекта.

Удержание объектов

Так как все процессы пользовательского режима, осуществляющие доступ к некоторому объекту, должны вначале открыть его описатель, то диспетчер объектов может легко отслеживать, сколько процессов, и даже какие именно, используют данный объект. Отслеживание открытых описателей — это первый шаг в реализации удержания объектов (object retention), т.е. сохранения временных объектов только на то время, пока они используются, с последующим удалением.

Учет использования ресурсов

Учет использования ресурсов, так же как и удержание объектов, тесно связан с использованием описателей объектов. Если у объекта есть положительный счетчик открытых описателей, это означает, что некоторый процесс использует данный ресурс. Это также означает, что некоторый процесс "платит" за память, занятую объектом. Когда счетчик описателей объекта обнуляется, процесс, перед тем использовавший объект, не должен более за это платить.

загрузка...
Сторінки, близькі за змістом