[Previous] [Next]

Отличия между версиями

Отличия версий Windows 2000 (NT 5.0), XP (NT 5.1) и Server 2003 (NT 5.2), разумеется, существуют. И касаются они не только пользовательского интерфейса и наполнения сервисными программами, но и наборов системных вызовов, предоставляемых в режиме ядра. Тем, кого интересует большее количество деталей, нежели будет представлено далее, можно порекомендовать три статьи, размещенные сегодня в Интернете:

  1. статья Марка Руссиновича и Дэвида Соломона "Windows XP: Kernel Improvements Create a More Robust, Powerful, and Scalable OS", размещенная на сайте Microsoft по адресу msdn.microsoft.com/msdnmag/issues/01/12/XPKernel/default.aspx;
  2. статья Марка Валла и Роберта Вильямса "Windows .NET Structure and Architecture", размещенной в Интернет-журнале "Network Windows & .NET Magazine" по адресу windowsitlibrary.com/Content/717/02/toc.html;
  3. статья "Compare the Editions of Windows Server 2003" (Standard, Enterprise, Datacenter & Web Edition), размещенная на Интернет-сайте Microsoft по адресу microsoft.com/windowsserver2003/evaluation/features/compareeditions.mspx.

Не вдаваясь в подробности, отметим наиболее важные для разработчика драйверов отличия. Прежде всего, следует различать 32 и 64-разрядные клоны. Если 64 разрядная Windows 2000 была собрана лишь один раз в тестовом режиме, то Windows XP (и уж тем более, Server 2003) в 64-разрядной сборке представляет собой реальный коммерческий продукт. Организация адресного пространства памяти в 64 разрядной версии сильно отличается от организации виртуального пространства в 32-разрядном исполнении (таблица 7.1). Приложения, созданные как 32-разрядные программы, запускаются под управлением подсистемы Win32 в рамках модели WOW (Windows On Windows 64), аналогично тому, как 16-разрядные приложения работают в 32-разрядной среде.

Драйвер в 64 разрядной версии компилируется как 64-разрядный код — в частности, с соответствующей длиной указателей. В данной ситуации драйверу актуально знать, от какого приложения он получил запрос — от нового 64-разрядного или старого 32-разрядного. Эта проблема не представляет большого затруднения, поскольку 64-разрядный драйвер может выяснить тип вызывающего процесса при помощи системной функции IoIs32bitProcess, доступной для применения в 64-разрядных сборках драйверов. Пример приводится ниже.

if( IoIs32bitProcess(Irp) == TRUE )
{
	#if DBG
	    DbgPrint("IRP request is made by 32 bit process.");
	#endif
}
else
{
	#if DBG
	    DbgPrint("IRP request is made NOT by 32 bit process.");
	#endif
} 

В соответствии с ответом драйвер может скорректировать некоторые свои операции.

С какой конкретно версией операционной системы драйвер имеет дело, можно легко определить по тому, какую версию модели WDM поддерживает система. Это можно узнать с помощью системного вызова IoIsWdmVersionAvailable, например:

if (IoIsWdmVersionAvailable(l, 0x30)) {
	// Windows Server 2003
} else if (IoIsWdmVersionAvailable(l, 0x20)) {
	// Windows XP
} else if (IoIsWdmVersionAvailable(l, 0x10)) {
	// Windows 2000
} else if (IoIsWdmVersionAvailable(l, 0x05)) {
	// Windows Me
} else {
	//    Windows 98
} 

Тем не менее, пока что широкое использование в России дорогих 64-разрядных конфигураций не предвидится, что можно с некоторой степенью уверенности констатировать на основании неширокого применения в прошлом и настоящем относительно "продвинутых" процессоров XEON.

Сосредоточим внимание на 32-разрядных версиях. Среди них произошли следующие изменения.

При переходе от Windows 2000 к Windows XP переписан загрузчик NTLDR (см. Приложение Б), в результате чего процесс загрузки ускорился в 4-5 раз.

Модуль NTOSKRNL.EXE Windows 2000 экспортировал 1129 функций (большинство из которых — системные вызовы, доступные из драйверов режима ядра), Windows XP экспортирует 1464, a Windows Server 2003 — уже 1525.

Модуль HAL.DLL экспортирует, соответственно, 95, 92 и 92 вызова. Причем, по косвенным признакам заметно, что от версии 2000 к XP его постигла значительная переработка, а от версии XP к Server 2003 — лишь процесс "шлифовки".

Пополнение системных вызовов в Server 2003 произошло, в основном, за счет вызовов с суффиксом Ex, то есть функций в чем-то расширяющих существующие системные вызовы Windows XP. Например, IoCsqInitializeEx получился из вызова IoCsqInitialize.

При переходе от Windows 2000 к Windows XP были смягчены многие ограничения на предельные размеры.

Операционная система Windows 2000 ограничивала общий размер адресного пространства под драйверами 220 Мбайтами, в XP этот предел отодвинут до 960. Таким же он остался и в 32 разрядной версии Server 2003.

Предельный общий размер файлов Системного Реестра Windows XP жестко не фиксирован, в то время как в Windows 2000 он не должен был превышать 376 Мбайт. Увеличен размер системных страничных таблиц, в результате чего системное виртуальное адресное пространство увеличилось до 1.3 Гбайт — против 660 Мбайт в Windows 2000. При этом 960 Мбайт в системном виртуальном адресном пространстве XP непрерывны, в других же его "местах" имеются разрывы. (Заметим, что 64 разрядная версия поддерживает размер виртуального системного адресного пространства равный 128 Гбайт.) Весьма вероятно, что такие же параметры остались и у Windows Server 2003 (точные сведения отсутствуют).

Поскольку, страничные таблицы и большая часть Системного Реестра размещаются в физической памяти резидентно, очевидно, что цена такого "послабления" — новое повышение требований к минимальному размеру установленной на компьютере оперативной памяти — до 128 Мбайт.

Увеличено число процессоров, которые может поддерживать операционная система в симметричной многопроцессорной конфигурации (SMP). В редакции Datacenter Windows Server 2003 может поддерживать до 64 процессоров (в 64 разрядной версии). 32-разрядная версия (как и Datacenter Windows 2000) поддерживает по-прежнему до 32 процессоров. Разумеется, такая архитектура обязана быть должным протестирована, и Microsoft анонсировала особый подход к продажам таких "тяжелых" серверов: операционная система будет поставляться только вместе с аппаратурой OEM поставщиками.

И, наконец, самые интересный вопрос: что же означают громадные цифры поддерживаемой оперативной памяти в 32-разрядных версиях: от 2 Гбайт (редакция Web Windows Server 2003) до 64 Гбайт (редакция Datacenter Windows Server 2003)?

Ответ кроется в двух аббревиатурах: AWE и РАЕ, Address Windowing Extension и Physical Address Extension, соответственно. Операционная система, подчиняясь параметру /РАЕ, заданному в файле boot.ini (см. Приложение Б), загружается в модифицированной конфигурации, поддерживающей режим работы РАЕ. В таком режиме возможна манипуляция физическими адресами оперативной памяти (тип PHYSICAL_ADDRESS) за пределами 4 Гбайтного пространства функциями категории MmAllocatePagesForMdl. Наиболее простое и находящееся "на поверхности" применение данного расширения — создание драйверов, реализующих RAM диск. Правда, осложняет дело высокая цена оборудования. На сегодня доля материнских плат, поддерживающих размер оперативной памяти более 8 Гбайт, не превышает 1,5% рынка.

В заключение отметим еще два факта.

Во-первых, по-прежнему все рассмотренные версии продолжают поддерживать все три файловых системы: FAT, FAT32, NTFS. Иными словами, Windows Server 2003 Datacenter Edition вполне устанавливается на логическом диске FAT32, занимая при этом чуть более 1,3 Гбайт.

Во-вторых, Microsoft окончательно (в Windows Server 2003) отошла от поддержки подсистем POSIX и OS/2.

Впрочем, осталось неизменным самое важное — драйверная модель, заложенная в Windows 2000, обеспечивает практически полную совместимость программного кода (а иногда — и бинарного, как можно было убедиться на примере главы 3) во всех рассматриваемых версиях.