- •Общие сведения, ос 90-х годов.
- •Рабочие станции
- •Цели проекта Windows nt: расширяемость и переносимость.
- •Расширяемость
- •Переносимость
- •Цели проекта Windows nt: надежность, совместимость и производительность.
- •Совместимость
- •Производительность
- •Модели Windows nt: клиент-сервер.
- •Объектная модель. Симметричная мультипроцессорная обработка.
- •Защищенные подсистемы. Исполнительная система.
- •Исполнительная система
- •Основные понятия: сессия регистрации, подсистемы среды.
- •Сессия регистрации
- •Подсистемы среды
- •Базовые сервисы: объекты, объекты в памяти.
- •Объекты
- •Объекты размещаются в памяти ос.
- •Ввод-вывод и файловые системы
- •Интернационализация, регионы, Unicode.
- •Интернационализация
- •Регионы
- •Структурная обработка исключений.
- •Удержание объектов
- •Учет использования ресурсов
- •Методы объектов.
- •Защита объектов. Маркеры доступа.
- •Маркеры доступа
- •Списки контроля доступа. Общий принцип работы.
- •Как все это работает вместе
Учет использования ресурсов
Учет использования ресурсов, так же как и удержание объектов, тесно связан с использованием описателей объектов. Если у объекта есть положительный счетчик открытых описателей, это означает, что некоторый процесс использует данный ресурс. Это также означает, что некоторый процесс "платит" за память, занятую объектом. Когда счетчик описателей объекта обнуляется, процесс, перед тем использовавший объект, не должен более за это платить.
Многие ОС используют квоты для ограничения доступа процессов к системным ресурсам. Однако типы квот, налагаемых на процессы, иногда бывают слишком разнообразными и сложными, а код их учета разбросан по всей системе. Например, пусть в некоторой ОС компонент ввода-вывода учитывает и ограничивает число файлов, которые может открыть процесс, в то время как компонент, отвечающий за распределение памяти, накладывает ограничения на объем памяти, который могут использовать потоки процесса. Компонент управления процессами ограничивает число процессов, которые может создать пользователь, или устанавливает максимальное число потоков в этих процессах. Каждое из этих ограничений отслеживается и выполняется различными компонентами ОС.
В противоположность этому, диспетчер объектов NT обеспечивает централизованное средство учета использования ресурсов. Каждому пользователю назначаются предельные размеры квот, ограничивающие суммарный объем системной памяти, который может быть использован его процессами. Соответственно, заголовок каждого объекта содержит атрибут, называемый "расход квоты" и содержащий значение, которое диспетчер объектов вычитает из выделенной процессу квоты, когда поток этого процесса открывает описатель данного объекта. Потоки процесса могут на протяжении своей жизни открыть много описателей, и всякий раз диспетчер объектов вычитает определенный объем из квоты процесса. Если процессы пользователя открыли слишком много описателей и израсходовали всю его квоту, то их потоки должны закрыть некоторые описатели, прежде чем они смогут открыть новые. Диспетчер объектов, таким образом, ограничивает использование ресурсов процессом (и, в конечном счете, пользователем), учитывая объем памяти, занятой объектами, описатели которых открыты процессом. (Помимо квоты использования объектов, диспетчер процессов NT устанавливает квоту на использование времени процессора каждым процессом пользователя.)
Методы объектов.
Диспетчер объектов использует их сходные черты, чтобы работать с объектами единообразно. Однако, у объектов есть и различия, иногда весьма существенные. Диспетчер объектов был бы слишком большим и сложным, если бы ему пришлось учитывать все особенности различных типов объектов. Он также должен был бы изменяться при добавлении к системе нового типа объектов. Чтобы избежать этого, диспетчер объектов предоставляет возможности перехвата, которые другие компоненты исполнительной системы NT могут использовать для выполнения задач, уникальных для их типов объектов. Эти средства перехвата называются методами объектов (object method).
Когда компонент исполнительной системы создает новый тип объекта, он может зарегистрировать в диспетчере объектов один или несколько методов. После этого диспетчер объектов вызывает данные методы в строго определенные моменты жизни объекта этого типа: обычно, когда объект создается, удаляется или некоторым образом модифицируется. Методы, поддерживаемые диспетчером объектов, перечислены в табл. 3-5.
Таблица 3-5. Методы объектов
Метод |
Когда вызывается |
Открыть Закрыть Удалить Запросить имя Разбор Защита |
При открытии описателя объекта При закрытии описателя объекта Прежде чем диспетчер объектов удалит объект Когда поток запрашивает имя объекта, который находится во вторичном домене объектов, например файла При поиске диспетчером объектов имени объекта, существующего во вторичном домене объектов При считывании или изменении процессом параметров защиты объекта, который находится во вторичном домене объектов, например файла |
Пример использования метода "закрыть" имеет место в системе ввода-вывода. Диспетчер ввода-вывода регистрирует метод закрытия для файлового типа объектов, а диспетчер объектов вызывает данный метод всякий раз, когда он закрывает описатель файлового объекта. Метод "закрыть" проверяет, установлены ли процессом, закрывающим файл, какие-либо блокировки этого файла, и если да, то удаляет их. Проверка на наличие блокировок файла не является действием, которое может или должен осуществлять непосредственно диспетчер объектов.
Перед удалением из памяти временного объекта диспетчер объектов вызывает метод "удалить", если он был зарегистрирован. Диспетчер виртуальной памяти для объектов типа "секция", например, регистрирует данный метод, который освобождает физические страницы, занятые секцией. Метод также гарантирует, что все внутренние структуры данных, выделенные для секции диспетчером виртуальной памяти, будут удалены перед удалением объекта—секции. Эту работу тоже не может выполнить диспетчер объектов, так как он ничего не знает о внутренних принципах работы диспетчера виртуальной памяти. Методы удаления для других типов объектов выполняют аналогичные функции.
Метод "разбор" (и аналогично, метод "получить имя") позволяет диспетчеру объектов переложить задачу поиска объекта на вторичный диспетчер объектов. Вторичный диспетчер объектов находит объект, расположенный вне пространства имен диспетчера объектов, в другом домене объектов. Простейшим примером является система ввода-вывода.
Объект с именем Floppy0 — это объект-устройство, особый тип объектов, определяемый и используемый системой ввода—вывода. В пространстве имен диспетчера объектов объект-устройство отображает точку входа в домен объектов файловой системы, о котором диспетчер объектов ничего не знает.
При создании типового объекта "устройство" система ввода-вывода регистрирует для него метод "разбор". Когда диспетчер объектов ищет имя объекта, он приостанавливает поиск, если ему встречается объект, имеющий метод разбора. Диспетчер объектов вызывает метод "разбор", передавая ему остаток имени объекта, которое нужно найти.
Например, когда процесс открывает описатель объекта с именем \Device\Floppy0\docs\resume.doc, диспетчер объекта проходит по своему дереву имен, пока не достигнет объекта-устройства с именем Floppy0. Он обнаруживает, что с этим объектом связан метод "разбор", и вызывает данный метод, передавая ему остаток имени объекта, которое он ищет — в данном случае строку \docs\resume.doc. Метод разбора для объектов-устройств — это процедура ввода-вывода. Процедура принимает строку имени и передает ее подходящей файловой системе, которая находит файл на диске и открывает его.
Объекты—символические связи также транслируются методом "разбор". У типа объектов "символическая связь" имеется свой такой метод. Метод получает имя, подставляет вместо него другое и вызывает диспетчер объектов для повторного поиска объекта. (Если в новом имени также имеется символическая связь, то метод "разбор" будет вызван еще раз.)
Метод "защита", который используется системой ввода-вывода, похож на метод "разбор". Он вызывается всякий раз, когда поток пытается изменить информацию о защите файла. Эта информация для файлов имеет отличия по сравнению с другими объектами, так как хранится в самом файле, а не в памяти. Таким образом, для поиска и изменения информации о защите должна быть вызвана система ввода-вывода.
