Azarat, Конкретно по Win7 не знаю, но вероятно, что статья тебе поможет. Я думаю надо проверить включен ли режим PAE и в BIOS функция «Memory Remap Feature» [spoiler]BIOS
Итак, первая напасть, которая часто одолевает пользователей, установивших 4 Гб памяти в систему, – это неправильное определение ее объема в BIOS’е. Как правило, в этом случае отображается от чуть менее 3 Гб до примерно 3.8 Гб – в зависимости от системы и ее конфигурации. В этом случае первое, с чего стоит начать, – это проверка материнской платы на совместимость. Загляни в мануал к плате – объем поддерживаемой памяти должен составлять не менее 4 Гб. Для серверных мамок этот показатель, само собой, может быть гораздо больше, но в данном материале мы будем говорить именно о desktop-решениях, равно как и о 32-битных операционных системах.
Теперь поясним, куда же деваются «лишние» мегабайты. Дело в том, что все 32-битное адресное пространство невозможно отдать только лишь под приложения. Ресурсы системы, будь то чипсет, PCI-устройства и особенно видеокарта, также нуждаются в «месте под солнцем», то есть им необходимо присвоить определенный диапазон адресов. И если масштаб, в котором может действовать BIOS, составляет всего 4 Гб, то объем памяти, зарезервированный под оборудование, приходится отделять от оперативки. В противном случае неизбежно могут возникнуть конфликты между приложениями и системными устройствами.
Современные материнские платы решают эту проблему несколькими способами. Некоторые модели изначально правильно определяют объем памяти без каких-либо ухищрений – в этом случае считай, что тебе повезло :). Другие решения требуют нашего вмешательства – как правило, в их BIOS’ах присутствует настройка «Memory Remap Feature» (название может варьироваться). Эта функция переназначает сегмент памяти, выделяемый устройствам, за пределы четырех гигабайт – таким образом, система начинает видеть твою память целиком уже на этапе загрузки. Если же подобной функции или ее вариантов в BIOS’е нет, а система упорно не желает видеть всю память, нам остается только посочувствовать – в этом случае «медицина бессильна». Впрочем, всегда остается возможность обновить прошивку материнской платы до последней версии – вполне вероятно, что это исправит проблему или хотя бы добавит в BIOS вожделенный пункт. Заметим, что в случае с Windows XP SP2 включение данной опции не только не принесет пользы, но и усугубит ситуацию, хотя об этом мы поведаем чуть ниже.
Если матплата не имеет в настройках BIOS Memory Remap Feature, это еще не значит, что она не работает с увеличенным объемом памяти. К примеру, когда мы установили четыре планки по 1 Гб в Gigabyte GA-965P-S3, плата сразу определила ровно 4 гигабайта, при этом в BIOS’е никаких настроек по перемещению выделяемого под устройства диапазона адресов не было.
Итак, когда система определила всю доступную ей память, наступает момент перейти к следующему пункту – поддержке на уровне операционных систем. Но сначала еще одно лирическое отступление…
PAE и AWE – красивый «обман»
Теперь ты знаешь, что адресное пространство для 32-битной операционки ограничено четырьмя гигабайтами. Спешим тебя обрадовать – эта проблема во многих случаях решаема и без использования 64-битных осей. Более того, о ее решении позаботились задолго до того, как ты впервые подумал о возможности установки в систему четырех гигов – в 1995 году. Именно тогда на арену вышел процессор Intel Pentium Pro с поддержкой технологии PAE – Physical Address Extension…
Что же означает эта загадочная аббревиатура? Если вкратце, то данная технология позволяет процессору работать не с 32-битной, а с 36-битной адресацией, теоретически расширяя доступные ему адреса до 2^36 = 68719476736 байт (64 Гб). При этом само адресное пространство остается 32-битным, то есть равным 4 Гб, но за счет измененного отображения на него физической памяти становится возможным использование куда большего ее объема.
Разумеется, поддержка PAE имеется и в Windows – в этом и содержится ключ к детектированию полного объема оперативной памяти. Проблема в том, что не всегда технология включена по умолчанию – для ее использования должна загружаться специальная версия ядра. На данный момент поддержка PAE имеется у следующих операционок:
Windows 2000 Advanced Server
Windows 2000 Datacenter Server
Windows XP (все версии)
Windows Server 2003 (and SP1), Standard Edition
Windows Server 2003, Enterprise Edition
Windows Server 2003, Datacenter Edition
Windows Server 2003 SP1, Enterprise Edition
Windows Server 2003 SP1, Datacenter Edition
Windows Vista (все версии, кроме Starter Edition – у нее поддержка памяти ограничена 1 Гб)
Заметим, что если твой процессор поддерживает аппаратную антивирусную защиту NX-bit, то, вполне вероятно, что PAE в системе уже включена. Дело в том, что поддержка NX-bit со стороны Windows может работать только при включении данной опции, причем Windows XP SP2 и 2003 Server SP1 в большинстве случаев сами определяют наличие этого бита и устанавливают, какое ядро необходимо загружать. Если же PAE отключена (об этом можно узнать в окне «Свойства системы» или же с помощью утилиты вроде Everest), то ее необходимо активировать. Как это сделать, мы поясним ниже на примере различных операционок.
Теперь о плохом: даже если Windows определит всю доступную память, пользу это принесет, в лучшем случае, твоему самолюбию. Причина в том, что область памяти за пределами 4 Гб в 32-битной среде может быть доступна только приложениям, написанным с использованием интерфейса AWE (Address Windowing Extension). Проще говоря, если PAE – это поддержка большого объема памяти со стороны железа и операционки, то AWE – это ее поддержка со стороны софта. И вся проблема в том, что такой поддержкой обладает разве что софт, оперирующий огромными объемами данных – к примеру, СУБД или программы, выполняющие сложные научные расчеты. Играм или офисному софту это попросту не нужно, соответственно, и прироста производительности в них ты не увидишь. А вот какой-нибудь Microsoft SQL Server получит очень даже ощутимую пользу!
Есть и еще один способ «хака» памяти, доступной приложениям. Далеко не все знают, что виртуальное адресное пространство, которое, как ты помнишь, составляет 4 Гб, делится системой ровно пополам: 2 Гб на приложения и 2 Гб под системное ядро. Фактически, ни один процесс не может заполучить в свое распоряжение более 2 Гб памяти – еще одно доказательство того, что рядовому пользователю большой объем оперативки попросту ни к чему. Впрочем, есть способ обойти и это ограничение. Если добавить в файл C:\boot.ini к параметрам загрузки команду /3GB, то память перераспределится следующим образом: объем, выделяемый под ядро, ужмется до 1 Гб, а на процесс станет выделяться уже три гигабайта! Но и здесь мы натыкаемся на пресловутую поддержку со стороны софта – большинство приложений предоставленной им радости попросту не поймет. А поймет ее только софт, скомпилированный со специальным ключом /LARGEADDRESSAWARE – это, опять же, далеко не игры, и даже не любимый «Фотошоп». Заметим, что при использовании операционной системы с поддержкой большого количества памяти (к примеру, до 32 Гб) ключ /3GB сократит количество доступной памяти до 16 гигов. То есть, если в твоем сервере отображается 16 Гб, а установлено гораздо больше – ищи проблему в boot.ini и безжалостно удаляй.
Теперь давай посмотрим, что могут предложить нам текущие операционки от Microsoft…
Windows XP
Самое интересное в нашем рассказе то, что наиболее популярная ОС от Microsoft хуже всего оснащена поддержкой большого количества памяти. Если не сказать большего – вообще не оснащена. А обиднее всего, что так было не всегда, а лишь до появления пакета обновлений Service Pack 2 – именно в нем возможности PAE были значительно урезаны. Если быть точнее, то во избежание конфликтов доступное адресное пространство было ужато с 36 бит до стандартных 32 бит, а сама PAE стала использоваться разве что для поддержки NX-бита. В результате это приводит к забавным казусам – при включении опции «Memory Remap Feature» BIOS начинает видеть больше памяти, а Windows, наоборот, меньше! К примеру, если до включения опции BIOS определял 3.5 Гб, то после он видит уже 4 Гб, в то время как в Windows определяется всего 3 Гб! А дело все в том, что Memory Remap Feature переносит память за пределы четырех гигабайт блоками по гигабайту. То есть если после выделения памяти под железо BIOS определял 3.5 Гб, то после «выноса» этой памяти за пределы адресного пространства остается всего 3 Гб. Соответственно, если первоначально было видно, к примеру, 2.8 Гб, то «передислоцировалось» уже 2 Гб, и столько же оставалось Windows, которая без нормальной поддержки PAE попросту не могла видеть то, что находилось за пределами ее восприятия.
Отсюда неутешительный вывод: Memory Remap Feature для Windows XP SP2 применять бесполезно – это принесет лишь вред. Только два варианта могут заставить XP видеть 4 Гб памяти – использование версии Service Pack 1 (на что вряд ли кто-то пойдет), либо же установка 64-битной версии операционки.
Windows Vista
Вот мы и дошли до операционной системы, не очень актуальной пока, но претендующей на лидирующую роль в самое ближайшее время. Пользователей Vista проблема поддержки 32-битной версией 4 Гб памяти беспокоит особенно сильно – ведь, по сути, такой объем дорогущей оперативки приобретается именно ради нее. Но здесь мы наблюдаем все то же самое: от 2 до 3.5 Гб видимой памяти вместо четырех, как того требует справедливость. Есть ли решение у данной проблемы? В отличие от Windows XP, действительно есть, и довольно тривиальное!
Файла boot.ini в Vista нет – вместо него конфигурацию загрузки можно редактировать специальной утилитой BCDEdit.exe. Итак, все, что требуется сделать, это войти в командную строку (cmd) и набрать там следующее:
BCDEdit /set PAE forceenable
BCDEdit /set nolowmem on
Первый пункт здесь форсирует поддержку PAE, ну а второй загружает системные файлы и драйвера в область за пределами 4 Гб, высвобождая место в адресном пространстве. После перезагрузки ОС должна увидеть все 4 Гб памяти, ну а стоило ли это затраченных усилий, решай сам. А заодно и протестируй систему на стабильность – вполне возможно, что теперь ее поубавится.