- •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. Стратегия подкачки и рабочие наборы. Стратегия подкачки и рабочие наборы
39. Api: ms-dos и 16-ти разрядной Windows. Виртуальные dos-машины. Api: ms-dos и 16-ти разрядной Windows.
Ясно, что количество потенциальных пользователей Windows NT сильно зависит от возможности использования приложений для MS-DOS и Windows, и так будет продолжаться еще долгое время. Поддержка этих пользователей была важным аспектом при разработке Windows NT.
Модель клиент-сервер Windows NT может легко поддерживать много сред исполнения приложений. Подсистемы MS-DOS и 16-разрядной Windows для Windows NT тесно связаны друг с другом и имеют набор общих основных целей:
• Обеспечить пользователям легкий переход от MS-DOS и 16-разрядной Windows к Windows NT.
• Позволить выполняться основным приложениям MS-DOS и 16-разрядной Windows, в то же время защитив от них остальную систему.
• Обеспечить двоичную совместимость приложений между платформами CISC и RISC.
• Позволить приложениям 16-разрядной Windows выполняться наравне с приложениями 32-разрядной Windows.
Для MS-DOS Windows является сложным графическим приложением, расширяющим возможности нижележащей ОС. Для Windows NT и MS-DOS, и 16-разрядная Windows являются приложениями — подсистемами среды, которые вызывают API Win32 и иногда базовые сервисы NT. На рис. 5-16 показано место MS-DOS и 16-разрядной Windows в структуре Windows NT.
Подсистемы MS-DOS и 16-разрядной Windows работают в пользовательском режиме, так же, как и другие подсистемы среды. Однако, в отличие от подсистем Win32, OS/2 и POSIX, они сами по себе не являются серверными процессами. Приложения MS-DOS исполняются в контексте процесса, называемого виртуальной DOS-машиной (virtual DOS-machine, VDM). VDM — это приложение Win32, которое создает полный виртуальный компьютер, исполняющий MS-DOS.
Например, оно позволяет приложениям MS-DOS исполнять машинные команды, вызывать BIOS, осуществлять непосредственный доступ к некоторым устройствам и получать сигналы прерываний. Одновременно может выполняться любое количество процессов VDM, каждый в отдельном консольном окне.
Рис. 5-16. Подсистемы MS-DOS и 16-разрядной Windows.
Среда 16-разрядной Windows — это гибридное приложение, исполняющееся в адресном пространстве процесса VDM. Для выполнения большинства своих задач она вызывает API Win32, но иногда обращается и к сервисам NT. Разработчики среды 16-разрядной Windows называют ее WOW, что является сокращением от Windows on Win32 (Windows на Win32).
Создание подсистем среды MS-DOS и 16-разрядной Windows в виде подсистем пользовательского режима обеспечивает им ту же защиту кода и данных, которую имеют и остальные подсистемы. Это также защищает исполнительную систему NT от проблем этих сред, так как доступ к исполнительной системе NT осуществляется только через вызовы системных сервисов. Такая стратегия защищает приложения MS-DOS от приложений 16-разрядной Windows и наоборот, а также отделяет их адресные пространства от адресных пространств приложений 32-разрядной Windows.
Виртуальные dos-машины
Виртуальная DOS-машина (VDM) — это сессия MS-DOS, создаваемая всякий раз, когда пользователь запускает приложение MS-DOS из-под Windows NT. Последняя допускает параллельное исполнение произвольного количества приложений MS-DOS, причем они могут передавать через буфер обмена текстовые данные друг другу и приложениям Windows.
Исполнение приложений MS-DOS под Windows NT — это трудная задача, так как они зачастую написаны на ассемблере и предполагают наличие свободного доступа к памяти, устройствам и т. д. В настоящей многопользовательской ОС приложениям MS-DOS нельзя давать полную свободу, однако, им необходимо позволить выполняться как обычно. Это противоречие разрешено помещением каждого приложения MS-DOS в свой отдельный процесс — VDM — с собственным виртуальным адресным пространством, содержащим весь код MS-DOS и драйверы MS-DOS, необходимые для работы приложения. Внутри своего адресного пространства приложение может делать все, что заблагорассудится. Диспетчер виртуальной памяти исполнительной системы NT управляет тем, как приложение используют физическую память, и гарантирует, что оно не будет перекрываться с другими процессами.
Когда пользователь щелкает значок MS-DOS (или значок приложения MS-DOS), подсистема Win32 запускает в консольном окне командный процессор Windows NT. Последний отходит от используемой в OS/2 модели исполнения 32- и 16-разрядных команд разными командными процессорами. Хотя он и выглядит как командный процессор MS-DOS, но одинаково способен выполнять как 32-разрядные команды Windows NT, так и 16-разрядные команды MS-DOS в одном и том же консольном окне, и даже поддерживает переназначение вывода между приложениями командной строки. Когда пользователь вводит команду, процессор команд просто вызывает функцию Win32 CreateProcess() для запуска исполняемого файла. Если команда является программой MS-DOS, то подсистема Win32 запускает процесс VDM, который загружает приложение MS-DOS в адресное пространство VDM и исполняет его. Когда приложение MS-DOS осуществляет вывод, VDM вызывает консольные функции Win32 для отображения этого вывода в своем консольном окне.
Во время своей работы приложение MS-DOS должно иметь доступ к ОС MS-DOS или, по крайней мере, к чему-то такому, что выглядит и работает как MS-DOS. В сущности, VDM — это виртуальная ОС MS-DOS, исполняющаяся на виртуальном компьютере с процессором типа Intel х8б. На рис. 5-17 изображено адресное пространство VDM на машине Intel х8б.
16-разрядная эмуляция MS-DOS создана на основе исходного кода MS-DOS 5.0, за исключением поддержки файловой системы. Она располагается в нижней части виртуального адресного пространства VDM, а приложение MS- DOS загружается непосредственно
рис. 5-17 Виртуальная DOS-машина (VDM)
над нею. Приложению доступно не менее 620 Кбайт памяти.
Хотя код, расположенный ниже 16-мегабайтной границы, использует 16-разрядные сегментные адреса, код, находящийся выше нее, написан с использованием 32-разрядной линейной адресации формата Windows NT. 32-разрядная часть виртуального адресного пространства VDM имеет сложную структуру. Здесь расположены драйверы виртуальных устройств и код 32-разрядной эмуляции MS-DOS, один и тот же вариант которого используется для всех процессорных архитектур. Блок обработки команд (instruction execution unit) является машинно-зависимым. Его версия для Intel х8б работает как обработчик ловушки, перехватывая команды, вызывающие аппаратные ловушки, и передавая управление обрабатывающему их коду, например, драйверам виртуальных устройств. На процессорах MIPS этот код является эмулятором команд, преобразующим команды х8б в команды MIPS.
Драйверы виртуальных устройств играют роль прослойки между приложениями MS-DOS и аппаратурой, подключенной к машине Windows NT. В состав первой версии среды VDM входят драйверы виртуальных устройств для стандартных устройств ПК, включая мышь, клавиатуру, принтер, СОМ—порты и т. д. 32-разрядный код VDM обрабатывает операции ввода—вывода MS-DOS, перехватывая их и вызывая для выполнения ввода-вывода либо функции Win32, либо исполнительной системы NT. Например, для обработки запросов к СОМ-порту VDM открывает соответствующий драйвер устройства и посылает ему коды управления вводом-выводом (IOCTL). Для обновления изображения на мониторе поток VDM периодически проверяет видеоОЗУ, куда пишут приложения MS-DOS, и вызывает консольные API Win32 для вывода изменений на экран.
Хотя одновременно может выполняться много сессий MS-DOS, на это расходуется относительно небольшой объем памяти. Первые 640 Кбайт виртуальной памяти каждого процесса VDM, а также области ниже 16-мегабайтной границы не используются совместно разными VDM. Однако диспетчер виртуальной памяти обеспечивает совместное использование всеми VDM одной копии 32-разрядного кода, расположенного выше этой границы. Более того, так как VDM —это обычный процесс пользовательского режима, она может быть целиком откачана на диск. Это означает, что диспетчер виртуальной памяти загружает в физическую память только те фрагменты кода MS-DOS 5.0 и кода приложения MS-DOS, которые фактически используются. Если в системе недостаточно свободной памяти, то он временно переносит содержимое памяти приложения на диск.
Приложения MS-DOS не являются многозадачными, так как каждое из них предполагает, что выполняется на машине MS-DOS в одиночестве. Однако ядро NT работает с потоками MS-DOS так же, как и с другими потоками. Когда истекает квант времени, выделенный потоку, ядро прерывает его выполнение и контекст переключается на другой поток; исполнение потока MS-DOS может возобновиться позднее. Так как некоторые приложения MS-DOS большую часть времени находятся в цикле опроса клавиатуры (и "пожирают" циклы процессора), то среда VDM, обнаружив подобное состояние простоя, дает больший приоритет другим ожидающим потокам.
40. ОС Windows на Win32.
Windows на Win32
Одной из основных целей среды 16-разрядной Windows (WOW) было сделать различие между 16- и 32-разрядными приложениями для Windows незаметным для пользователя. Пользователь запускает 16-разрядные приложения тем же способом, что и приложения Win32. Приложения обоих типов выполняются одновременно, внешне неотличимые одно от другого.
Хотя для пользователя 16- и 32-битные приложения выглядят одинаково, на самом деле они выполняются под управлением разных частей ОС. Среда WOW— это по сути многопоточная VDM, каждый поток которой исполняет одно приложение 16-разрядной Windows. Выполнение этих приложений в одном адресном пространстве моделирует поведение 16-разрядной Windows, где все приложения однопоточные и работают в общем адресном пространстве. Для создания и управления окнами 16-разрядных приложений среда WOW вызывает API Win32. В отношении пользовательского ввода среда WOW рассматривается как одно приложение Win32, см. рис. 5-18.
Рис. 5-18. Модель ввода для среды WOW.
Рис. 5-19. 16-разрядная Windows на Win32 (WOW).
Как и в случае приложения MS-DOS, когда пользователь в первый раз запускает 16-разрядное приложение для Windows, подсистема Win32 определяет, что исполняемый файл работает под MS-DOS, и запускает процесс VDM. После этого VDM загружает среду WOW. Виртуальное адресное пространство WOW VDM показано на рис. 5-19.
Структура адресного пространства системы WOW сходна со структурой адресного пространства процесса приложения MS-DOS. Внизу адресного пространства находится тот же самый код MS-DOS, а непосредственно над ним — код ядра Windows 3.1. Этот код, из которого удалена поддержка многозадачности, обрабатывает функции управления памятью Windows 3.1, а также загружает исполняемые файлы и MS-DOS для 16-разрядных приложений для Windows. Еще выше в адресном пространстве располагаются диспетчер окон и процедуры — заглушки GDI, над которыми находятся 16-разрядные приложения. Здесь может быть загружено любое количество таких приложений, их код и данные подкачиваются диспетчером виртуальной памяти по мере надобности.
Код многозадачности 16-разрядной Windows заменен в подсистеме WOW ее собственным кодом, вызовами Win32 API и кодом поддержки многозадачности исполнительной системы NT. После того, как среда WOW запущена, подсистема Win32 посылает ей сообщение всякий раз, когда пользователь запускает 16-разрядное приложение для Windows. В ответ WOW загружает это приложение в память и вызывает функцию Win32 CreateThread(), чтобы создать поток для выполнения данного приложения. Хотя все остальные потоки в Windows NT могут вытесняться, потоки WOW не вытесняются подсистемой Win32 для достижения совместимости среды WOW с 16-разрядной Windows. Это не означает, что эти потоки могут выполняться столько, сколько им заблагорассудится. Ядро по-прежнему может прервать выполнение потока WOW, чтобы могли выполняться другие не-WOW потоки. Однако, когда ядро переключает управление обратно на WOW, оно выбирает для продолжения работы только поток, прерванный последним; все остальные потоки WOW блокированы до тех пор, пока текущий поток сам не освободит процессор. Такое поведение эмулирует не вытесняющую многозадачность, на которую рассчитаны 16-разрядные приложения для Windows, не воздействуя на Win32 и другие приложения, выполняющиеся под Windows NT.
Выше границы 16 Мбайт в адресном пространстве WOW находится тот же самый код, что и для процесса приложения MS-DOS — драйверы виртуальных устройств MS-DOS, 32-разрядная эмуляция MS-DOS и машинно-зависимый блок обработки команд. Кроме того, имеется блок 32-разрядного кода диспетчера окон и GDI, соответствующий 16-разрядному коду в нижней части адресного пространства. Этот 32-разрядный код отвечает за трансляцию 16-разрядных сегментных адресов в 32-разрядные линейные адреса. Например, когда 16-разрядное приложение для Windows вызывает функции диспетчера окон или GDI, показанные на рис. 5-19,16-разрядные заглушки вызывают эквивалентные 32-разрядные функции API в верхней части адресного пространства подсистемы WOW. 32-разрядный код диспетчера окон и GDI преобразует 16-разрядные адреса, переданные приложением, так чтобы они соответствовали 32-разрядной линейной модели. Затем для выполнения операции вызывается API Win32. Когда подсистема Win32 возвращает результаты, 32-разрядный код WOW преобразует адреса обратно в 16-разрядные, которые и возвращаются приложению. Так как 16-разрядный API на самом деле не реализован в WOW, не гарантируется нормальная работа под Windows NT 16-разрядных приложений для Windows, которые зависят от внутренней структуры диспетчера окон или GDI.
