«Программирование, как и любовь - это одно слово, за которым скрывается бесчисленное множество занятий»
37. Платформы семейства Windows
В этом разделе использованы материалы из книги: Джеффри Рихтер. Windows для профессионалов (программирование в Win32 API для Windows NT и Windows 95)/Пер. с англ. – М.: Издательский отдел "Русская Редакция" ТОО "Channel Traiding Ltd.",1995. – 720с. (Оригинальное издание – 1995г.)
Интерфейс Win32 API. Операционные системы Windows различных версий предлагают разработчикам прикладных программ (программистам) так называемый интерфейс программирования приложений Win32 API (application programming interface). API представляет собой совокупность функций, к которым может обращаться приложение.
Интерфейс Win32 API реализован на трех платформах: Win32s, Windows NT (Windows 2000) и Windows 95. Первоначальная цель компании Microsoft заключалась в том, чтобы реализовать этот интерфейс (т.е. все его функции) на всех трех платформах. В этом случае приложение, разработанное для любой платформы, можно было бы перенести на другую платформу достаточно просто: необходимо было бы только вновь компилировать его для другой платформы. В действительности, однако, осуществить эту мечту в полной мере не удалось, вследствие чего между тремя названными платформами есть довольно существенные отличия, которые сужают возможности по переносу приложений с одной платформы на другую.
Платформа Win32s была самой первой платформой, способной выполнять 32-битные приложения. Она состоит из набора динамически подключаемых библиотек (dll-файлы) и драйвера виртуального устройства (virtual-device driver). Этот набор служит дополнением к 16-битным системам Windows 3.x. Таким образом, Win32s является всего лишь надстройкой над Windows 3.x. Эта надстройка преобразует 32-битные параметры функций в 16-битные и вызывает соответствующие фунции Windows 3.x.
В Win32s большинство функций Win32 реализовано просто в виде "заглушек": при их вызове происходит возврат управления без выполнения каких-либо действий. Например, поскольку 16-битная Windows не поддерживает потоков, функция CreateThread возвратит пустой указатель. Вместе стем в Win32s были реализованы некоторые функции, не поддерживаемые Windows 3.x. К ним относятся, например, проецируемые в память файлы и структурная обработка исключений.
Целью разработки Win32s было подталкивание программистов к разработке 32-битных приложений с тем, чтобы к моменту выпуска платформы Windows NT на рынке уже присутствовали 32-битные приложения. Эта цель, к сожалению, так и не была достигнута, так как Win32s не имела особого успеха.
Платформа Windows NT – это полноценная операционная система, которая поддерживает функции Win32 в наиболее полном объеме. Она является сравнительно новой ОС и над ней не довлеет груз MS DOS. Корпорация Microsoft делает ставку именно на эту операционную систему. Правда, платформа Windows NT предъявляет высокие требования к аппаратному обеспечению компьютера, в первую очередь к объему ОЗУ и винчестера.
Платформа Windows NT имеет целый ряд преимуществ по сравнению с двумя другими платформами.
Во-первых, 32-битные приложения являются для нее "родными" и могут выполняться наиболее эффективно благодаря интерфейсу Win32 API. Здесь же необходимо отметить и высокую устойчивость платформы по отношению к неизбежным сбоям в работе приложений.
Во-вторых, Windows NT способна выполнять (одновременно) несколько разнотипных приложений, разработанных для MS DOS, OS/2, POSIX, Presentation Manager и Windows 3.x.
В-третьих, Windows NT является единственной переносимой из рассматриваемых платформ, т.е. она способна работать на машинах с разными типами процессоров. Так как большая часть кода Windows NT написана на языках С и С++, то для ее переноса на компьютер с другим (не Intel) типом процессора – MIPS R4000, DEC Alpha или Motorola PowerPC – достаточно перекомпилировать исходные тексты с помощью компилятора, являющегося "родным" для процессора. Конечно, на самом деле переход на другой тип компьютера несколько сложнее, так как требует переписывания двух низкоуровневых компонентов системы: ядра (Kernel) и так называемого слоя абстрагирования от аппаратной части компьютера (Hardware Abstraction Level – HAL). Эти компоненты пишутся в основном на соответствующей версии языка ассемблер и весьма специфичны для конкретного процессора. Для того чтобы приложения, написанные для Windows NT, могли работать на другом компьютере, их остается только перекомпилировать.
Таким образом, если предполагается использовать разрабатываемое приложение на компьютерах с разными типами процессоров, то его надо разрабатывать для платформы Windows NT.
И, наконец, в-четвертых, Windows NT единственная из обсуждаемых платформ, которая может работать на многопроцессорном компьютере и действительно будет использовать его уникальные возможности. Например, если на компьютере установлено 30 процессоров, то Windows NT обеспечит действительно одновременное выполнение до 30 потоков. (Фирма Sequent разработала компьютерную систему с 30 процессорами Intel.)
Платформа Windows 95 – это новейшая операционная система, которая заполняет на рынке очень объемную нишу компьютеров класса Intel 386 и выше с 4 и более мегабайтами ОЗУ. Причиной выпуска Windows 95 является как раз чрезмерно высокие требования Windows NT к характеристикам компьютера.
Для того чтобы Windows 95 могла работать на машинах с 4 Мбайтами памяти, MIcrosoft урезала некоторые функции интерфейса Win32 API. Вследствие этого Windows 95 не полностью поддерживает некоторые функции Win32 API, в частности, асинхронного ввода/вывода файлов, отладки, регистрации, защиты и др. Эти функции реализованы, но не полностью. Вместе с тем, Windows 95 поддерживает большинство функций Win32 API и является самой популярной платформой.
Таким образом, из рассмотренных трех платформ в настоящее время следует всерьез рассматривать только платформы Windows NT и Windows 95, так как платформа Win32s на самом деле не поддерживает большинство функций Win32 API.
Следует отметить еще одно отличие в платформах Windows 95 и Windows NT. В Windows 95 к интерфейсу Win32 API добавлен ряд новых функций для поддержки модемов, более точного воспроизведения цветов и прочего сервиса. А вот Windows NT (по крайней мере версии 3.5) этих функций не имеет вообще. Следовательно, при разработке программ надо иметь ввиду, что некоторые функции интерфейса Win32 API существуют на одной платформе и полностью отсутствуют на другой. Это тем более прискорбно, что платформа Windows NT должна, по замыслу компании Microsoft, поддерживать все функции интерфейса Win32 API.
Полный перечень отличий реализации платформы Win32 в различных версиях Windows можно найти в разделе "Platform Differences" справочного файла ProgTech.hlp.
В операционную систему Windows NT 3.5 встроены графические возможности трехмерной графики OpenGL API. OpenGL - это независимая от операционной системы промышленно-стандартная библиотека графических функций, разработанная фирмой Silicon Graphics для своих рабочих станций. В настоящее время OpenGL признана Architecture Review Board, включающей такие фирмы, как DEC, IBM, Intel, Microsoft и Silicon Graphics. Технология OpenGL была лицензирована Microsoft для предоставления этого мощного 32-разрядного API пользователям Windows NT. Развитые функции этой библиотеки требуются в том случае, когда необходима визуализация крупных проектов и данных. Типичные задачи, требующие ее использования, - это САПР, системы механического и промышленного дизайна, программы статистического и научного анализа.
«36. Разработка собственных библиотек»
38. Приложения, процессы и потоки