С апреля 1992 года Windows 3.1 официально именуется операционной системой. Интерфейс ее был несколько улучшен, в частности были усилены возможности управления экранными объектами мышью (Drag - and - drop метод перетаскивания). Windows стала непосредственно поддерживать динамический обмен данными между приложениями (DDЕ - Dynamic Data Exchange ). В систему вошли средства мультимедиа, ранее поставлявшиеся отдельно в пакете WindowsMultimediaExtension. Для расширения издательских возможностей в Windows была встроена поддержка системы масштабирования шрифтов TrueType.
Windows 3.11 for Workgroups (“для рабочих групп”) позиционировалась как самостоятельная сетевая операционная система для одно-ранговой локальной сети, а также как сетевой клиент для сервера WindowsNТ. В остальном Windows 3.11 для рабочих групп являлась слегка улучшенной модификацией Windows 3.1, работающей только в 386-м Расширенном режиме на 32-разрядных микропроцессорах.
А теперь мы постараемся разобраться в том, как устроена Windows.
Режимы работы Windows3.XЧтобы запустить мотор Windows на полную мощность, конечно, нужны прежде всего мегабайты и мегабайты оперативной памяти. Но их невозможно использовать на микропроцессорах 8088/86. Не слишком удачным решением был и защищенный режим 80286: для того чтобы использовать на компьютере приложения для новой операционной среды вместе с МS-DOS приложениями, приходилось переключать микропроцессор из защищенного режима в реальный и обратно.
Здесь уместно вспомнить о том, что фирма Microsoft весьма тесно сотрудничала с Intel во время разработки микропроцессора i80386. Microsoft фактически навязала инженерам Intel собственную концепцию режима виртуального микропроцессора 8086-V86, наиболее удобную для разработки операционной системы, использующей МS-DOS приложения вместес программами защищенного режима. Поскольку в 1990 году рынок еще не был готов к полному переходу на операционную систему для микропроцессора 80386, Windows 3.О могла функционировать в трех режимах, в каждом из которых микропроцессор и память использовались по-разному.
В реальном режиме работы Windows система функционировать даже на компьютере с микропроцессором 8088 или 8086, оборудованном только обычной памятью для работы приложений в реальном режиме Windows 3.0 использовалась только обычная память МS-DOS и отображаемая память.
Стандартный режим Windows 3.0 требовал для работы микропроцессор 80286 и всего 1 Мбайт памяти - 640 Кбайт стандартной и 384 Кбайт дополнительной (настоящая работа начиналась при объеме памяти 4 Мбайт). Для приложений Windows использовалась расширенная память (ХМS). Для программ МS-DOS, загружаемых из-под Windows, применялась обычная память и переключение микропроцессора из защищенного режима в реальный.
Более полно использовал аппаратные ресурсы 386-й Расширенный режим Windows . В этом режиме версии Windows 3.0 и 3.1 работали с виртуальной памятью, имевший примерно втрое больший объем, чем физическая оперативная память. Приложениям МSDOS в 386-м Расширенном режиме отводилась произвольная область памяти, которая в виртуальном режиме 8086 размечалась как обычная память MS DOS . По умолчанию МS-DOS программы загружались занимая, как обычно, весь экран, но могли быть переведены в графическое окно - стандартное окно Windows. Приложения МS-DOS, запущенное из-под Windows в 386-м Расширенном режиме, работало в виртуальной машине, иными словами, считало себя загруженным на своем собственном компьютере и знать не знало о существовании Windows.
Разумеется, для работы в 386-м Расширенном режиме требовался компьютер с микропроцессором не ниже 80386. Объявленные требования к объему памяти (2 Мбайт) опять-таки не стоило принимать всерьез. Минимумом являлись 4 Мбайт памяти, а для более или менее серьезной работы требовались 8 Mбайт или больше.
Структура ядра Windows. Способ, при помощи которого одна и та же система может работать в трех принципиально разных режимах, ориентированных на совершенно разные микропроцессоры, заключается в следующем.
Ядро Windows состоит из трех компонентов Kernel ,User и GDI. При помощи дополнительных DLL-файлов (динамически загружаемых библиотек) поддерживаются отображением стандартных диалоговых окон, протоколы DDЕ (динамического связывания данных) и ОLЕ (связывания и встраивания объектов), взаимодействие с драйверами устройств ввода-вывода и другие черты Windows. Windows -драйверы устройств бывают, кстати, двух видов - “обычные” DLL-драйверы и 386драйверы, последние предназначены опять-таки для работы только в 386-м Расширенном режиме Windows.
Наиболее низкоуровневой частью ядра Windows являетсямодуль Kernel, управляющий распределением памяти, процессами, файловым вводом-выводом и так далее. В разных режимах работы Windows 3.О функции Kernel выполняли различные файлы: kernel.ЕХЕ для Реального режима krnl286.Еxe для Стандартного режима, КrnlЗ86.ЕХЕ для 38б-го Расширенного режима.
Так что Windows 3.0 была разработана как операционная система, имеющая три разных ядра. Когда был упразднен Реальный режим работы, из комплекта поставки Windows 3.1 и исчез файл Kernel.dll. Следующий шаг был сделан, Windows 3.11 для рабочих групп - эта система работала только в 386-м Расширенном режиме. Модуль User (user.ЕХЕ) служит для работы с клавиатурой, мышью, таймером и портами, а также выполняет функции отображения элементов графического интерфейса (окон, меню). Он управляет такими драйверами, как, например, различные драйверы клавиатуры и мыши.
Наконец, модуль GDI(интерфейс графических устройств, файл GDI.ЕХЕ) поддерживает графические процедуры - прорисовку линий, закрашивание, отображение шрифтов (начиная с Windows 3.1 - все операции со шрифтами TrueType) и взаимодействует с драйверами графических устройств - дисплея и принтера. С Windows 3.1 поставлялось более десятка драйверов видеоадаптеров. Для поддержки принтеров в Windows 3.1 впервые была применена архитектура мини-драйверов. Универсальный драйвер принтера NIDRV.DLL выполнял аппаратно-независимые функции печати -несколько десятков мини-драйверов, поставляемых производителями, дополняли универсальный драйвер функциями обходимыми специально для поддержки конкретных устройств и не повторяли уже написанный общий код.
1.1.3. Windows 95
В 1996 году фирмой Microsoft , была выпушена следующая версия операционной системы Windows. Которая была названа фирмой 32 разрядной многозадачной графической системой. / 1 /
Архитектура Windows 95.Что должна была сделать Microsoft, чтобы прийти к 32-разрядной операционной системе с обеспечением вытесняющей многозадачности, которая бы при этом оставалась полностью совместима с прикладными программами для Windows3.x и MS-DOS, не требовала бы для работы самой МS DOS и “умещалась” в четырех мегабайтах оперативной памяти ?
Фирмой Microsoft уже выпущены системы, удовлетворяющие самым серьезным требованиям к управлению памятью и процессами, - WindowsNТ SERVER и WindowsNТ workstation (выпущены версии 3.51 и готовятся к выпуску 3.52), Однако эти системы сами предъявляют серьезнейшие требования к аппаратуре, а заодно и к пользователю. WindowsNТ SERVER предназначается не для десятковмиллионов потребителей Windows, а для сетевого администрирования. WindowsNТ workstation нужна тем пользователям, которые используют приложения с высокой интенсивностью вычислительной обработки, тем, кто нуждается в высокой степени безопасности данных, и тем, кто больше беспокоится о надежности системы, чем о совместимости с приложениями для MS DOS и Windows3.x.
Всех остальных пользователей на порядок больше, и им нужнее “легкая” система.
Ядро Windows 95. Ядро Windows 95, как и во всех предыдущих версиях Windows, имеет трехуровневую структуру Kernel -User- GDI. Все эти модули должны бы быть 32-разрядными, но в действительности полностью 32-разрядной сделана только самая низкоуровневая часть ядра Windows 95 - Кегне1. Вполне понятно, что, объявляя о 32-разрядной системе, Microsoft обязана была выполнить в 32-разрядном коде хотя бы такие базовые вещи, как функции ввода- вывода, управления памятью и процессами, поддержку сетевой и файловой систем.
Что касается двух других модулей ядра, то расчеты показали, что полностью 32-разрядные USER и GDI вместе потребуют для работы более 1 Мбайт памяти, Windows 95 использует 1б-разрядный код, когда он необходим для обеспечения совместимости или если 32-разрядное кодирование нецелесообразно, то есть увеличило бы расход памяти без заметного увеличения производительности.
Поэтому модуль User, остался в Windows 95 преимущественно 1б-разрядным, а его 32-разрядная часть используется для переадресации вызовов 32-разрядных приложений 16-разрядному блоку. Большая часть функций ОВ1, включая подсистему буферизации входных и выходных потоков, подсистему печати, растеризатор шрифтов TrueТуре и основные операции рисования, перенесена в 32-разрядный модуль, оставшийся 16-разрядный код описывает управление окнами. 16-разрядные функции ядра Windows 95 написаны преимущественно на ассемблере .Что же касается Kernel, то его 16-разрядная часть задействуется только при загрузке Windows 95 и используется только для инициализации 32-разрядной части Kernel. Сам Kernel32 никогда не обращается к Kernel16. На рис.1.2.показано, для каких функций используется 32-разрядный код, а для каких 16-разрядный код модулей ядра Windows 95.
Многозадачность. Анализируя выполнение под Windows 95 16-разрядных приложений для Windows3.x и МS-DOS, мы видим по большейчасти знакомые, хотя и серьезно улучшенные методы Windows3.x.
Как показано на рис. 1.3., 16-разрядные приложения для Windows (“приложения win16”) выполняются в общем пространстве адресов в пределах системной виртуальной машины. Такие варианты, как выполнение каждого приложения win16 в отдельной виртуальной машине (чтовозможновОS/2) или полная эмуляция Windows3.x в пределах операционной системы (как это делается в Windows NТ).