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

Методы объектов

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

Когда компонент исполнительной системы создает новый тип объекта, он может зарегистрировать в диспетчере объектов один или несколько методов. После этого диспетчер объектов вызывает данные методы в строго определенные моменты жизни объекта этого типа: обычно, когда объект создается, удаляется или некоторым образом модифицируется. Методы, поддерживаемые диспетчером объектов, перечислены в табл. 3-5.

Таблица 3-5. Методы объектов

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

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

Перед удалением из памяти временного объекта диспетчер объектов вызывает метод "удалить", если он был зарегистрирован. Диспетчер виртуальной памяти для объектов типа "секция", например, регистрирует данный метод, который освобождает физические страницы, занятые секцией. Метод также гарантирует, что все внутренние структуры данных, выделенные для секции диспетчером виртуальной памяти, будут удалены перед удалением объекта-секции. Эту работу тоже не может выполнить диспетчер объектов, так как он ничего не знает о внутренних принципах работы диспетчера виртуальной памяти. Методы удаления для других типов объектов выполняют аналогичные функции.

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

Объект с именем Floppy0 — это объект-устройство, особый тип объектов, определяемый и используемый системой ввода-вывода. В пространстве имен диспетчера объектов объект-устройство отображает точку входа в домен объектов файловой системы, о котором диспетчер объектов ничего не знает.

При создании типового объекта "устройство" система ввода-вывода ре-гистрирует для него метод "разбор". Когда диспетчер объектов ищет имя объекта, он приостанавливает поиск, если ему встречается объект, имеющий метод разбора. Диспетчер объектов вызывает метод "разбор", передавая ему остаток имени объекта, которое нужно найти.


Например, когда процесс открывает описатель объекта с именем \Device\Floppy0\docs\resume.doc, диспетчер объекта проходит по своему дереву имен, пока не достигнет объекта-устройства с именем Floppy0. Он обнаруживает, что с этим объектом связан метод "разбор", и вызывает данный метод, передавая ему остаток имени объекта, которое он ищет — в данном случае строку \docs\resume.doc. Метод разбора для объектов-устройств — это процедура ввода-вывода. Процедура принимает строку имени и передает ее подходящей файловой системе, которая находит файл на диске и открывает его.

Объекты-символические связи, описанные в разделе 3.2.1.3, также транс-лируются методом "разбор". У типа объектов "символическая связь" имеется свой такой метод. Метод получает имя, подставляет вместо него другое и вызывает диспетчер объектов для повторного поиска объекта. (Если в новом имени также имеется символическая связь, то метод "разбор" будет вызван еще раз.)

Метод "защита", который используется системой ввода—вывода, похож на метод "разбор". Он вызывается всякий раз, когда поток пытается изменить информацию о защите файла. Эта информация для файлов имеет отличия по сравнению с другими объектами, так как хранится в самом файле, а не в памяти. Таким образом, для поиска и изменения информации о защите должна быть вызвана система ввода-вывода.

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