Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
8.10.11.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.95 Mб
Скачать

37. Структура.

В подсистеме Win32 сохранена базовая структура 16-разрядной Windows. Ее компоненты показаны на рис. 5-13.

Рис. 5-13. Подсистема Win32.

Реализация функций API Win32 в пользовательском режиме приводит к высоким накладным расходам. Узким местом долгое время оставалась производительность графической системы и системы управления окнами. Так как эти элементы (видеодрайверы , драйверы мыши и клавиатуры и т.п.) постоянно взаимодействуют с аппаратурой, разработчики Windows NT 4.0 реши­ли перенести наиболее общие и часто используемые функции из пользовательского режима в ре­жим ядра. При этом функции могут исполняться без буферизации совместно используемой памяти или парных потоков, а также требуют более редкого переключения контекстов потоков. Введенные изменения позволили значительно повысить производительность Windows NT 4.0 и снизить требо­вания к оперативной памяти.

В исполнительную систему NT были перенесены диспетчер окон (USER), интерфейс графических устройств (GDI) и драйверы графических устройств. Диспетчер окон и интерфейс графических уст­ройств теперь функционируют в составе исполнительной системы в режиме ядра, а функции, реализующие консоль, завершение работы и обработку ошибок — в составе подсистемы клиент-сервер (CSR), выполняемой в пользовательском режиме. Новая структура изображена на рисунке.

Перенос диспетчера окон и GDI в режим ядра позволил избавиться от большого числа сложных участков кода. Приложения теперь могут осуществлять доступ к подсистемам с графическим пользо­вательским интерфейсом точно так же, как они реализуют "базовые" (неграфические) части Win32 API (ввод—вывод файлов или управление памятью), путем вызова ловушки в режиме ядра. При этом вызываемый поток переключается в стек режима ядра, а все вызываемые параметры проверяются перед тем, как будут использованы привилегированной подсистемой. Таким образом , исключаются многочисленные переключения процессов и потоков. Однако переключения, выполняемые в режи­ме ядра, относительно дороги по сравнению с непосредственным доступом к коду или данным на одном уровне привилегий, поэтому некоторые из трюков, применявшихся ранее (пакетирование и кэширование в клиентском адресном пространстве в пользовательском режиме), также используют­ся для повышения производительности.

Внесенные изменения не приводят к снижению надежности, так как а) реализация Win32 в режиме ядра полностью защищена от непосредственного доступа приложений и б) процесс Win32 рассмат­ривается как критический компонент системы и в случае его сбоя вся ОС завершит работу.

Подсистема разделена на пять модулей: диспетчер окон, обрабатывающий ввод и управляющий отображением на экране; интерфейс графических уст­ройств (GDI), представляющий собой библиотеку для устройств графического вывода; функции ОС; консоль, обеспечивающая поддержку текстовых окон; и Win32-драйверы графических устройств. Каждый компонент реализует функ­ции API, которые прикладные программисты могут использовать для создания графических приложений. Вместе эти интерфейсы составляют Win32 API.

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

Компонент GDI подсистемы Win32 предоставляет богатый набор функций API для вывода линий, фигур, символов и текста на графические устройства (ви­деодисплей или плоттер), а также для выполнения сложных манипуляций с гра­фикой. Диспетчер окон вызывает эти функции для прорисовки окон и других элементов, а компонент консоли — для рисования текста в окне, однако прило­жения могут вызывать функции API GDI непосредственно. В свою очередь, GDI вызывает для отображения фигур и текста драйверы графических устройств, а драйверы графических устройств обращаются для работы с аппаратурой уст­ройств к драйверам устройств NT.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]