- •36. Подсистема Win32. 32-х разрядный api. Подсистема Win32
- •37. Структура.
- •38. Конструктивные изменения.
- •39. Api: ms-dos и 16-ти разрядной Windows. Виртуальные dos-машины. Api: ms-dos и 16-ти разрядной Windows.
- •Виртуальные dos-машины
- •44. Диспетчер. Виртуальная память. Диспетчер.
- •Виртуальная память
- •45. Средства пользовательского режима: управление памятью, совместное использование. Средства пользовательского режима
- •Управление памятью
- •Совместное использование памяти
- •46. Совместное использование: секции, проекции и проецируемые файлы. Секции, проекции и проецируемые файлы
- •47. Объект-секция. Способы защиты памяти. Объект-секция
- •Защита памяти
- •48. Собственная память процесса. Совместное использование памяти. Собственная память процесса
- •Совместное использование памяти
- •49. Адресное пространство. Подкачка страниц. Адресное пространство
- •Подкачка страниц
- •50. Механизмы подкачки страниц. Механизмы подкачки страниц
- •51. Стратегия подкачки и рабочие наборы. Стратегия подкачки и рабочие наборы
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 напрямую.
