Лабораторная работа № 4 1. Теоретическая часть: Архитектура операционных систем Windows 2000 1.1.

advertisement
Лабораторная работа № 4
1. Теоретическая часть: Архитектура операционных систем
1.1. Общая структура операционной системы Windows 2000
Операционная система Windows 2000 представляет собой улучшенную
версию Windows NT 4.0 с интерфейсом Windows 98, благодаря которому
она осуществляла полную поддержку устройств plug-and-play, шины USB,
стандарта IEEE 1394 (FireWire), IrDA (Infrared Data Association – стандарт
на инфракрасную передачу данных и вывод на печать, разработанный ассоциацией IrDA), управление питанием. Кроме того, были добавлены новые функций, не присутствовавших ранее в других операционных системах корпорации Microsoft:
- каталоговая служба Active Directory;
- система безопасности Kerberos;
- поддержка смарт-карт;
- инструменты мониторинга системы;
- лучшая интеграция ноутбуков и настольных компьютеров;
- инфраструктура системного администрирования;
- рабочие объекты;
- интернационализация (при установке системы и даже для каждого
пользователя можно выбрать язык, который будет использоваться во время работы системы);
- операционная система MS-DOS заменена на новую 32-х разрядную
программу, включающую функциональность системы MS-DOS и ряд новых
функций;
- добавлена новая функция файловой системы NTFS, при использовании которой два пользователя могут совместно использовать один связанный файл; как только один из пользователей начинает запись в этот
файл, автоматически создается копия файла.
Несмотря на многочисленные свойства, способствующие переносимости системы с точки зрения программ, аппаратуры, языков и пр., операционная система Windows 2000 обладает меньшей переносимостью, чем
Windows NT 4.0. Она работает только на двух платформах: Pentium и Intel
IA-642. Изначально операционная система Windows NT поддерживала дополнительные платформы: PowerPC, MIPS и Alpha, но по коммерческим
соображениям корпорация Microsoft перестала поддерживать эти процессоры.
Как и предыдущие версии Windows NT, Windows 2000 поставляется в
виде нескольких уровней продукта: Professional, Server, Advanced server и
Datacenter Server. Однако различия между версиями незначительны, так
как в них используется один и тот же исполняемый двоичный код. При
установке системы тип продукта записывается во внутренней базе данных
(системном реестре). Во время загрузки операционная система проверяет
содержимое реестра, определяя версию программного продукта. Формально различием в версиях управляют в нескольких местах программы
всего две переменные, считываемые из реестра: ProductType и
Служебный
процесс
Подсистема POSIX
Подсистема POSIX
Подсистема POSIX
Подсистема POSIX
Подсистема POSIX
Подсистема POSIX
Системный интерфейс (NT DLL.DLL)
Режим пользователя
ProductSuite. В зависимости от их значений выполняется слегка отличный
код. Изменение значений этих переменных рассматривается как нарушение лицензии. Кроме того, система перехватывает любые попытки изменить их и регистрирует эти попытки нестираемым способом, так что впоследствии можно доказать факт нарушения лицензии.
Кроме основной операционной системы, корпорация Microsoft также
разработала несколько инструментальных программ для продвинутых
пользователей: Support Tools, Software Development Kit, Driver Development
Kit и Resource Kit. Это большие наборы утилит для отладки и мониторинга
системы. Инструментарий поддержки распространяется на компакт-диске
Windows 2000 в каталоге \support\tools. Файлы не устанавливаются стандартной процедурой, но их можно установить специальной программой
setup.exe, расположенной в этом же каталоге.
Интерфейс
графических
устройств
Win32
Ядро
Видеодрайвер
Режим ядра
Менеджер
локального вызова
процедуры
Менеджер
объектов
Менеджер
конфигурации
Менеджер
кэша
Менеджер
безопасности
Менеджер
энергопотребления
Драйверы
устройств
Менеджер
памяти
Файловая
система
Менеджер
процессов
Менеджер
вводавывода
Менеджер
объектов
Системные службы
Уровень аппаратной абстракции (Hardware Abstraction Layer)
Аппаратное обеспечение
Рис. 1. Упрощенная структура Windows 2000
Операционная система 2000 состоит из двух основных частей: модуля
операционной системы, работающей в режиме ядра, и подсистем окружения, работающих в режиме пользователя. Подсистемы окружения представляют собой отдельные подпрограммы, помогающие пользователю
выполнять определенные функции.
Одно из многих усовершенствований операционной системы Windows
NT заключалось в ее модульной структуре – относительно небольшого ядра, работавшего в привилегированном режиме, и нескольких серверных
процессов, работавших в режиме пользователя. Процессы пользователя
взаимодействовали с серверными процессами с помощью модели «клиент-сервер»: клиент посылал серверу сообщение, а сервер выполнял
определенную работу и возвращал клиенту результат в ответном сообщении. Такая модульная структура упрощала перенос системы на другие
платформы. В результате операционная система Windows NT была
успешно перенесена на платформы с процессорами, отличными от процессоров Intel: Alpha корпорации DEC, Power PC корпорации IBM и MIPS
фирмы SGI. Кроме того, такая структура защищала ядро от ошибок в коде
серверов. Однако для увеличения производительности, начиная с версии
Windows NT 4.0, большая часть операционной системы (например, управление системными вызовами и вся экранная графика) были возвращены в
ядро. Такая схема сохранилась и в Windows 2000.
Система подразделяется на несколько уровней, каждый из которых
пользуется службами нижележащего уровня (рис.1.). Исполняющая подсистема представлена системными службами, разделенными на модули,
каждый из которых выполняет определенную функцию и имеет определенный интерфейс для взаимодействия с другими модулями. Два нижних
уровня программного обеспечения: уровень аппаратных абстракций (HAL,
Hardware Abstraction Layer) и ядро написаны на языке С и ассемблере и
являются частично машинно-зависимыми. Верхние уровни написаны только на языке С и полностью машинно-независимы. Драйверы написаны на
языке С или C++.
1.Уровень HAL. Одна из целей создания Windows 2000 и Windows NT
заключалась в возможности переносить систему на другие платформы.
Теоретически на новой машине для запуска операционной системы достаточно перекомпилировать операционную систему новым компилятором
для данной машины. Можно добиться полной переносимости верхних
уровней операционной системы, так как в основном они имеют дело с
внутренними структурами данных. Нижние же уровни работают с регистрами устройств, прерываниями, контроллером прямого доступа к памяти
и другими аппаратными устройствами, которые могут сильно отличаются
на разных машинах. Хотя большая часть кода нижнего уровня написана на
языке С, но его нельзя просто перенести с процессора одного типа на процессор другого типа, перекомпилировать и перезагрузить из-за большого
количества мелких различий между разными типами процессоров.
Корпорация Microsoft решила скрыть многие из аппаратных различий в
тонком уровне аппаратных абстракций (HAL, Hardware Abstraction Layer).
Работа уровня заключается в том, чтобы предоставлять остальной системе абстрактные аппаратные устройства, свободные от индивидуальных
отличительных особенностей аппаратного обеспечения. Эти устройства
представляются в виде машинно-независимых служб, (процедурных вызовов и макросов), которые могут использоваться остальной операционной
системой и драйверами. Поскольку драйверы и ядро пользуются службами
HAL и не обращаются напрямую к устройствам, требуется значительно
меньше изменений для их переноса на другую платформу. Перенос уровня HAL достаточно прост, так как весь машинно-зависимый код сконцентрирован в одном месте. В уровень HAL включены службы, которые зависят от набора микросхем материнской платы и меняются от машины к ма-
шине в разумных предсказуемых пределах:
- доступ к регистрам устройств;
- адресация к устройствам, независящим от шины;
- обработка прерываний и возврат из прерываний;
- операции DMA (Direct Memory Access – прямой доступ к памяти);
- управление таймерами, часами реального времени, блокировками
нижнего уровня;
- синхронизация многопроцессорных конфигураций;
- интерфейс с BIOS и доступ к CMOS-памяти.
Уровень HAL не предоставляет абстракций или служб для специфических устройств ввода-вывода (клавиатур, мышей, дисков), а также блоков
управления памятью. Так как уровень HAL является машинно-зависимым,
он должен соответствовать системе, на которую установлен, поэтому
набор различных уровней поставляется на установочном компакт-диске
Windows 2000. Во время установки системы выбирается подходящий уровень и копируется на жесткий диск в системный каталог \winnt\system32\ в
виде файла hal.dll. Хотя эффективность уровня высока, для мультимедийных приложений корпорация Microsoft дополнительно поставляет пакет
программного обеспечения DirectX, расширяющий функциональность
уровня HAL дополнительными процедурами и предоставляющий пользовательским процессам прямой доступ к аппаратному обеспечению.
2.Уровень ядра. Над уровнем аппаратных абстракций располагается
уровень ядра и драйверы устройств. Значительная часть ядра представляет собой машинно-зависимую программу, но большая ее часть написана
на языке С, кроме модулей, в которых производительность считается важнее остальных задач. Одной из важнейших функций ядра является предоставление абстрактной модели аппаратуры более высоким уровням. Поэтому часть ядра постоянно находится в оперативной памяти, которая при
помощи установки соответствующего приоритета решает, допустимо ли
прерывание от устройств ввода-вывода или нет.
Назначение ядра заключается в том, чтобы сделать остальную часть
операционной системы независимой от аппаратуры и легко переносимой
на другие платформы. Ядро получает доступ к аппаратуре через уровень
HAL. Оно построено на низкоуровневых службах уровня HAL, формируя из
них абстракции более высоких уровней. Например, уровень HAL содержит
вызовы для связывания процедур обработки прерываний с прерываниями
и установки их приоритетов, а ядро предоставляет полный механизм для
переключения контекста: сохраняет все регистры центрального процессора, изменяет таблицы страниц, сохраняет кэш центрального процессора и
т.д. Когда все действия выполнены, работавший ранее поток1 оказывается
полностью сохраненным в таблицах, расположенных в памяти. Затем ядро
Процесс можно рассматривать как поток исполняемых команд или просто поток. Поток содержит:
счетчик команд, отслеживающий порядок выполнения действий; регистры, в которых хранятся текущие
переменные; стек, содержащий протокол выполнения процесса. Процессы используются для группирования ресурсов, а потоки являются объектами, поочередно исполняющимися на центральном процессоре.
1
настраивает карту памяти нового потока и загружает его регистры, после
чего новый поток готов к работе.
Другой важнейшей функцией ядра является планирование потоков. Когда наступает пора проверить, не готов ли к работе новый поток, например, после того, как истечет выделенный потоку квант времени или по завершении процедуры обработки прерываний ввода-вывода, ядро выбирает поток и выполняет переключение контекста, необходимое, чтобы запустить этот поток.
Третья ключевая функция ядра заключается в: предоставлении низкоуровневой поддержки двум классам объектов – управляющим объектам и
объектам диспетчеризации, которые представляют собой внутренние объекты, на основе которых исполняющая система строит объекты пользователя. Управляющие объекты – это объекты, управляющие системой,
включая примитивные объекты процессов, объекты прерываний, объект
DPC (Deferred Procedure Call), отложенный вызов процедуры; объект АРС
(Asynchronous Procedure Call), асинхронный вызов процедуры.
Объект DPC используется, чтобы отделить часть процедуры обработки
прерываний, для которой время является критичным, от той ее части, для
которой время некритично. Как правило, процедура обработки прерываний
сохраняет несколько аппаратных регистров, связанных с прерывающим
устройством ввода-вывода, чтобы их можно было восстановить, и разрешает аппаратуре продолжать работу. Очередь DPC представляет собой
механизм напоминания о том, что есть работа, которую следует выполнить позднее. Объект АРС отличается тем, что асинхронный вызов процедуры выполняется в контексте определенного процесса. К объектам диспетчеризации относятся: семафоры2, мьютексы3, события4, таймеры5 и
другие объекты, изменение состояния которых могут ждать потоки. Эти
объекты напрямую связаны с планированием потоков, поэтому частично
обрабатываются ядром.
3.Исполняющая система. Над ядром и драйверами устройств располагается верхняя часть операционной системы, называемая исполняющей
системой (супервизором или диспетчером), которая написана на языке С,
не зависит от архитектуры и может переносится на другие машины с небольшой корректировкой. Исполняющая система состоит из 10 компонентов, каждый из которых представляет собой набор процедур, работающих
вместе для выполнения некоторой задачи:
- Менеджер объектов управляет всеми объектами операционной системы: процессами, потоками, файлами, каталогами, семафорами устройСемафор – целая переменная для подсчета сигналов запуска. Переменная может иметь значение 0 (в
случае отсутствия сохраненных сигналов активации процесса) или некоторое положительное число, соответствующее количеству отложенных активизирующих сигналов.
3
Мьютекс – переменная, которая может находиться в одном из двух состояний: блокированном или неблокированном. Используется для блокирования/разблокирования процесса.
4 События – объекты ядра, которые бывают двух видов: сбрасываемые вручную и сбрасываемые автоматически. Каждое событие может находится в одном из двух состояний: установленном и сброшенном.
Поток может ждать события или его вызывать с помощью конкретных функций.
5
Таймеры (часы) – следят за временем суток, не позволяют одному процессу надолго занять центральный процессор и выполняют др. функции.
2
ствами ввода-вывода, таймерами и др.; кроме того, управляет пространством имен, в которое помещается созданный объект, чтобы впоследствии
к нему можно было обратиться по имени. При создании объекта менеджер
объектов получает в адресном пространстве ядра блок виртуальной памяти и возвращает этот блок в список свободных блоков, когда объект уничтожается.
- Менеджер ввода-вывода формирует каркас для управления устройствами ввода-вывода и предоставляет общие службы ввода-вывода. Он
предоставляет остальной части системы независимый от устройств вводвывод, вызывая для выполнения физического ввода-вывода соответствующий драйвер. Файловые системы формально являются драйверами
устройств под управлением менеджера ввода-вывода.
- Менеджер процессов управляет процессами и потоками, включая их
создание и завершение, он является ключевым элементом многозадачности. Менеджер процессов основывается на объектах потоков и процессов
ядра и добавляет к ним дополнительные функции.
- Менеджер памяти реализует архитектуру виртуальной памяти со
страничной подкачкой по требованию операционной системы; управляет
преобразованием виртуальных страниц в физические страничные блоки;
реализует правила защиты, ограничивающие доступ каждого процесса
только к своему адресному пространству; контролирует системные вызовы, относящиеся к виртуальной памяти.
- Менеджер безопасности приводит в исполнение механизм безопасности, удовлетворяющий требованиям класса С2 Оранжевой книги Министерства обороны США.
- Менеджер кэша хранит в памяти блоки диска, которые использовались в последнее время, чтобы ускорить доступ к ним в случае, если они
понадобятся вновь. Количество памяти, выделенной для кэша, динамически изменяется и может увеличиваться или уменьшаться при необходимости. Менеджер кэша будет описан в разделе «Кэширование в Windows
2000».
- Менеджер plug-and-play получает все уведомления об установленных
новых устройствах. Некоторые устройства проверяются при загрузке системы, другие – могут подключаться в любое время. При подключении запускается пересылка сообщения менеджеру plug-and-play, который находит и загружает соответствующий драйвер.
- Менеджер энергопотребления управляет потреблением электроэнергии: отключает монитор и диски, если к ним не было обращений в течение
определенного интервала времени; следит за состоянием батарей на переносных компьютерах и сообщает работающим программам об их состоянии.
- Менеджер конфигурации отвечает за состояние реестра. Он добавляет новые записи и ищет запрашиваемые ключи.
- Менеджер вызова локальной процедуры обеспечивает высокоэффективное взаимодействие между процессами и их подсистемами.
4.Интерфейс графических устройств. Исполняющий модуль Win32
GDI (Graphic Device Interface) изначально располагался в пространстве
пользователя, но в версии Windows NT 4.0 был перенесен в пространство
ядра для увеличения производительности. Win32 GDI управляет графическими изображениями для монитора и принтеров. Он содержит оконный
менеджер и драйвер дисплея и предоставляет системные вызовы, позволяющие пользовательским программам выводить данные на монитор и
принтеры независящим от устройств способом.
5.Уровень системных служб. Уровень располагается над исполняющей
системой. Его функция заключается в предоставлении интерфейса к исполняющей системе – приеме системных вызовов Windows 2000 и вызове
других частей исполняющей системы для их выполнения.
При загрузке операционная система Windows 2000 загружается в память как набор файлов. Основная часть операционной системы, состоящая из ядра и исполняющей системы, хранится в файле ntoskml.exe. Уровень HAL представляет собой библиотеку общего доступа, расположенную
в отдельном файле hal.dll. Интерфейс Win32 и интерфейс графических
устройств хранятся вместе в файле win32k.sys. После загрузки ядра операционной системы и исполняющих модулей загружаются драйвера
устройств, большинство из которых имеет расширение .sys.
6.Драйвера устройств. Каждый драйвер может управлять одним или
несколькими устройствами ввода-вывода, шифровать поток данных или
предоставлять доступ к структурам данных ядра. При установки драйвера
в систему он добавляется в реестр и затем динамически загружается при
каждой загрузке системы. Существуют драйверы для физических
устройств ввода-вывода (диски, принтеры) и для внутренних устройств и
микросхем, кроме того, файловые системы также представлены в виде
драйверов устройств.
1.2. Реализация объектов в Windows 2000. Подсистемы окружения
Объекты Windows 2000 представляют собой однородный и непротиворечивый интерфейс ко всем системным ресурсам и структурам данных:
процессам, потокам, семафорам и т.д. Доступ к объектам предоставляется
при помощи дескрипторов объектов и осуществляется через менеджер
объектов. Поэтому все проверки, связанные с защитой, могут быть размещены в одном месте, с гарантией, что ни один процесс не сможет обойти
их. Исполняемый объект представляет собой набор последовательных
слов (структуру данных) в памяти (в виртуальном адресном пространстве
ядра). Файл на диске не является объектом, хотя для файла при его открытии создается объект – структура данных в виртуальном адресном
пространстве ядра. При перезагрузке (или сбое) системы объекты теряются. Когда операционная система загружается, объектов нет, кроме бездействующих системных процессов, чьи объекты жестко прошиты в файле
ntoskml.exe. Все остальные объекты создаются при загрузке системы, во
время работы различных программ инициализации и пользовательских
программ.
Данные
Заголовок объекта
Каждый объект содержит заголовок с определенной информацией, общей для объектов всех типов. Поля заголовка включают: имя объекта; каталог, в котором объект живет в пространстве других объектов; информацию защиты (при открытии объекта выполняется определенная проверка);
список процессов, у которых есть открытые дескрипторы к данному объекту (если установлен определенный флаг отладки).
Каждый заголовок объекта содержит поле цены квоты, представляющей собой плату, взимаемую с процесса за открытие объекта. Если файловый объект стоит один пункт, а процесс принадлежит к заданию, у которого есть 10 пунктов квоты, то суммарно все процессы этого задания могут
открыть не более 10 файлов. Таким образом, для объектов каждого типа
могут реализовываться ограничения на ресурсы.
Имя объекта
Каталог, в котором живет объект
Информация о защите (кто может использовать объект)
Цена квоты (стоимость использования объекта)
Список процессов с манипуляторами
Счетчик ссылок
Указатель на объект типа
Данные, специфические для объекта
Имя типа
Типы доступа
Права доступа
Стоимость квоты
Синхронизируемый?
Выгружаемый
Метод Open
Метод Close
Метод Delete
Метод Query name
Метод Parse
Метод Security
Рис. 2. Структура объекта
Объекты занимают участки виртуального адресного пространства ядра,
поэтому, когда в них нет необходимости, они должны быть удалены, а их
адресное пространство возвращено системе. Для этого в заголовке каждого объекта содержится счетчик ссылок на объект, который увеличивается
на единицу, когда объект открывается, и уменьшается на единицу при закрытии объекта. При открытии или освобождении объекта компонентом
исполняющей системы используется второй счетчик. Когда оба счетчика
уменьшаются до 0, это означает, что объект не используется пользователем и ни одним исполняющим процессом, то есть его можно удалить, а его
память освободить.
Часто частям исполняющей системы бывает нужно динамически получать на время участки памяти. Для этого исполняющая система содержит
два пула6 в адресном пространстве ядра: для объектов и для динамических структур данных. Один пул является выгружаемым, другой – невыгружаемым (фиксированным в памяти). Объекты, к которым обращения
частые, хранятся в невыгружаемом пуле; объекты, к которым обращения
редкие (например, ключи реестра; информация, относящаяся к безопасно6
Пул (англ. pool – общий котел) – временное объединение.
сти) хранятся в выгружаемом пуле. Когда памяти не хватает, этот пул может быть выгружен на диск и загружен обратно по страничному прерыванию. Объекты, которые могут понадобиться при выполнении критического
участка программы, когда подкачка не разрешается, должны храниться в
невыгружаемом пуле. Когда требуется небольшое количество памяти,
страница может быть получена из любого пула, а затем разбита на мелкие
участки размером от 8 байт.
Объекты подразделяются на типы. Тип объекта определяется указателем на объект типа (рис. 2.). Информация о типе объекта включает:
название типа; данные о том, может ли поток ждать изменения состояния
этого объекта; должен ли объект этого типа храниться в выгружаемом или
невыгружаемом пуле. Самой важной частью объекта являются указатели
на программы для определенных стандартных операций (open, close,
delete). Когда вызывается одна из этих операций, используется указатель
на типовой объект, в котором выбирается и выполняется соответствующая
процедура. Такой механизм предоставляет системе возможность инициализировать новые объекты и освобождать память при их удалении.
Компоненты исполняющей системы могут динамически создавать новые типы объектов, поэтому фиксированного списка типов объектов не
существует (наиболее часто употребляемые типы объектов приведены в
таблице 1.).
Таблица 1.
Общие типы объектов исполняющей системы,
управляемые менеджером объектов
Тип объекта
Процесс
Поток
Семафор
Мьютекс
Событие
Порт
Таймер
Очередь
Открытый файл
Маркер доступа
Профиль
Секция
Ключ
Каталог объектов
Символьная ссылка
Устройство
Драйвер устройства
Описание типа объекта
Процесс пользователя
Поток внутри процесса
Семафор со счетчиком, используемый для синхронизации процессов
Двоичный семафор, используемый для входа в критическую область
Объект синхронизации с перманентным состоянием (сигнализирующий/нет)
Механизм для передачи сообщений между процессами
Объект, позволяющий потоку спать в течение фиксированного интервала
времени
Объект, используемый для уведомления о завершении асинхронного вводавывода
Объект, ассоциированный с открытым файлом
Описатель защиты для некоторого объекта
Структура данных, используемая для анализа использования центрального
процессора
Структура, используемая для отображения файлов на виртуальное адресное
пространство
Ключ реестра
Каталог для группирования объектов в менеджере объектов
Указатель на другой объект по имени
Объект устройства ввода-вывода
У каждого загруженного драйвера устройства есть свой объект
Для каждого процесса и потока существует один объект, в котором
хранятся основные свойства, необходимые для управления этим процессом или потоком. Семафор, мьютекс и событие, имеют отношение к син-
хронизации процессов; порт, таймер и очередь также имеют отношение к
связи и синхронизации. События могут быть в одном из двух состояний:
сигнализирующем и несигнализирующем. Если поток ждет события, находящегося в сигнализирующем состоянии, он немедленно получает управление, в ином случае поток блокируется до тех пор, пока какой-либо другой поток не переведет это событие в сигнализирующее состояние. Порты
представляют собой каналы между процессами, используемые для обмена сообщениями. Таймеры предоставляют способ блокировать процесс
или поток на определенный срок. Очереди применяются для уведомления
потоков о завершении асинхронной операции ввода-вывода.
Объекты открытых файлов создаются при открытии файла. Маркеры
доступа представляют собой объекты безопасности. Они идентифицируют
пользователя и сообщают, какие привилегии он имеет. Профили представляют собой структуры, используемые для хранения периодически
фиксируемых значений счетчика команд работающего потока, которые
позволяют определить, на что данная программа тратит свое время.
Секции являются объектами, используемыми системой памяти для
управления отображаемыми на память файлами. Они хранят сведения о
том, какой файл (или часть файла) на какие адреса памяти отображается.
Ключи представляют собой ключи реестра и применяются для установки
связи между именем и значением. Каталоги объектов являются полностью
локальными по отношению к менеджеру объектов и предоставляют способ
объединять связанные объекты. Символьные ссылки позволяют имени в
одной части пространства имен объектов ссылаться на объект в другой
части этого пространства. У каждого известного системе устройства есть
объект устройства, содержащий информацию о нем и использующийся
для ссылки на устройство в системе, также как и у каждого загруженного
драйвера устройства есть объект в пространстве объектов.
Пользователи могут создавать новые объекты или открывать существующие
при
помощи
вызовов
Win32:
CreateSemaphore
и
OpenSemaphore, которые являются библиотечными процедурами и в конечном итоге обращаются к настоящим системным вызовам. При успешном выполнении первый вызов создает, а второй открывает объект, создавая в результате 64-разрядную запись в таблице дескрипторов, хранящуюся в таблице дескрипторов процесса в памяти ядра. Пользователю
для последующей работы возвращается 32-разрядный индекс, указывающий положение дескриптора в таблице.
64-разрядный элемент таблицы дескрипторов в ядре содержит два 32разрядных слова. Одно слово содержит 29-разрядный указатель на заголовок объекта. Младшие три разряда используются как флаги (например,
указывающие, наследуется ли дескриптор дочерним процессом). Когда
указатель используется, эти разряды маскируются. Второе слово содержит 32-разрядную маску прав доступа. Она нужна, потому что проверка
разрешений выполняется только в то время, когда объект создается или
открывается. Если у процесса есть только разрешение для чтения объекта, тогда все остальные биты маски будут нулями, что дает системе воз-
можность отвергать любую операцию, кроме операции чтения.
Для того чтобы во время выполнения программы менеджеру объектов
можно было следить за созданием и удалением объектов, он поддерживает пространство имен объектов, в котором располагаются все объекты
системы. Процесс использует данное пространство, чтобы найти и открыть
дескриптор объекта другого процесса при условии, что для этого у него
есть необходимые разрешения. Кроме пространства имен объектов
Windows 2000 поддерживает еще два пространства имен: пространство
имен файловой системы и пространство имен реестра. Все пространства имен представляют собой иерархическую организацию имен со множеством уровней каталогов для организации элементов. Объекты каталогов предоставляют средства реализации этого иерархического пространства имен для объектов.
Таблица 2.
Типичные каталоги пространства имен объектов
Имя каталога
??7
Device
Driver
ObjectTypes
Windows
BaseNamedObjs
Arcname
NLS
FileSystem
Security
KnownDLLs
Содержание каталога
Начальное место для поиска устройств MS-DOS, например, С:
Все обнаруженные устройства ввода-вывода
Объекты, соответствующие каждому загруженному драйверу устройства
Объекты типов
Объекты для отправки сообщений всем окнам
Объекты, создаваемые пользователем, такие как семафоры, мьютексы и др.
Имена разделов, обнаруженные загрузчиком
Объекты языковой поддержки
Объекты драйверов файловой системы и объекты распознавателя файловой
системы
Объекты системы безопасности
Совместно используемые библиотеки, находящиеся в открытом состоянии
Поскольку объекты исполняющей системы являются временными (исчезают при выключении компьютера), в начале загрузки системы пространство имен объектов пусто. Во время загрузки различные части исполняющей системы создают каталоги и заполняют их объектами. Например, когда менеджер plug-and-play обнаруживает новые устройства, он создает по объекту для каждого устройства и помещает эти объекты в пространство имен. При загрузке каждого драйвера также создается объект, а
его имя добавляется в пространство имен объектов. Обращение к драйверу осуществляется по указателю на его объект. Одним из инструментов
просмотра
имен
объектов
является
программа
winobj
(www.sysinternals.com). При запуске она отображает пространство имен
объектов, как правило, содержащее каталоги объектов, некоторые из них
перечислены в таблице 2.
Операционная система Windows 2000 состоит из компонентов, работающих в режиме ядра, и компонентов, работающих в режиме пользователя:
динамических библиотек DLL, подсистемы окружения и служебных про?? – имя выбрано с целью, чтобы оно оказалось первым в алфавитном порядке для ускорения поиска
всех путей, начинающихся с буквы привода.
7
цессов. Эти компоненты работают вместе, предоставляя каждому пользовательскому процессу интерфейс, отличный от интерфейса системных
вызовов Windows 2000. Операционной системой Windows 2000 поддерживаются три различных документированных интерфейса прикладного программирования API: Win32, POSIX и OS/2. У каждого из них имеется список
библиотечных вызовов. Работа библиотек DLL (Dynamic Link Library, динамически подключаемая библиотека) и подсистем окружения заключается в том, чтобы реализовать функциональные возможности интерфейса и
скрыть истинный интерфейс системных вызовов от прикладных программ.
Все версии Windows поддерживают динамические библиотеки, содержащие набор тесно связанных библиотечных процедур и их структуры
данных в одном файле с расширением .dll (как правило). Когда приложение компонуется, компоновщик видит, что некоторые библиотечные процедуры принадлежат к динамическим библиотекам, и записывает эту информацию в заголовок исполняемого файла. Обращения к процедурам
динамических библиотек производятся не напрямую, а при помощи вектора передачи в адресном пространстве вызывающего процесса. Изначально этот вектор заполнен нулями, так как адреса вызываемых процедур
еще неизвестны. При запуске прикладного процесса все требуемые динамические библиотеки обнаруживаются и отображаются на виртуальное
адресное пространство процесса. Затем вектор передачи заполняется адресами, что позволяет вызывать библиотечные процедуры через него.
Таблица 3.
Ключевые файлы Windows 2000 и их режим работы
Режим
работы
Количество
функций
hal.dll
ядра
95
ntoskrnl.exe
ядра
1209
win32k.sys
ядра
-
ntdll.dll
csrss.exe
kernel32.dll
ядра
пользователя
пользователя
1179
0
823
gdi32.dll
пользователя
543
user32.dll
пользователя
695
advapi32.dll
пользователя
557
Файл
Содержание
Низкоуровневое управление аппаратурой, например, портами
ввода-вывода
Операционная система Windows 2000 (ядро + исполняющая
система)
Множество системных вызовов, включая большую часть графики
Диспетчер перехода из режима пользователя в режим ядра
Процесс подсистемы окружения Win32
Большая часть системных вызовов ядра (неграфических)
Шрифт, текст, цвет, кисть, перо, палитра, растровые изображения, рисование и т.д.
Окна, значки, меню, курсоры, диалоговые окна, буфер обмена
и т.д.
Защита, шифрование, реестр
Для реализации интерфейса Win32 в каталоге \winnt\system32 содержится более 800 отдельных файлов DLL общим объемом в 130 Мбайт. Количество содержащихся в них вызовов API превышает 13000. Некоторые
наиболее важные файлы динамических библиотек перечислены в таблице
3. Для каждого файла приведено количество экспортируемых функций
(видимых за пределами файла), этот параметр со временем изменяется.
1209 вызовов, экспортируемых из файла ntoskrnl.exe, являются функциями, доступными для драйверов устройств и других программ, связанных с
ядром. Список экспортируемых функций в любом файле .ехе или .dll можно просмотреть программой depends входящей в пакет Platform SDK
(Software Development Kit).
Интерфейс POSIX предоставляет минимальную поддержку для приложений UNIX. Он поддерживает практически только функции, описанные в
стандарте Р1003.1. Этот интерфейс был включен только потому, что некоторые министерства правительства США требовали, чтобы операционные
системы для правительственных компьютеров были совместимы со стандартом Р1003.1. Чтобы облегчить пользователям UNIX переход на
Windows 2000, корпорация Microsoft разработала программный продукт
Interix, предоставляющий более высокую степень совместимости с системой UNIX. Функциональность интерфейса OS/2 ограничена практически в
той же степени, что и функциональность интерфейса POSIX.
1.2. Общая структура операционной системы Windows XP
Windows XP имеет модульную структуру (рис.2.18.), в которой код операционной системы и драйверы выполняются в привилегированном режиме процессора (режиме ядра), обеспечивающем полный доступ ко всей
аппаратной части компьютера, а пользовательские приложения выполняются в непривилегированном режиме процессора – пользовательском режиме без прямого доступа к оборудованию компьютера. В режиме ядра
работают следующие компоненты.
1.Уровень абстрагирования от оборудования (Hardware Abstraction
Layer, HAL). Его задачей является отделение операционной системы от
особенностей конкретных реализаций в аппаратном обеспечении компьютера, то есть от различий в материнских платах, в модификациях процессоров, в наборах микросхем и др. Благодаря этому уровню, управление
подсистемами прерываний, прямого доступа к памяти, системными шинами, таймерами для ядра операционной системы является одинаковыми.
Уровень HAL реализован в системном файле Hal.dll.
Системные
процессы
Сервисы сетевой
обработки данных
Пользовательские
приложения
Диспетчер системных процессов, диспетчер сетевых сервисов, подсистемы DLL
API исполняющей системы
Исполняющая
подсистема
Файловая система
Ядро ОС
Диспетчер памяти
Диспетчер окон
Драйверы устройств
Уровень абстрагирования от оборудования (HAL)
Аппаратное обеспечение ПК
Рис. 2.18. Упрощенная структура Windows XP
2.Ядро операционной системы. Ядро содержит наиболее часто вызываемые низкоуровневые функции операционной системы: планирование и
распределение ресурсов между процессами, их переключение и синхронизацию. В обязанности ядра входит также управление прерываниями и обработка ошибочных ситуаций при функционировании операционной системы. Код ядра Windows XP не разделяется на потоки, а находится только в оперативной памяти и не может быть выгружен на диск. Код ядра
Windows XP находится в системном файле Ntoskrnl. exe.
3.Драйверы устройств. Драйверы представляют собой подпрограммы,
транслирующие вызовы, поступившие от пользовательских программ в запросы обработки данных для конкретных устройств. Значительное число
драйверов входит в состав Windows XP (они располагаются в подкаталоге
Isystem32l drivers системного каталога и имеют тип файла *.sys, например,
драйвер дисковой подсистемы находится в файле disk.sys), а для нестандартных периферийных устройств драйверы находятся в комплектах поставки.
4.Исполняющая подсистема (NT Executive). Модуль NT Executive состоит из микроядра и подсистем диспетчеризации управления программами с доступом к виртуальной памяти, окнам и графической подсистеме.
Виртуальная память предоставляет пользовательским программам виртуальные адреса адресного пространства процессов и соответствующие физические страницы оперативной памяти компьютера. Графическая подсистема предназначена для создания оконного интерфейса, рисования элементов управления, расположенных в окнах. К исполняющей подсистеме
относятся системные файлы Ntkrnlpa.exe, Kernel32.dll, Advapi32.dll,
User32.dll, Gdi32.dll.
Операционная система Windows XP в значительной мере использует
возможности процессоров, совместимых с семейством Intel x86. В их аппаратной архитектуре предусматривается четыре уровня привилегий выполнения кода программ от 0-го наивысшего привилегированного, до 4-го
пользовательского режима с ограниченным набором команд процессора.
Программы режима ядра операционной системы Windows XP функционируют в нулевом, защищенном и привилегированном режиме, а остальные
пользовательские программы работают в менее привилегированных режимах, находясь под контролем программ режима ядра.
Недоступные в пользовательском режиме операции и приложения обращаются к системным вызовам ядра операционной системы, которые
называют Win32 API. В состав API входит более 250 функций, обращение к
которым осуществляется при помощи системных вызовов, основанных на
подпрограммах ядра операционной системы. Все вызовы Win32 API обслуживаются как системными службами NT, так и модулем NT Executive –
исполняющей системы Windows XP. Модуль NT Executive представляет
собой несколько программных потоков, которые выполняются в режиме
ядра. Код практически всех подсистем этого модуля находится в файле
ntoskrnl.exe (кроме подсистемы Win32, код которой расположен в файле
win32k.sys) и уровне абстрагирования от оборудования HAL, который со-
держится в файле hal.dll. Модуль NT Executive сосредоточивает все самые
важные части операционной системы.
Микроядро отвечает за выделение памяти для приложений и распределение процессорного времени, то есть за реализацию многозадачности.
Для этого в состав микроядра входит планировщик потоков (threads
scheduler), который назначает каждому из потоков один из 32 уровней приоритета. Уровень 0 зарезервирован для системы. Уровни от 1 до 15 назначаются исполняемым программам, а уровни от 16 до 31 могут назначаться
только администраторами. Планировщик делит все процессорное время
на кванты фиксированного размера. При этом каждый программный поток
выполняется только в течение отведенного ему времени, и если по окончанию кванта он не освобождает процессор, планировщик в принудительном порядке приостанавливает этот поток и меняет программное окружение процесса, настраивая его на выполнение другого потока, обладающего тем же приоритетом. Микроядро также осуществляет всю работу, связанную с обработкой программных и аппаратных прерываний.
5.Диспетчеризация управления программами. Модуль состоит из следующего набора системных программ:
- Диспетчер ввода-вывода – интегрирует добавляемые в систему
драйверы устройств в ОС Windows XP.
- Диспетчер объектов – служит для управления всеми разделяемыми
ресурсами компьютера. В момент обращения приложения к какому-либо
ресурсу диспетчер объектов сопоставляет этому ресурсу объект (например, окно) и отдает приложению дескриптор8 (№ окна) этого объекта. Используя дескриптор, приложение взаимодействует с объектом, совершая в
его отношении различные операции. Монитор системы безопасности следит при этом за тем, чтобы с объектом выполнялись только разрешенные
действия.
- Диспетчер процессов – предоставляет интерфейс, при помощи которого другие компоненты Windows NT Executive, а также приложения пользовательского режима могут манипулировать процессами и потоками. Во
время работы диспетчер процессов сопоставляет каждому процессу и потоку идентификатор процесса (PID – Process Identifier) и идентификатор
потока (TID – Thret Identifier) соответственно, а также таблицу адресов и
таблицу дескрипторов.
- Диспетчер виртуальной памяти – служит для управления организации подсистемы памяти, позволяет создавать таблицы адресов для процессов и следит за корректностью использования адресного пространства
приложениями. Кроме того, обеспечивает возможность загрузки в оперативную память исполняемых файлов и файлов динамических библиотек.
Диспетчер виртуальной памяти представляет физическую память для
пользовательских приложений – каждому процессу выделяются 4 Гбайта
виртуального адресного пространства, из которых младшие 2 Гбайта используются процессом, а старшие 2 Гбайта (общие для всех процессов)
8
Дескриптор – описание файла
отводятся на нужды системы. Каждый процесс работает в своем изолированном адресном пространстве и не знает о других процессах. Процессы
обмениваются данными через разделяемую память, которая может быть
спроецирована на виртуальное адресное пространство нескольких процессов. Главная задача диспетчера виртуальной памяти – организация логической памяти, размер которой больше размера физической, установленной на компьютере. Это достигается благодаря тому, что страницы памяти, к которым долго не было обращений, и которые не имеют атрибута
неперемещаемых, сохраняются диспетчером в файле pagefile.sys на жестком диске и удаляются из оперативной памяти, освобождая ее для других
приложений. В момент, когда происходит обращение к данным, находящимся в перемещенной на винчестер странице, диспетчер виртуальной
памяти копирует страницу обратно в оперативную память, затем обеспечивает доступ к ней. Этот механизм обеспечивает выделение дополнительной памяти программам, которые нуждаются в ней, и при этом следит
за тем, чтобы все работающие в системе программы обладали достаточным объемом физической памяти для того, чтобы продолжать функционирование.
- Диспетчер кэша – используется для кэшированного чтения и записи и
позволяет существенно ускорить работу жестких дисков и других
устройств. При этом наиболее востребованные файлы дублируются диспетчером кэша в оперативной памяти компьютера, и обращение к ним обслуживается с использованием этой копии, а не оригинала, расположенного на сравнительно медленном долговременном носителе. Кэш в Windows
XP является единым для всех логических дисков, вне зависимости от используемой файловой системы. Кроме того, он является динамическим, а
это значит, что диспетчер управляет его размерами в зависимости от доступного объема свободной физической памяти в каждый конкретный момент.
- Диспетчеры окон и графики – выполняю все функции, связанные с
пересылкой системных сообщений и отображением информации на
экране.
Процесс функционирования Windows XP условно подразделяется на
три фазы: процесс начальной нагрузки, штатный режим работы и завершение работы. Для загрузки Windows XP используется следующий минимальный набор файлов:
- файлы, располагающиеся в корневом каталоге загрузочного диска:
Ntldr, Boot.ini, Bootsect.dos (необходим только при использовании мультизагрузки), Ntdetect.com;
- файлы, располагающиеся в системном подкаталоге /system32:
Ntoskrnl.exe, Hal.dll, разделы реестра SYSTEM;
- файлы, располагающиеся в системном подкаталоге /system32/drivers:
необходимые драйверы устройств.
Процесс загрузки компьютера начинается с процедуры начального тестирования оборудования (POST – Power-On Self Test). Код, выполняющий
POST, зашит в базовой системе ввода-вывода (BIOS) каждого компьюте-
ра, при включении питания ему передается управление. Если в процессе
тестирования обнаруживаются какие-либо ошибки, то BIOS генерирует коды ошибок (POSTcodes), которые отличаются для BIOS разных производителей, и звуковые коды. Если процедура POST завершается успешно,
то BIOS передает управление главной загрузочной записи (MBR – Master
Boot Record) и первая «аппаратная» стадия загрузки компьютера, когда
процесс зависит только от аппаратуры компьютера, завершается.
Далее загрузочная запись, оперируя данными о разбиении жесткого
диска на логические тома, передает управление исполняемому коду, загрузчику Ntldr, расположенному в загрузочном секторе. Загрузчик переходит в защищенный режим и производит необходимые для успешного
функционирования манипуляции с памятью, кроме этого, Ntldr имеет модули, позволяющие работать с файловой системой и некоторыми другими
базовыми ресурсами системы. Все другие действия выполняются с помощью вызова прерываний BIOS.
Если в файле boot.ini зарегистрировано более одной операционной системы, то после первичной инициализации загрузчик предоставляет пользователю возможность выбора путем вывода Ntldr приглашения о выборе
операционной системы. Если выбрана операционная система Windows XP,
загрузчик запускает файл Ntdetect. сот. Этот компонент считывает из
CMOS-памяти системную дату и время, после чего производит поиск и
распознавание аппаратных средств, подключенных в данный момент к
компьютеру. Завершив работу, Ntdetect возвращает управление и собранную им информацию обратно в Ntldr. Далее загружается и инициализируется ядро операционной системы Ntoskrnl.exe и уровень абстрагирования
от оборудования Hal.dll. При инициализации ядро производит ряд действий в следующей последовательности:
- инициализация диспетчера памяти;
- инициализация диспетчера объектов;
- установка системы безопасности;
- настройка драйвера файловой системы;
- загрузка и инициализация диспетчера ввода-вывода;
- загрузка системных сервисов, которые реализуют взаимодействие с
пользователем.
В состав системных сервисов входят следующие модули:
- Smss.exe (диспетчер сеансов) – модуль управляет другими сервисами
и службами Windows; запускает: Win32 (Csrss) и некоторые системные
утилиты, выполняемые на этапе загрузки; реализует графический пользовательский интерфейс и запуск процессов Csrss.exe и WinLogon.exe;
- Csrss.exe – модуль предназначен для организации взаимодействия
между компьютером и пользователем;
- Lsass.exe – служба, запускаемая WinLogon.exe и отвечающая за безопасность системы; предоставляет возможность пользователю зарегистрироваться в системе.
После загрузки операционной системы пользователь должен пройти
процедуру аутентификации – ввести собственное регистрационное имя
(логин) и пароль. Процедура подключения к системе позволяет определить, обладает ли пользователь правом входа и работы с системой. Эту
процедуру выполняет служба WinLogon. При этом в системе происходят
следующие события:
- процесс WinLogon отображает на экране фон рабочего стола и приглашение к вводу пользователем логина и пароля; введенные данные передаются подсистеме безопасности;
- подсистема безопасности обращается к базе данных SAM (Security
Accounts Manager) и проверяет, обладает ли пользователь полномочиями
работы с системой.
Если пользователь является авторизированным пользователем системы, то подсистема безопасности формирует для него идентификатор доступа, который вместе с управлением передает обратно процессу WinLogon. Процесс WinLogon посредством обращения к подсистеме Win32 создает новый процесс для пользователя и прикрепляет ему идентификатор
доступа. Каждый процесс в дальнейшем создаваемый пользователем отмечается принадлежащим ему идентификатором доступа, поэтому доступ
пользователя к ресурсам системы контролируется и отслеживется. Благодаря обязательной процедуре подключения к системе упрощается реализация механизмов: аудит системы и квоты на использование ресурсов.
Пользовательский идентификатор доступа содержит идентификатор пользователя, а также идентификаторы всех групп, к которым принадлежит
данный пользователь.
1.3. Архитектура операционной системы UNIХ
Операционная система UNIX представляет собой интерактивную систему, разработанную для одновременной поддержки нескольких процессов и нескольких пользователей. UNIX была разработана для опытных
пользователей и программистов, поэтому ее основными свойствами являются: непротиворечивость, гибкость и мощь. Это означает, что в системе
должно быть небольшое количество базовых элементов, которые можно
комбинировать бесконечным числом способов, чтобы приспособить их для
конкретного приложения. Кроме того, UNIX лишена избыточности, например, вместо команды сору можно написать ср. Одно из основных правил
UNIX заключается в том, что каждая программа должна выполнять всего
одну функцию, но делать это хорошо.
Операционная система UNIX представляет собой иерархическую многоуровневую структуру (рис. 2.21.). На нижнем уровне располагается аппаратное обеспечение, состоящее из центрального процессора, памяти, дисков, терминалов и других устройств. На вышележащем уровне находится
операционная система, функция которой заключается в управлении аппаратным обеспечением и предоставлении всем программам интерфейса
системных вызовов, которые позволяют программам создавать процессы,
файлы и др. ресурсы и управлять ими.
Программы обращаются к системным вызовам, помещая аргументы в
регистры центрального процессора (иногда в стек) и выполняя команду
эмулированного прерывания для переключения из пользовательского режима в режим ядра и передачи управления операционной системе UNIX.
На языке С нельзя написать команду эмулированного прерывания, поэтому процедуры написаны на ассемблере, но могут вызываться из программ,
написанных на С. Процедуры представляют собой библиотечные функции,
по одной на системный вызов.
Интерфейс пользователя
Интерфейс библиотечных
функций
Интерфейс
системных вызовов
Пользователи
Стандартные
обслуживающие программы
Стандартная библиотека
Ядро операционной системы UNIX
Режим
пользователя
Режим
ядра
Аппаратное обеспечение
Рис. 2.21. Уровни операционной системы UNIX
Каждая такая процедура помещает аргументы в определенное место и
выполняет команду эмулированного прерывания TRAP. Чтобы обратиться
к системному вызову read, программа написанная на языке С должна вызвать библиотечную процедуру read. Стандарт POSIX определяет библиотечные процедуры, соответствующие системным вызовам, их параметры,
их действия и результат выполнения этих действий.
UNIX содержат большое количество стандартных программ, некоторые
из них описываются стандартом POSIX 1003.2: компиляторы, редакторы,
программы обработки текста и утилиты для работы с файлами. Именно
эти программы и запускаются пользователем с терминала. Таким образом,
речь идет о трех интерфейсах в операционной системе UNIX: интерфейсе
системных вызовов, интерфейсе библиотечных функций и интерфейсе,
образованным набором стандартных обслуживающих программ.
Ядро операционной системы UNIX состоит из нескольких уровней (рис.
2.22.). Нижний уровень ядра состоит из драйверов устройств и процедуры
диспетчеризации процессов. Драйверы системы UNIX подразделяются на
два класса: драйверы символьных устройств и драйверы блочных
устройств. Основное различие между ним заключается в том, что на блочных устройствах разрешается операция поиска, а на символьных нет. Технически сетевые устройства представляют собой символьные устройства,
но обрабатываются по-иному, поэтому они выделены в отдельный класс.
Диспетчеризация процессов производится при возникновении прерывания.
При этом низкоуровневая программа останавливает выполнение работающего процесса, сохраняет его состояние в таблице процессов ядра и запускает соответствующий драйвер. Диспетчеризация процессов производится также, когда ядро завершает свою работу и наступает момент запус-
ка процесса пользователя. Программа диспетчеризации процессов написана на ассемблере и представляет собой отдельную от процедуры планирования программу.
Нижний уровень ядра состоит из драйверов устройств и процедуры
диспетчеризации процессов. Драйверы системы UNIX подразделяются на
два класса: драйверы символьных устройств и драйверы блочных
устройств. Основное различие между ним заключается в том, что на блочных устройствах разрешается операция поиска, а на символьных нет. Технически сетевые устройства представляют собой символьные устройства,
но обрабатываются по-иному, поэтому они выделены в отдельный класс.
Диспетчеризация процессов производится при возникновении прерывания.
При этом низкоуровневая программа останавливает выполнение работающего процесса, сохраняет его состояние в таблице процессов ядра и запускает соответствующий драйвер. Диспетчеризация процессов производится также, когда ядро завершает свою работу и наступает момент запуска процесса пользователя. Программа диспетчеризации процессов написана на ассемблере и представляет собой отдельную от процедуры планирования программу.
Аппаратные и эмулированные
прерывания
Системные вызовы
Управление
терминалом
Необработанный
телетайп
Именование Отображе- Страничные
файлов ние адресов прерывания Обработка Создание и
завершение
сигналов
ОбработанСетевые Файловые
процессов
Виртуальная память
ный телетайп протоколы системы
Дисциплины
линии связи
Символьные
устройства
Сокеты
Маршрути- Буферный
зация
кэш
Драйверы
сетевых
устройств
Страничный кэш
Драйверы дисковых устройств
Планирование
процесса
Диспетчеризация
процессов
Аппаратура
Рис. 2.22. Структура ядра операционной системы UNIX
Символьные устройства могут использоваться двумя способами. Некоторым программам (например, текстовым редакторам vi и emacs), требуется нажатая клавиша без обработки. Для этого служит ввод-вывод с
необработанного терминала (телетайпа). Другое программное обеспечение, например оболочка shell, принимает на входе уже готовую текстовую
строку, позволяя пользователю редактировать ее, пока не будет нажата
клавиша Enter. Такое программное обеспечение пользуется вводом с терминала в обработанном виде и дисциплинами линии связи.
Сетевое программное обеспечение часто бывает модульным, с поддержкой множества различных устройств и протоколов. Уровень выше сетевых драйверов выполняет функции маршрутизации, гарантируя, что
правильный пакет направляется правильному устройству или блоку
управления протоколами. Большинство систем UNIX содержат в своем яд-
ре полноценный маршрутизатор Интернета. Над уровнем маршрутизации
располагается стек протоколов (включая протоколы IP и TCP). Над сетевыми протоколами располагается интерфейс сокетов, позволяющий программам создавать сокеты9 для отдельных сетей и протоколов. Для использования сокетов пользовательские программы получают дескрипторы
файлов.
Над дисковыми драйверами располагаются буферный кэш и страничный кэш файловой системы. В ранних системах UNIX буферный кэш представлял собой фиксированную область памяти, а остальная память использовалась для страниц пользователя. В современных системах границы не существует, и любая страница памяти может использоваться для
выполнения поставленной задачи. Над буферным кэшем располагаются
файловые системы. Большинством систем UNIX поддерживают несколько
файловых систем, включая быструю файловую систему Беркли, журнальную файловую систему, а также различные виды файловых систем System
V. Файловые системы совместно используют общий буферный кэш. Выше
файловых систем помещается именование файлов, управление каталогами, управление жесткими и символьными связями, а также другие свойства файловой системы, одинаковые для всех файловых систем.
Над страничным кэшем располагается система виртуальной памяти,
содержащая логические алгоритмы работы со страницами. Выше находится программа отображения файлов на виртуальную память и высокоуровневая программа управления страничными прерываниями, которая определяет действия при их возникновении. Вначале она проверяет допустимость обращения к памяти. При положительном ответе определяет местонахождение требуемой страницы и способ ее получения.
Над диспетчером располагается планировщик процессов, выбирающий
процесс, который должен быть запущен следующим. Если потоками
управляет ядро, то управление потоками является также функцией ядра. В
некоторых системах UNIX управление потоками вынесено в пространство
пользователя. Над планировщиком процессов расположена программа
для обработки сигналов и отправки их в требуемом направлении, а также
программа, занимающаяся созданием и завершением процессов.
Верхний уровень представляет собой интерфейс системы. Слева располагается интерфейс системных вызовов, который принимает все системные вызовы и направляет их одному из модулей низших уровней в
зависимости от природы системного вызова. Правая часть верхнего уровня представляет собой вход для аппаратных и эмулированных прерываний, включая сигналы, страничные прерывания, разнообразные исключительные ситуации процессора и прерывания ввода-вывода.
Сокеты подобны почтовым ящиками и телефонным розеткам в том смысле, что они образуют пользовательский интерфейс с сетью, как почтовые ящики формируют интерфейс с почтовой системой, телефонные розетки позволяют абоненту подключать телефон и соединяться с телефонной системой.
9
2. Практическая часть
2.1. Вопросы по разделу
1. Перечислите дополнительные функции по сравнению с более ранними представителями семейства Windows.
2. Объясните назначение функции «интернационализация».
3. Какой вид должен иметь правильно составленный пароль?
4. На каких платформах работает Windows 2000? Почему предпочтение
оказано этим платформам?
5. Каким образом операционная система Windows 2000 определяет
версию программного продукта?
6. Какие переменные управляют различием в версиях Windows 2000?
7. Каким образом происходит загрузка выбранной версии продукта?
8. Какой механизм используется для фиксации факта нарушения лицензии?
9. Перечислите основные составные части Windows 2000 и определите
их назначение.
10. Определите основное назначение модульной структуры ядра операционной системы Windows NT.
11. Чем отличается структура ядра операционной системы Windows 2000
от структуры ядра операционной системы Windows NT?
12. Перечислите системные службы исполняющей подсистемы Windows
2000.
13. Какой уровень Windows 2000 является машинно-зависимым и для
реализации какой цели?
14. Определите назначение уровня HALL и службы, которые в него
включены
15. Определите назначение и основные функции ядра операционной системы Windows 2000.
16. На каких службах построено ядро Windows 2000?
17. Опишите отличие объекта АРС от объекта DPC в Windows 2000.
18. Определите назначение исполняющей системы и ее модулей.
19. Определите назначение модуля «Уровень системных служб».
20. Определите назначение драйверов устройств в Windows 2000.
21. Определите назначение объектов в Windows 2000.
22. Какой механизм предоставляет доступ к объектам в Windows 2000?
23. Определите термин «исполняемый объект».
24. Опишите структуру объектов в Windows 2000.
25. Опишите механизм реализации объектов в Windows 2000.
26. Определите назначение и виды пула в Windows 2000.
27. С помощью какого механизма определяется тип объекта в Windows
2000?
28. Перечислите общие типы объектов исполняющей системы и опишите
их назначение.
29. Определите термин «пространство имен объектов» и опишите его
типы назначение.
30. Перечислите типичные каталоги пространства имен объектов.
31. Перечислите ключевые файлы Windows 2000 и их режим работы.
32. Перечислите уровни структуры Windows XP и опишите их назначение.
33. Перечислите действия, выполняемые при инициализации ядра операционной системы Windows XP.
34. Перечислите модули, входящие в состав системных сервисов
Windows XP.
35. Определите основное назначение операционной системы UNIХ.
36. Кратко опишите структуру операционной системы UNIХ.
37. Опишите назначение каждого уровня структуры UNIХ.
38. Опишите структуру ядра операционной системы UNIХ.
39. Определите термин «сокеты».
2.2. Упражнение 1. Форматы команд машинного языка
Команда центрального процессора состоит из кода операции и одного
или нескольких операндов (объектов, над которыми совершается операция). В зависимости от числа операндов, команды подразделяются на:
- безадресные команды – команды, не имеющие операндов или имеющие неявно указанные операнды;
- одноадресные команды – команды производящие операцию над одним объектом или одним явно и одним или несколькими неявно указанными;
- двух- и трехадресные команды (встречаются архитектуры, в которых
есть команды и с большим числом операндов).
1.Примеры безадресных команд без операнда:
NOP – No OPeration, отсутствие операции;
HALT – остановка процессора.
2.Примеры безадресных команд с неявно указанными операндами:
RETURN – возврат из подпрограммы (выталкивает из стека адрес
возврата и помещает его в счетчик команд);
WDR – WatchDog Reset, сброс сторожевого таймера микроконтроллера;
ADD – вытолкнуть из стека два значения, сложить их и протолкнуть
результат в стек;
SCS – Skip if Carry Set, пропустить следующую команду, если бит переноса в слове состояния установлен;
3.Примеры одноадресных команд с одним операндом:
INC x – INCrement, добавить к операнду 1 и сохранить результат по
тому же адресу;
TST х TeST – установить в слове состояния флаги знака и равенства
нулю в соответствии со значением операнда;
4.Примеры одноадресных команд с неявным операндом:
ADD x [, Асс] – сложить операнд с аккумулятором и сохранить результат в аккумуляторе;
PUSH х – протолкнуть значение операнда в стек;
CALL x – вызов подпрограммы, сохраняет адрес следующей команды
в стеке и передает управление по указанному адресу;
BNEQ х – передает управление по указанному адресу, если в слове
состояния установлен флаг равенства нулю;
5.Примеры двух- и трехадресных команд:
MOVE x, у – присвоить значение объекта х объекту у;
ADD x, у – сложить х и у, поместить результат в у.
ADD x, у, z - сложить х и у и поместить результат в z;
6.Пример четырехадресной команды:
DIV х, у, z, w – выполняет деление х на у, помещает частное в z, а
остаток – в w;
7.Пример шестиадресной команды:
INDEX b, I, h, s, i, a – вычисляет адрес элемента массива, расположенного по адресу b, с нижней и верхней границами индекса I и b соответственно и размером элемента s.
где:
операнд i – индекс элемента;
операнд а – место, куда следует поместить вычисленный адрес.
Количество адресов иногда используют и для общей характеристики
системы команд. Двухадресной называют систему команд, в которой команды имеют максимум два операнда, трехадресной – максимум три операнда. Иногда вместо максимального количества операндов, адресность
системы команд определяют по количеству операндов у часто используемых команд сложения и вычитания. Таким образом, VAX, из системы команд которого взяты примеры четырех- и шестиадресных команд, часто
относят к трехадресным архитектурам.
Одноадресные системы команд обычно используют в качестве неявно
заданного операнда выделенный регистр (аккумулятор), или стек. Такие
архитектуры называют, соответственно, аккумуляторными и стековыми.
Одноадресную аккумуляторную архитектуру имеют микроконтроллеры семейства PIC фирмы Microchip. Большинство современных процессоров
имеют двух- и трехадресные системы команд.
На примере стековой команды ADD видно, что многие из команд стековой архитектуры могут обойтись без явно указанных операндов, однако
команды проталкивания значений переменных в стек и выталкивания их
оттуда все-таки необходимы, поэтому все стековые архитектуры одноадресные, а не безадресные.
2.2. Порядок отчетности и форма контроля выполнения работы
Контроль выполнения задания производится по окончании занятия и на
консультациях в форме защиты выполненной работы, предоставленной в
электронном и в бумажном виде в форме «Отчет по лабораторной работе
…».
Лабораторная работа № 4 .................................................................................................... 1
1. Теоретическая часть: Архитектура операционных систем ......................................... 1
1.1. Общая структура операционной системы Windows 2000 ..................................... 1
1.2. Реализация объектов в Windows 2000. Подсистемы окружения ......................... 7
1.2. Общая структура операционной системы Windows XP ...................................... 13
1.3. Архитектура операционной системы UNIХ .......................................................... 18
2. Практическая часть ...................................................................................................... 22
2.1. Вопросы по разделу .............................................................................................. 22
2.2. Упражнение 1. Форматы команд машинного языка ............................................ 23
2.2. Порядок отчетности и форма контроля выполнения работы ............................. 25
Download