Конспект лекций по дисциплине «Операционные системы и среды»
Вид материала | Конспект |
3.4.Подсистема Win32 32-разрядный API |
- Конспект лекций по дисциплине " Операционные системы", 1459.26kb.
- Ые системы", "Операционные системы, среды и оболочки" и "Операционные системы и системное, 1294.27kb.
- Рабочая программа по учебной дисциплине Операционные системы, среды и оболочки наименование, 623.3kb.
- В. Ф. Панин Конспект лекций по учебной дисциплине "Теоретические основы защиты окружающей, 1559.17kb.
- Программа предназначена для изучения учебного курса по дисциплине "Операционные системы,, 53.62kb.
- Методические указания для выполнения Курсовой работы по дисциплине «Операционные системы», 72.86kb.
- Программа по дисциплине «Технологии программирования и операционные системы», 42.87kb.
- Вопросы к экзамену по дисциплине «Операционные системы и среды», 34.81kb.
- Экзаменационные билеты по дисциплине «операционные системы и среды», 429.29kb.
- Конспект лекций по дисциплине «Маркетинг», 487.79kb.
3.4.Подсистема Win32
Хотя под Windows 2000 могут выполняться приложения разных типов, в первую очередь она является операционной системой Windows. Точнее говоря, это старший член семейства ОС Windows. С появлением Windows 2000 приложения Windows могут выполняться на разных компьютерах, начиная с самых маленьких ноутбуков и заканчивая большими многопроцессорными рабочими станциями. Для разработчиков приложений это означает, что создание одного приложения позволит их продукту исполняться на самом разнообразном компьютерном оборудовании. В следующих подразделах содержится общая информация об API Win32, описание базовой структуры подсистемы Win32, а также рассмотрены некоторые аспекты, в которых устройство подсистемы Win32 отличается от устройства 16-разрядной Windows.
-
32-разрядный API
Microsoft затратила много энергии и ресурсов, чтобы Windows стала выдающейся средой разработки приложений. В 1990 году Стив Балмер (Steve Ballmer), тогдашний старший вице-президент подразделения систем Microsoft, стал провозглашать свои любимые новые лозунги для всех, кто мог его слышать: "Windows, Windows, Windows!" и "Windows Everywhere!"6 ("Windows повсюду!"). Хотя его бьющий через край юмор всегда вызывал смех на собраниях фирмы, второй лозунг имел некоторый особый подтекст. Как говорилось в гл. 1, в Microsoft видели необходимость создания ОС старшей модели, которая могла бы использовать новейшие достижения технологии аппаратного обеспечения. API Windows 3.0, который работал поверх MS-DOS, был ограничен в этом отношении. Чтобы стать продвинутой ОС, этот API должен был эволюционировать.
API Windows нужно было обеспечить всеобъемлющую, сложную среду разработки приложений, не ограниченную старыми программными технологиями и не полагающуюся на конкретную аппаратную архитектуру. Необходимо было поддерживать большие объемы памяти, разнообразные процессоры и многопроцессорные машины, а также создать защищенную среду для критических приложений.
Несмотря на эти амбициозные цели, главным приоритетом Microsoft при развитии API Windows было: сделать новый API совместимым с API 16-разрядной Windows по именам функций, семантике и используемым типам данных везде, где только можно. Все функции API Win32 должны были обеспечить обратную совместимость для переноса существующих 16-разрядных приложений для Windows под Windows 2000.
Твердо помня об этой задаче, разработчики Windows и Windows 2000 определили следующие дополнительные цели проекта нового Windows API:
- Изменить API так, чтобы использовать 32-разрядную линейную модель памяти. API не должен более полагаться на сегментную модель, установленную процессорами семейства Intel x86, чтобы освободить приложения от ограничения в б4 Кбайт на размеры кода и данных и позволить им достичь максимальной переносимости на RISC и другие не сегментные платформы.
- Сделать этот API одинаковым и под MS-DOS, и под Windows 2000, чтобы разработчики могли запускать свои приложения на широком диапазоне машин, от младших моделей до самых старших.
- Сделать среду приложений защищенной путем введения системы виртуальной памяти, где каждое приложение работает в отдельном
- адресном пространстве, и предоставления в составе API механизмов защиты объектов.
- Добавить в API средства ОС высокого уровня, такие как многопоточные процессы, средства ввода-вывода, синхронизация, управление памятью и поддержка национальных языков (интернационализация).
Для создания нового API Win32 разработчики Microsoft просматривали API Windows 3.0 и модифицировали его так, чтобы он удовлетворял перечисленным выше задачам. Затем Microsoft привлекла "подопытных кроликов" как из самой компании, так и извне, чтобы добиться большей простоты в использовании и переносимости.
Подсистема Win32 обеспечивает в Windows 2000 доступ приложений к API Win32. Так как система виртуальной памяти исполнительной системы NT базируется на использовании 32-разрядного линейного адресного пространства, отдельного для каждого процесса, то приложения Win32 API имеют меньшие накладные расходы, чем приложения для API 16-разрядной Windows или MS-DOS. В связи с этим Microsoft поощряет программистов использовать в новых приложениях Win32 API, который доступен как в Windows 2000, так и в MS-DOS.
Функции API Win32 имеют ряд типовых отличий от аналогичных функций API Windows 3.0. Самое большое отличие состоит в том, что некоторые структуры данных, такие как описатели, указатели и координаты для рисования, расширены с 16-битного до 32-битного представления и более не используют сегментную модель памяти. В тех случаях, когда параметры большей длины могут повлиять на существующие приложения, API Win32 вводит новую функцию, с возможностями, аналогичными возможностям существующей функции — так, чтобы не ломать старых приложений и чтобы они могли быть со временем перенесены под Windows 2000. Например, формат целочисленных параметров и указателей был изменен с формата "сегмент:смещение" на линейный, 32-битный формат, а координаты функций рисования имеют длину 32 бита, а не 1б.
Полностью новая группа функций API Win32 предоставляет продвинутые средства ОС, такие как ввод-вывод, синхронизация, управление памятью, защита и потоки. Хотя они и разрабатывались так, чтобы сохранить дух старого API Windows, новые функции более или менее непосредственно экспортируют базовые сервисы NT, делая ее мощь доступной программистам Win32. И хотя многие из средств Win32 напрямую заимствованы из исполнительной системы NT, они также были продублированы для MS-DOS. Однако, некоторые продвинутые средства, например, асинхронный ввод-вывод, доступны только под Windows 2000.
Еще одно новое средство, предоставляемое API Win32 — защита — пронизывает весь интерфейс. Защита Win32 была реализована Джимом Андерсоном (Jim Anderson), разработчиком, чей обширный опыт включал, помимо всего прочего, создание компьютеров контроля качества для заводов по производству двигателей компании Ford Motor. Средства защиты, разработанные им для подсистемы Win32, являются расширениями (пользовательского режима) для средств защиты, встроенных Джимом Келли (Jim Kelly), Робертом Рейчелом (Robert Reichel) и другими в объектную архитектуру исполнительной системы NT
Подсистема Win32 реализует защиту объектов так же, как это делает исполнительная система NT; она защищает совместно используемые объекты Windows от несанкционированного доступа, помещая в них дескрипторы защиты NT. Как и в исполнительной системе NT, когда приложение в первый раз будет выдан первый запрос на рисование. Кэширование атрибутов (attribute cashing), как называется этот метод буферизации, минимизирует количество переключении контекста и объем времени, затраченный на передачу сообщений между клиентом и сервером.
Для уменьшения числа переключении контекста между клиентом и сервером GDI использует аналогичный способ оптимизации, пакетирование (batching). Пакетирование — это метод, при использовании которого, например, DLL GDI сохраняет несколько вызовов функций в очереди и посылает их на сервер одним сообщением, когда очередь переполняется или когда пользователь выполняет ввод. При получении такого сообщения сервер Win32 последовательно выполняет все функции, прежде чем управление возвращается клиенту. Прежде чем использовать эту технику, разработчики GDI провели тесты и проверили, не будет ли вывод на экран прерывистым или неравномерным. Тесты показали, что вызовы функций посылаются серверу достаточно часто, и вывод на экран проходит плавно и ровно.
Авторам прикладных программ следует иметь в виду эти методы оптимизации производительности при создании новых многопоточных приложений. Если два потока работают вместе, то их исполнение должно быть синхронизировано, чтобы гарантировать выполнение действий в надлежащем порядке. Например, нужно учитывать, что результат не появится на экране сразу же после вызова потоком функции API. Вызов функции может сохранен в буфере потока, ожидая своего вывода на экран. GDI предоставляет функцию GdiFlush(), при помощи которой поток может осуществить принудительную посылку кэшированных вызовов функций на сервер Win32.
Другим результатом использования модели клиент-сервер является то, что приложения, которые постоянно изменяют и перерисовывают большие битовые поля, могут работать медленно, в сравнении с прорисовкой аппаратно-независимых образов с использованием вызовов GDI. Так как каждый объект или битовый образ являются локальными для клиентского приложения, они должны пересылаться в составе сообщения на сервер при всякой перерисовке экрана. Для обеспечения оптимальной производительности приложениям следует либо перерисовывать, по возможности, только измененные фрагменты битового образа, либо рисовать при помощи функций GDI, что позволяет реализовывать преимущества методов кэширования и пакетирования. Новый Win32 GDI API предоставляет более полный, чем GDI API 16-разрядной Windows, набор средств рисования, необходимый сложным приложениям.