В Windows 98 была впервые введена поддержка нового класса драйверов, соответствующих модели WDM (Win32 Driver Model). WDM использует послойную архитектуру, в которой каждый слой изолирует часть сервисов, нужных для драйвера устройства.

Использование оперативной памяти

Сразу предупреждаю: в этом разделе упоминаются объемы оперативной памяти ПК, измеряемые в килобайтах (Кбайт), и это не опечатка, так как в начале 80-х годов многие полноценные приложения «умещались» в 16–64 Кбайт ОЗУ. Так вот, базовая, или стандартная, память (conventional memory) IBM PC-совмести-мых компьютеров представляла собой «целых» 640 Кбайт оперативной памяти, а всего микропроцессоры 8086/88 могли адресовать до 1 Мбайт, или 1024 Кбайт памяти. Для обращения к базовой памяти не были нужны никакие дополнительные драйверы, поскольку MS-DOS изначально была создана для работы в адресах 0–640 Кбайт.

Это казалось очень много, и именно в этом заключалась третья проблема MS-DOS. Ведь для создания ядра операционной системы, способной обеспечить графический пользовательский интерфейс и унифицированный доступ ко всем устройствам ввода-вывода для всех приложений, нужно было очень много памяти для программного кода и данных – гораздо больше, чем 640 Кбайт.

Первые три поколения Windows

В ходе самостоятельных разработок в области графического интерфейса Microsoft стремилась к тому, чтобы оконная среда не только была оболочкой для MS-DOS, позволяющей работать с файлами и запускать программы, но и предоставляла разработчикам собственный интерфейс прикладного программирования (Application Programming Interface, API).

Существовавшие тогда IBM PC-совместимые компьютеры не могли обеспечить полноценного функционирования графической среды, поэтому Windows 1.0 (1985 г.) выглядела довольно бледно и была примечательна преимущественно тем, что была первой. Она работала в реальном режиме процессора 8086, имела графический интерфейс с неперекрывающимися окнами, обеспечивала совместную работу графических Windows-приложений и одного приложения MS-DOS.

В 1987-88 годах появлялись уже вполне работоспособные реализации Windows/286 и Windows/386 (Windows 2.x). В интерфейсе этих ОС окна приложений могли перекрываться; свернутые окна приложений, работающих в фоновом режиме, выглядели как небольшие значки в нижней части экрана. Тогда же был реализован механизм динамического обмена данными (DDE). В Windows/286 можно было запустить в один момент времени лишь одно MS-DOS-приложение. Windows/386 (1988 г.) уже могла выполнять одновременно несколько приложений MS-DOS в отдельных виртуальных машинах благодаря механизму вытесняющей многозадачности.

Среда Windows имела свой API для работы с приложениями, но до появления Windows 3.0 была способна задействовать только нижние 640 Кбайт памяти MS-DOS и до 32 Мбайт так называемой отображаемой памяти, которая отображалась 16-килобайтными страницами на непрерывный страничный блок размером 64 Кбайт, находящийся выше стандартных 640 Кбайт – в области старших адресов (ухищрение разработчиков, к счастью, давно забытое). До версии 3.0 эта графическая среда особенного успеха на рынке не имела, так как практически не давала преимуществ ни разработчикам, ни пользователям.

Оболочкой ранних версий Windows служила MS-DOS Executive (рис. 1.3). Эта программа позволяла мышью или клавишами управления курсором отыскивать файл или каталог, легко открывать его, выбирать дисковод и переходить в над-каталог, нажав клавишу Backspace. Вот и все плюсы этой однооконной программы, не поддерживавшей, кстати, и перетаскивания мышью (drag-and-drop, «перетащи и отпусти»).