- •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. Стратегия подкачки и рабочие наборы. Стратегия подкачки и рабочие наборы
36. Подсистема Win32. 32-х разрядный api. Подсистема Win32
С появлением Windows NT приложения Windows могут выполняться на разных компьютерах, начиная с самых маленьких ноутбуков и заканчивая большими многопроцессорными рабочими станциями. Для разработчиков приложений это означает, что создание одного приложения позволит их продукту исполняться на самом разнообразном компьютерном оборудовании.
В начале разработки Windows NT предполагалось, что это будет старший вариант ОС OS/2, с поддержкой также и API POSIX. Переключение с OS/2 на Windows произошло в середине разработки системы, и было не только болезненным с точки зрения сотрудников и управления проектом (группе OS/2 пришлось выкинуть свой код и начать заново), но и несколько непоследовательным с точки зрения проектирования ОС. Подсистема среды Windows должна была быть подсоединена к исполнительной системе NT и заменить подсистему OS/2. Так как подсистема Windows должна была стать основным пользовательским и программным интерфейсом Windows NT, решено было создать среду " супер-Windows ", расширяющую возможности, имеющиеся в 16-разрядной Windows, посредством нового 32-разрядного API и других средств.
Среда Windows в NТ должна была обеспечить среду программирования, подходящую для рабочих станций старших моделей. Ей также надо было удовлетворять ряду требований исполнительной системы NT:
• установить 32-разрядную, линейную модель памяти;
• реализовать вытесняющую многозадачность;
• гарантировать устойчивость и защиту.
Хотя все это повлекло за собой далеко идущие изменения в системе 16-разрядной Windows, для разработчика и пользователя Windows NT является привычной средой. Она предоставляет дополнительные средства, но везде, где это возможно, сохраняет старую функциональность Windows. Для системы NT подсистема Win32 — это стандартное NT-приложение, пусть и очень сложное. Она полностью переписана для Windows NT и использует в качестве основы базовые сервисы NT. Хотя эта подсистема выполняется как процесс приложения, Windows NT зависит от нее в плане взаимодействия с пользователем и обеспечения среды программирования и API для других приложений.
Название подсистемы Win32 происходит от названия нового 32-разрядного Windows API фирмы Microsoft. Этот API, доступный в Windows NT и MS-DOS, расширяет 16-разрядный Windows API не только использованием 32-разрядной линейной модели памяти, но и более мощным набором функций ОС. В Win32 добавлены такие средства, как ввод-вывод, сложное управление памятью, управление объектами, многопоточные процессы и защита, а также расширены средства графики и управления окнами.
Подсистема Win32 не является целиком новой. Разработчики пытались максимально использовать код управления окнами пользовательского интерфейса, взятый ими из Windows 3.0, удаляя и переписывая те фрагменты, которые нельзя было сделать устойчивыми, безопасными, поддерживающими вытеснение и т. д. Они также заимствовали средства Windows 3.1, чтобы пользовательский интерфейс Windows NT был с нею совместим. С другой стороны, графическая часть подсистемы Win32 является практически полностью новой; отдельная группа разработчиков переделала средства графики с самых основ, используя, по большей части, C++.
32-разрядный API
API Windows нужно было обеспечить всеобъемлющую, сложную среду разработки приложений, не ограниченную старыми программными технологиями и не полагающуюся на конкретную аппаратную архитектуру. Необходимо было поддерживать большие объемы памяти, разнообразные процессоры и многопроцессорные машины, а также создать защищенную среду для критических приложений.
Главным приоритетом Microsoft при развитии API Windows было: сделать новый API совместимым с API 16-разрядной Windows по именам функций, семантике и используемым типам данных везде, где только можно. Все функции API Win32 должны были обеспечить обратную совместимость для переноса существующих 16-разрядных приложений для Windows под Windows NT.
Разработчики Windows и Windows NT определили следующие дополнительные цели проекта нового Windows API:
• Изменить API так, чтобы использовать 32-разрядную линейную модель памяти. API не должен более полагаться на сегментную модель, установленную процессорами семейства Intel х8б, чтобы освободить приложения от ограничения в 64 Кбайт на размеры кода и данных и позволить им достичь максимальной переносимости на RISC и другие не сегментные платформы.
• Сделать этот API одинаковым и под MS-DOS, и под Windows NT, чтобы разработчики могли запускать свои приложения на широком диапазоне машин, от младших моделей до самых старших.
• Сделать среду приложений защищенной путем введения системы виртуальной памяти, где каждое приложение работает в отдельном адресном пространстве, и предоставления в составе API механизмов защиты объектов.
• Добавить в API средства ОС высокого уровня, такие как многопоточные процессы, средства ввода-вывода, синхронизация, управление памятью и поддержка национальных языков (интернационализация).
Для создания нового API Win32 разработчики Microsoft просматривали API Windows 3.0 и модифицировали его так, чтобы он удовлетворял перечисленным выше задачам.
Подсистема Win32 обеспечивает в Windows NT доступ приложений к API Win32. Так как система виртуальной памяти исполнительной системы NT базируется на использовании 32-разрядного линейного адресного пространства, отдельного для каждого процесса, то приложения Win32 API имеют меньшие накладные расходы, чем приложения для API 16-разрядной Windows или MS-DOS.
Функции API Win32 имеют ряд типовых отличий от аналогичных функций API Windows 3.0. Самое большое отличие состоит в том, что некоторые структуры данных, такие как описатели, указатели и координаты для рисования, расширены с 16-битного до 32-битного представления и более не используют сегментную модель памяти. В тех случаях, когда параметры большей длины могут повлиять на существующие приложения, API Win32 вводит новую функцию, с возможностями, аналогичными возможностям существующей функции — так, чтобы не ломать старых приложений и чтобы они могли быть со временем перенесены под Windows NT. Например, формат целочисленных параметров и указателей был изменен с формата "сегмент:смещение" на линейный, 32-битный формат, а координаты функций рисования имеют длину 32 бита, а не 1б.
Полностью новая группа функций API Win32 предоставляет продвинутые средства ОС, такие как ввод-вывод, синхронизация, управление памятью, защита и потоки. Хотя они и разрабатывались так, чтобы сохранить дух старого API Windows, новые функции более или менее непосредственно экспортируют базовые сервисы NT, делая ее мощь доступной программистам Win32. И хотя многие из средств Win32 напрямую заимствованы из исполнительной системы NT, они также были продублированы для MS-DOS
Еще одно новое средство, предоставляемое API Win32 — защита — пронизывает весь интерфейс.
Подсистема Win32 реализует защиту объектов так же, как это делает исполнительная система NT; она защищает совместно используемые объекты Windows от несанкционированного доступа, помещая в них дескрипторы защиты NT. Как и в исполнительной системе NT, когда приложение в первый раз обращается к совместно используемому объекту, подсистема Win32 проверяет права приложения на это. Если проверка проходит успешно, то подсистема Win32 позволяет приложению продолжаться.
Защита в подсистеме Win32 реализована для множества совместно используемых объектов, часть из которых надстроены над базовыми объектами NT. В состав объектов Win32 входят "рабочий стол", окна, меню и, как и в исполнительной системе NT, файлы, процессы, потоки и несколько синхронизационных объектов.
