Microsoft объясняет, почему специально ограничивала потребительскую 32-битную Windows на уровне 4 ГБ
Microsoft объясняет, почему специально ограничивала потребительскую 32-битную Windows на уровне 4 ГБ

Существует популярный миф, что 32-битная Windows ограничена 4 ГБ ОЗУ из-за того, что 32-битный адрес может представить только 2^32 комбинаций, что как раз и даёт 4 ГБ. Звучит правдоподобно, но история Windows XP и Physical Address Extension (PAE) показывает, что это не так.

На самом деле у Microsoft был механизм, позволявший 32-битным x86-системам адресовать физическую память выше 4 ГБ. Серверные редакции Windows могли им пользоваться, клиентские сознательно не могли. Ограничение ввели, чтобы компьютеры не падали из-за проблемных драйверов оборудования.

Но почему больше памяти приводило к сбоям? И если 32-битная Windows технически могла адресовать больше памяти, почему Microsoft не дала обычным пользователям доступ к ней?

Microsoft объясняет, почему 32-битная Windows могла адресовать больше 4 ГБ с помощью PAE

Многие полагают, что 32-битная Windows застряла на 4 ГБ, потому что 32-битное число не может считать дальше. Для виртуальной памяти это справедливо, но физическая память работает иначе.

Давний инженер Microsoft Рэймонд Чен ответил на этот вопрос в своём блоге The Old New Thing. Речь о Physical Address Extension, или PAE. Эту технологию Intel встроила в Pentium Pro, чтобы 32-битные x86-чипы работали с 36-битными физическими адресами вместо 32-битных.

Windows по-прежнему выделяет каждой 32-битной программе виртуальное адресное пространство на 4 ГБ. Меняется лишь то, сколько физической памяти операционная система может использовать за кулисами. Документация Microsoft по PAE показывает, насколько сильно расширяли возможности эти дополнительные 4 бита. Windows Server 2003 SP1 Enterprise поддерживала до 64 ГБ, а Datacenter до 128 ГБ.

Версии Windows с поддержкой PAE. Источник: Microsoft
Версии Windows с поддержкой PAE. Источник: Microsoft

В итоге вопрос свёлся к тому, что технически мог процессор и что позволяли использовать клиентские редакции Windows.

Настоящая проблема была в тысячах драйверов оборудования, которые должна была поддерживать Windows

Если оборудование позволяло больше, почему Microsoft просто не разрешила всем этим пользоваться? Ответ Чена: драйверы.

Как только включается PAE, драйвер больше не может считать, что физический адрес легко помещается в 32 бита. Документация Windows по PAE показывает, что может сломаться в коде драйверов:

  • Подпрограммы выравнивания буферов, игнорирующие старшие биты физического адреса, перестают работать корректно.
  • Любой код, который незаметно обрезает адреса, начинает терять данные.
  • Драйверы, выполняющие DMA-передачи, должны строго разделять виртуальные и физические адреса, чего во многом не делал старый код.

В документе поддержки Microsoft сказано: “Обычно драйверы устройств нужно изменять в нескольких небольших местах. Хотя сами правки кода могут быть небольшими, они бывают сложными. Всё потому, что без использования адресации памяти PAE драйвер мог считать, что физические адреса и пределы 32-битных виртуальных адресов совпадают. PAE делает это предположение неверным.”

Представьте, что происходит, когда драйвер получает физический адрес, которому нужно больше 32 бит, и просто обрезает его. Windows считает, что записала данные в одно место. Оборудование кладёт их в другое. В зависимости от того, что было перезаписано, это может привести к повреждению памяти или сбою.

Потребительские ПК были полны таких рисков. Принтеры, сканеры, веб-камеры, звуковые карты, любые случайные платы расширения, которые кто-то покупал, требовали драйверов, которые большинство сотрудников Microsoft не тестировали с PAE.

Это особенно затронуло Windows XP и Windows Server 2003 SP1 Standard Edition. Microsoft изменила слой аппаратных абстракций в обеих системах, ограничив физическое адресное пространство 4 ГБ, как раз чтобы непроверенные драйверы не повреждали память, когда PAE открывала к ней более широкий доступ.

Windows XP с включённым PAE. Источник: Reddit
Windows XP с включённым PAE. Источник: Reddit

Что случилось с 32-битной Windows?

С переходом на 64-битные системы ПК с объёмом памяти всего 4 ГБ стали ещё более редкими. Чен отметил: “Windows начала отговаривать от выпуска систем с 32-битными процессорами в 2020 году, а с выходом Windows 11 полностью прекратила выпуск 32-битных редакций”.

Диск Windows XP
Диск Windows XP

Почему Windows Server могла использовать больше 4 ГБ ОЗУ?

Это становится очевидным, если понять, что Windows Server и Windows для обычных пользователей это две совершенно разные экосистемы. Серверные администраторы работают с жёстко контролируемыми системами на тщательно подобранном оборудовании.

Чен объясняет: “Память выше 4 ГБ включена на сервере, потому что, если вы системный администратор, вы не ставите случайные драйверы для ручного сканера, купленного за 10 долларов в корзине скидок Best Buy”.

Серверные администраторы используют стандартные драйверы, входящие в состав Windows, и, как отмечает Чен, даже не устанавливают видеодрайверы от производителей. Главное, что каждый драйвер из комплекта Windows был проверен с адресами выше 4 ГБ. А вот драйвер сканера за 10 долларов из 2001 года не проверяли, и с высокой вероятностью он обрезает такие адреса и портит память.

Windows Server 2003
Windows Server 2003

Обычные пользователи устанавливают практически всё подряд. Серверные администраторы ставят как можно меньше. У большинства потребителей нет технических знаний, а у администраторов серверов есть квалифицированный персонал.

Документация Microsoft подтверждает, что в Windows XP SP2 и Windows Server 2003 SP1 Standard Edition изменили слой аппаратных абстракций, чтобы ограничить физическое адресное пространство 4 ГБ и снизить риски совместимости драйверов.

Чен также отверг циничную теорию о том, что Microsoft ограничила память, чтобы подтолкнуть пользователей к Windows Server. Достаточно вспомнить, что самая дешёвая редакция Windows Server 2003 с поддержкой более 4 ГБ, Enterprise, стоила целых 3999 долларов. Этого хватает, чтобы отбросить эту версию.

Ограничения памяти в Windows XP и Windows Server 2003. Источник: Microsoft
Ограничения памяти в Windows XP и Windows Server 2003. Источник: Microsoft

Что было бы, если бы Microsoft заставила разработчиков оптимизировать использование памяти

Сейчас Microsoft пытается заставить Windows 11 хорошо работать на ПК с 8 ГБ ОЗУ после многих лет роста аппетитов Windows и сторонних приложений к памяти. Как уже сообщалось, свою роль в этом сыграл и MacBook Neo.

Но что было бы, если бы индустрия провела ещё одно десятилетие так, будто память остаётся дефицитным ресурсом? Благодаря ИИ это отчасти стало реальностью, и разработчики теперь больше заботятся о потреблении памяти.

Приложения, которые сегодня запросто съедают сотни мегабайт, могли бы выглядеть совсем иначе. Правда, WhatsApp остаётся исключением, поскольку Meta не проявляет интереса к оптимизации своего приложения. Старое ограничение в 4 ГБ не породило сегодняшнее раздувание программ, но оно напоминает, что аппаратные ограничения обычно заставляют добиваться эффективности, тогда как изобилие ресурсов редко к этому подталкивает.