Обзор архитектуры и возможностей систем Windows 2000/XP/2003/Vista/2008/7
Обработка прерываний в ядре
Ядро обеспечивает обработку прерываний, если исключения и прерывания генерируются аппаратурой и программным обеспечением. Таким образом, в Windows 2000 введены средства обработки исключений (exceptions) – более высокоуровневый механизм обработки ошибок, чем сигналы в UNIX.
Исключения, которые не могут быть обработаны программно, обрабатываются диспетчером исключений ядра ОС.
Диспетчер прерываний в ядре обрабатывает прерывание либо путем вызова подпрограммы, обслуживающей прерывание (например, драйвера устройства), либо путем вызова внутренней подпрограммы ядра.
Уровни запросов на прерывания в Windows 2000 приведены в таблица 1.
Ядро использует блокировщики (spin locks,буквально – вертящиеся замки),находящиеся в основной памяти, для взаимного исключения процессов.
Для иллюстрации приведем код на ассемблере x86 реализации spin lock:
mov eax, spinlock_address mov ebx, SPINLOCK_BUSY wait_cycle: lock xchg [eax], ebx cmp ebx, SPINLOCK_FREE jnz wait_cycle ; <работа с разделяемым ресурсом – критическая секция> mov eax, spinlock_address mov ebx, SPINLOCK_FREE lock xchg [eax], ebx
Исполнительная подсистема (executive) ОС Windows 2000
Рассмотрим более подробно исполнительную подсистему (executive) Windows 2000.
Менеджер объектов.Как уже было сказано, Windows 2000 использует объекты для управления всеми своими службами и для представления сущностей. Менеджер объектов исполнительной подсистемы управляет использованием всех объектов. Основные функции менеджера объектов:
- Генерация object handle - ссылки на объект ядра Windows 2000;
- Выполнение проверок безопасности при работе с объектом;
- Слежение за использованием каждого объекта процессами.
Объекты управляются стандартным набором методов: create, open, close, delete, query name, parse, security.
Модуль executive поддерживает именование объектов. Имя может быть постоянным или временным. Имена объектов структурируются как имена путей доступа к файлам в MS-DOS или UNIX.
Реализованы объекты-символические ссылки, которые подобны символическим ссылкам в UNIX и дают возможность иметь несколько синонимов для одного файла.
Процесс получает ссылку на объект при его создании, при открытии уже существующего объекта, при получении скопированной ссылки от другого процесса, либо путем наследования ссылки от процесса-родителя.
Каждый объект защищен списком управления доступом.
Менеджер виртуальной памяти в executive.При проектировании менеджера виртуальной памяти предполагалось, что процессор поддерживает для отображения виртуальных адресов в физические механизм страничной организации, прозрачный кэш для многопроцессорных систем, а также алиасы для виртуальных адресов.
Менеджер виртуальной памяти в Windows 2000 использует страничную организацию с размером страницы 4 килобайта.
Используется двухуровневая схема выделения памяти:
- На первом шаге резервируется часть адресного пространства процесса.
- На втором шаге данное выделение поддерживается выделением пространства в файле откачки (paging file).
Схема распределения виртуальной памяти в Windows 2000 приведена на рис. 27.2.
Как видно из схемы, используются иерархические двухуровневые таблицы страниц.
Трансляция виртуальных адресов в Windows 2000 использует несколько структур данных.
Каждый процесс имеет справочник страниц (page directory),содержащий 1024 элемента справочника страниц размером по 4 байта.
Каждый элемент справочника страниц ссылается на таблицу страниц, которая содержит 1024 элемента таблицы страниц (page table entries - PTEs) размером по 4 байта.
Каждый PTE ссылается на фрейм страницы (4 KB) в физической памяти.
Ссылка на элемент всегда занимает 10 битов (0..1023). Это свойство используется при трансляции виртуальных адресов в физические.
Страница может находиться в следующих состояниях: valid (корректна), zeroed (обнулена), free standby (свободна), modified (модифицирована), bad (некорректна).
На рис. 27.3 изображена структура виртуального адреса в Windows 2000.
В виртуальном адресе 10 битов для page directory entry, 10 битов для page table entry, 12 битов для смещения в байтах на странице.
На рис. 27.4 изображена структура элемента таблицы страниц.
В элементе 5 битов отведено для защиты страницы, 20 битов - для адреса фрейма страницы, 4 бита - для выбора файла откачки, 3 бита для описания состояния страницы. Бит V равен 0.
Менеджер процессов executive.Обеспечивает сервисы для создания, удаления и использования потоков и процессов. Связи родительских процессов с дочерними и иерархии процессов обрабатываются конкретной подсистемой окружения, которая владеет данным процессом.
Важный элемент менеджера процессов – механизм локального вызова процедуры (LPC).LPC передает запросы и результаты между клиентским и серверным процессами на локальной машине. В частности, он используется для запросов к сервисам различных подсистем ОС.
При создании канала для LPC должно быть указано сообщение одного из трех типов.
- Первый тип – маленькие сообщения, до 256 байтов; в качестве промежуточной памяти используется очередь сообщений порта, и сообщения копируются от одного процесса к другому.
- Второй тип – во избежание копирования больших сообщений, передаются ссылки на разделяемые объекты, содержащие сообщения.
- Третий тип - быстрый LPC – используется графическими подсистемами Win32.
Рассмотрим структуру сообщения LPC, описанную на языке Си:
typedef struct _LPC_MESSAGE_HEADER { // длина тела сообщения USHORT DataLength; // длина сообщения с заголовком USHORT TotalLength; / / тип сообщения USHORT MessageType; USHORT DataInfoOffset; // уникальный идентификатор процесса, пославшего сообщение ULONG ProcessId; уникальный идентификатор потока, пославшего сообщение ULONG ThreadId; // идентификатор сообщения ULONG MessageId; ULONG CallbackId; } LPC_MESSAGE_HEADER, *PLPC_MESSAGE_HEADER;
Менеджер ввода-вывода в executive.Менеджер ввода-вывода отвечает за следующие компоненты и действия ОС:
Менеджер ввода-вывода следит за тем, какие файловые системы загружены, и управляет буферами для запросов на ввод-вывод.
Он также взаимодействует с менеджером виртуальной памяти для обеспечения ввода-вывода в файлы, отображаемые в память.
Менеджер ввода-вывода управляет кэш-менеджером, который обеспечивает кэширование для всей системы ввода-вывода.
Менеджер ввода-вывода поддерживает как синхронные, так и асинхронные операции, обеспечивает тайм-ауты для драйверов, поддерживает механизмы для вызова одного драйвера другим.
Схема файлового ввода-вывода в Windows 2000 изображена на рис. 27.5.
Монитор безопасности в executive.Объектно-ориентированная архитектура Windows 2000 обеспечивает использование единого механизма для контроля доступа во время выполнения и аудита всех объектов системы.
Каждый раз, когда процесс получает ссылку на объект, монитор безопасности проверяет маркер безопасности процесса и список управления доступом к объекту для проверки, имеет ли процесс необходимые права.
Менеджер Plug-and-Play.Менеджер Plug-and-Play (PnP) используется для распознавания изменений в конфигурации оборудования и адаптации к ним (установки соответствующих драйверов).
Когда добавляются новые устройства (например, PCI или USB), менеджер PnP загружает соответствующий драйвер.
Менеджер PnP также следит за ресурсами, используемыми каждым устройством.