Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы к экзамену СМО(ответы. Еличева).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
8.96 Mб
Скачать

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

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

Многие ОС используют квоты для ограничения доступа процессов к сис­темным ресурсам. Однако типы квот, налагаемых на процессы, иногда бывают слишком разнообразными и сложными, а код их учета разбросан по всей систе­ме. Например, пусть в некоторой ОС компонент ввода-вывода учитывает и огра­ничивает число файлов, которые может открыть процесс, в то время как компо­нент, отвечающий за распределение памяти, накладывает ограничения на объем памяти, который могут использовать потоки процесса. Компонент управления процессами ограничивает число процессов, которые может создать пользова­тель, или устанавливает максимальное число потоков в этих процессах. Каждое из этих ограничений отслеживается и выполняется различными компонентами ОС.

В противоположность этому, диспетчер объектов NT обеспечивает цент­рализованное средство учета использования ресурсов. Каждому пользователю назначаются предельные размеры квот, ограничивающие суммарный объем системной памяти, который может быть использован его процессами. Соответ­ственно, заголовок каждого объекта содержит атрибут, называемый "расход кво­ты" и содержащий значение, которое диспетчер объектов вычитает из выделен­ной процессу квоты, когда поток этого процесса открывает описатель данного объекта. Потоки процесса могут на протяжении своей жизни открыть много описателей, и всякий раз диспетчер объектов вычитает определенный объем из квоты процесса. Если процессы пользователя открыли слишком много описате­лей и израсходовали всю его квоту, то их потоки должны закрыть некоторые описатели, прежде чем они смогут открыть новые. Диспетчер объектов, таким образом, ограничивает использование ресурсов процессом (и, в конечном сче­те, пользователем), учитывая объем памяти, занятой объектами, описатели кото­рых открыты процессом. (Помимо квоты использования объектов, диспетчер процессов NT устанавливает квоту на использование времени процессора каж­дым процессом пользователя.)

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

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

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

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

Метод

Когда вызывается

Открыть

Закрыть

Удалить

Запросить имя

Разбор

Защита

При открытии описателя объекта

При закрытии описателя объекта

Прежде чем диспетчер объектов удалит объект

Когда поток запрашивает имя объекта, который находится во вторичном домене объектов, например файла

При поиске диспетчером объектов имени объекта, существующего во вторичном домене объектов

При считывании или изменении процессом параметров защиты объекта, который находится во вторичном домене объектов, например файла

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

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

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

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

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

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

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

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