- •Общие сведения, ос 90-х годов.
- •Рабочие станции
- •Цели проекта Windows nt: расширяемость и переносимость.
- •Расширяемость
- •Переносимость
- •Цели проекта Windows nt: надежность, совместимость и производительность.
- •Совместимость
- •Производительность
- •Модели Windows nt: клиент-сервер.
- •Объектная модель. Симметричная мультипроцессорная обработка.
- •Защищенные подсистемы. Исполнительная система.
- •Исполнительная система
- •Основные понятия: сессия регистрации, подсистемы среды.
- •Сессия регистрации
- •Подсистемы среды
- •Базовые сервисы: объекты, объекты в памяти.
- •Объекты
- •Объекты размещаются в памяти ос.
- •Ввод-вывод и файловые системы
- •Интернационализация, регионы, Unicode.
- •Интернационализация
- •Регионы
- •Структурная обработка исключений.
- •Удержание объектов
- •Учет использования ресурсов
- •Методы объектов.
- •Защита объектов. Маркеры доступа.
- •Маркеры доступа
- •Списки контроля доступа. Общий принцип работы.
- •Как все это работает вместе
Удержание объектов
Так как все процессы пользовательского режима, осуществляющие доступ к некоторому объекту, должны вначале открыть его описатель, то диспетчер объектов может легко отслеживать, сколько процессов, и даже какие именно, используют данный объект. Отслеживание открытых описателей — это первый шаг в реализации удержания объектов (object retention), т.е. сохранения временных объектов только на то время, пока они используются, с последующим удалением.
Удержание объектов включает две фазы. Первая фаза называется удержанием имени (name retention) и управляется количеством открытых описателей данного объекта. Всякий раз, когда процесс открывает описатель объекта, диспетчер объектов увеличивает счетчик открытых описателей в заголовке объекта (см. рис. 3-1.) После того, как процесс закончил работу с объектом и закрыл имеющиеся у него описатели данного объекта, диспетчер объектов уменьшает счетчик. Когда счетчик обнуляется, диспетчер объектов удаляет объект из своего пространства имен. В результате новые процессы не могут открыть описатели данного объекта. (Имена постоянных объектов не удаляются, поскольку эти объекты представляют такие сущности, как физические устройства, которые остаются на месте, даже если их не использует ни один процесс. Прежде чем удалить постоянный объект, ОС должна сделать его временным.)
Вторая фаза удержания объектов — это прекращение удержания (т.е. удаление объектов), когда они более не используются. Так как ОС обычно осуществляет доступ к объектам посредством указателей, а не описателей, диспетчер объектов должен также учитывать количество указателей на объект, которое он передал процессам ОС. Всякий раз при выдаче нового указателя на объект диспетчер объектов увеличивает счетчик ссылок объекта (reference count);
Когда поток ОС заканчивает работу с объектом, он обращается к диспетчеру объектов для уменьшения счетчика ссылок. Таким образом, даже после того, как счетчик описателей достиг нуля, счетчик ссылок может оставаться положительным, указывая, что ОС продолжает использовать объект. В конце концов счетчик ссылок обнуляется. Когда это происходит, диспетчер объектов удаляет объект из памяти.
Благодаря такой реализации удержания объектов приложение гарантирует, что объект и его имя остаются в памяти, просто сохраняя открытым описатель этого объекта. Программистам, пишущим приложения, которые состоят из двух или более взаимодействующих между собой процессов, не нужно беспокоиться о том, что один процесс может удалить объект, прежде чем другой закончит работу с ним. Кроме того, закрытие описателей объекта приложениями не приводит к удалению объекта, если его по-прежнему использует ОС. Например, один процесс может создать другой процесс для выполнения некоторой программы в фоновом режиме; сразу же после этого первый процесс закрывает описатель второго. Так как второй процесс нужен ОС для выполнения программы, то она сохраняет ссылку на объект-процесс. Только после того как фоновая программа закончит выполнение, диспетчер объектов уменьшит счетчик ссылок второго процесса и затем удалит этот процесс.
