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

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, файлы, процессы, потоки и несколько синхронизационных объектов.

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