Флешка скидывает файлы больше 4 гб. Как скинуть большой файл на флешку? Преобразование флешки в файловою систему NTFS. Что такое PAE и зачем он нужен

Знакомы многим пользователям. При вызове окна свойств системы полный объем отображается, но после него почему-то указывается, что доступно памяти чуть меньше. Еще хуже, когда пользователь точно знает, сколько у него установлено оперативной памяти, а доступно 50 и менее процентов. Почему это происходит, и как задействовать максимальный объем ОЗУ, далее и рассмотрим. Но для начала кратко остановимся на основных причинах такого явления.

Почему доступна не вся оперативная память?

Итак, то, что операционные системы Windows иногда выдают показатели, значения которых заведомо меньше, нежели полный объем установленной оперативной памяти, могут связаны с рядом причин, среди которых наиболее значимыми являются следующие:

  • установлена 32-разрядная система, не поддерживающая память более 4 Гб;
  • максимальный не поддерживается материнской платой;
  • в параметрах системы установлено ограничение на максимум используемого объема ОЗУ;
  • в BIOS некорректно заданы настройки перераспределения памяти;
  • память частично зарезервирована под встроенные видеоадаптеры;
  • запущено слишком много активных процессов;
  • установленные планки имеют повреждения, их работоспособность нарушена, или они подключены неправильно;
  • использование памяти блокируется вирусами.

Сразу стоит сказать, что подробно вопросы, связанные с вирусным воздействием, рассматриваться не будут. Тут можно посоветовать просто на всякий случай выполнить проверку, используя для этого портативные антивирусы или аналогичные программы, имеющие в своем распоряжении загрузчики.

Как задействовать всю установленную память простейшими способами?

Куда более важными вопросами, когда оперативная память доступна не вся, являются проблемы с подключением планок памяти или их некорректной работой. Для начала убедитесь, что материнская плата рассчитана на устанавливаемый объем, а также проверьте плотность вставки планок в соответствующие слоты. Нелишним будет и выполнить тест памяти, для чего может использовать собственное средство Windows (mdsched) или сторонние программы вроде Memtest86/86+.

Если неполадки на этом этапе выявлены не будут, обратите внимание на разрядность установленной модификации Windows. В случае наличия 32-битной версии, которая не умеет работать с ОЗУ объемом более 4 Гб (если только не применять специальные средства), сколько бы вы ни устанавливали памяти сверх этого лимита, все равно система его не распознает.

Оптимальным решением станет инсталляция 64-битной версии Windows. Но в этом случае установленные ранее программы могут не работать, а важные файлы придется скопировать в другой логический раздел или на съемный носитель.

Иногда бывает и так, что оперативная память доступна не вся по причине некорректно выставленных опций использования памяти в (msconfig).

В конфигураторе на вкладке загрузки нажмите кнопку дополнительных параметров и проверьте, установлен ли флажок на пункте максимума памяти. Если он есть, снимите его, сохраните установленные опции и перезагрузите систему.

Как уже понятно, частично память может «съедаться» огромным количеством активных фоновых процессов и служб, которые не видны пользователю. Для начала отключите все ненужные компоненты в автозагрузке (в Windows 7 и ниже для этого используется соответствующая вкладка в настройках конфигурации, в версиях выше - «Диспетчер задач»).

На всякий случай просмотрите активные компоненты системы в разделе программ и компонентов и отключите неиспользуемые (модуль Hyper-V, Internet Explorer, если используете другой браузер, службу печати, если нет принтера, и т. д.). Аналогично можно установить отключенный тип запуска и для некоторых других служб (services.msc), но в этом случае нужно точно знать, что можно деактивировать, а что нет.

Доступно мало оперативной памяти: какие настройки можно изменить в BIOS?

Если проблема и после применения вышеописанных решений осталась, зайдите в настройки первичных систем BIOS/UEFI и проверьте настройки памяти, в которых должен присутствовать пункт, содержащий слова Remapping или Remap (перераспределение).

Если у вас установлена 64-битная Windows, а памяти более 4 Гб, установите для него значение Disabled (отключение). В противном случае его нужно активировать.

Если оперативная память доступна не вся по причине резервирования дополнительного объема для видеокарты, встроенной в материнскую плату, выставьте для этого пункта значение, соответствующее объему памяти адаптера (узнать его можно на вкладке монитора при вызове диалога DirectX - dxdiag). Делается это за счет смены автоматического определения (Auto) на один из доступных вариантов (32, 64 или 128 Мб).

Пропатчивание 32-битных систем

Наконец, задействовать всю память свыше объема в 4 Гб можно и в 32-битных системах, используя для этого утилиту ReadyFor4GB. Сначала запускается исполняемый одноименный EXE-файл из папки приложения, а затем нажимаются кнопки Check и Apply. После этого аналогичные действия выполняются для объекта ntkrnlpa.exe. Затем запускается файл AddBootMenu.cmd и дается подтверждение выполнения команды. После перезагрузки в случае появления меню с загрузчиком выбирается Windows .

Примечание: все действия производятся исключительно с запуском файлов от имени администратора на свой страх и риск, поскольку работоспособность системы после применения такого метода в полной мере не гарантируется.

В этой статье мы разберемся, как убрать ограничение 4 Гб памяти на 32 битных версиях Windows 8 и Windows 8.1, и задействовать всю доступную на компьютере оперативную память.

Большинство пользователей Windows убеждены, что 32 битные ОС Microsoft не поддерживают более 4 Гб оперативной памяти . Таким образом, максимум памяти, доступной в Windows 8/ 8.1 x86 — 4 Гб. А с учетом того, что Windows резервирует часть памяти под свои нужды и нужды периферийных устройств) чаще всего для видеокарты), конечному пользователю для использования доступны обычно около 3-3,5 Гбайт памяти.

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

Что такое PAE и зачем он нужен

PAE (Physical Address Extension - расширение физической адресации) – эта опция x86 процессора, позволяющая ему получить доступ более чем к 4 Гб физической памяти . Не будем углубляться в технические подробности технологии PAE, просто отметим, что это технология поддерживается всеми процессорами и непосредственно в OC Windows уже довольно давно.

Так, например, 32 битная версия Windows Server, запущенная на процессоре x86, может использовать PAE для доступа ко всей оперативной памяти системы (до 64 Гб или до 128 Гб в зависимости от поколения процессора).

Скажем больше, поддержка режима PAE в ядре Windows имеется, еще начиная с Windows XP. Просто по умолчанию PAE доступен только в серверных ОС, а в клиентских же ОС Windows этот режим хотя и имеется, но отключен.

Примечание . PAE может использоваться только на 32 битных версиях Windows, запущенных на совместимых с этим режимом x86 процессорах.

Ограничения режима PAE

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

    Совет . PAE не поможет увеличить количество памяти, доступной для ресурсоемкого приложения (например, графического или видеоредактора). Если такая необходимость имеется, лучше перейти на 64 разрядную ОС.

  • При использовании PAE следует отметить небольшое снижение производительности системы за счет уменьшения скорости доступа к памяти, вызванное накладными расходами на переключение отображаемых страниц в памяти
  • Драйвера некоторых устройств не могут корректно работать в 36 битном адресном пространстве.

Итак, можно сделать вывод, что верхний предел доступной физической памяти в 32 битных версиях Windows ограничен программно на уровне ядра ОС. А если есть программное ограничение, это означает, что его можно обойти! Каким же образом включить режим PAE в 32 битной Windows 8.1 и задействовать всю доступную оперативную память.

Патч, включающий PAE и позволяющий задействовать всю оперативную память на Windows 8 / 8.1 x86

Включить режим PAE в Windows 8 (Windows 8.1) штатными средствами не получится (для этого придется вручную в HEX редакторе править файл ядра ntoskrnl.exe и переподписывать его). Проще всего воспользоваться готовым патчем PatchPae2 , который написан энтузиастом Wen Jia Liu. Скачать патч PatchPae2 можно . (архив содержит сам патчер — PatchPae2.exe, его исходные коды и необходимые инструкции).

Патч представляет собой небольшую утилиту командной строки, которая позволяет модифицировать файлы ядра 32 битных версий Windows с целью активация режима PAE, позволяющего использовать более 4 Гб оперативной памяти (до 128 Гб памяти).

Патч PatchPae2 будет работать со следующими ОС:

  • Windows Vista SP2
  • Windows 7 / Windows 7 SP1
  • Windows 8 / Windows 8.1

Примечание . Перед установкой необходимо патча с целью предотвращения конфликтов рекомендуется отключить оптимизаторы и драйверы оперативной памяти. Их можно будет активировать после применения патча и загрузки системы в режиме PAE.

Установка PAE — патча в Windows 8 / 8.1

Внимание . Данную инструкцию можно использовать только для 32 битных версий Windows 8 и Windows 8.1, для предыдущих ОС Microsoft процедура немного отличается! Будьте внимательны!


Примечание. В любой момент времени пользователь, перезагрузившись, может в загрузочном меню переключиться с режима PAE на обычный, или обратно.

Важно! После установки патча необходимо быть особенно внимательными при установке обновлений безопасности Windows. Т.к. некоторые обновлений Windows иногда содержат и обновления для ядра, после их установки необходимо обновить и ядро PAE: PatchPae2.exe -type kernel -o ntoskrnx.exe ntoskrnl.exe

Кроме того, могут возникнуть проблемы, описанные и .

Удаление патча PAE

Чтобы удалить патч PAE из системы, необходимо:

  1. Удалить соответствующую запись из загрузочного меню (проще всего это сделать с помощью msconfig )
  2. Удалите файлы ntoskrnx.exe и winloadp.exe в каталоге %Windir%\System32 .

Никаких других изменений в систему патч не вносит.

Пользователи часто сталкиваются с тем, что при попытке записать большой файл на флешку они получают ошибку. Обычно такое случается при попытке записать файл размером больше 4 гб. Система сообщает о том, что файл слишком большой и отказывается производить запись. При этом в момент записи на флеш накопителе может быть несколько десятков свободных гигабайт, но использовать их не получается. Если вы столкнулись с похожей проблемой, то эта статья должна вами помочь. Здесь вы узнаете, почему система отказывается записывать большие файлы на флешку и как это можно исправить.

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

Для того чтобы избавится от этого ограничения и записывать на флешку файлы любых размеров, вам необходимо сменить файловую систему флешки с FAT32 на NTFS. Сделать это можно двумя способами: форматировав флешку в NTFS или выполнив конвертацию файловой системы из FAT32 в NTFS. Дальше мы рассмотрим оба этих способа.

Способ № 1. Форматирование флешки.

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

Итак, для того чтобы форматировать флешку в NTFS вам необходимо открыть «Мой компьютер» и кликнуть правой кнопкой мышки по вашей флешке. В открывшемся меню нужно выбрать пункт «Форматировать».

В результате перед вами откроется небольшое окно для форматирования флешки. Здесь в выпадающем меню «Файловая система» будет выбран вариант «FAT32». Вам необходимо открыть это выпадающее меню и выбрать файловую систему NTFS.

Остальные настройки можно оставить без изменений. После смены файловой системы просто нажмите на кнопку «Начать».

После этого вы увидите предупреждение об удалении файлов с флешки. Для того чтобы продолжить вам нужно нажать на кнопку «Ok».

После этого система начнет форматирование флешки в NTFS. Обычно процесс форматирования занимает всего пару секунд. После того как все будет готово вы увидите соответствующее сообщение.

Способ № 2. Конвертация файловой системы из FAT32 в NTFS.

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

Для того чтобы конвертировать файловую систему вам нужно открыть «Командную строку» с правами администратора и выполнить команду «convert X: /FS:NTFS ». При этом букву «X» нужно заменить на букву, которая была присвоена вашей флешке при подключении.

После выполнения данной команды система начнет конвертацию файловой системы. Время, которое необходимо для конвертации, зависит от размера флешки, ее быстродействия и количества файлов. Но, в большинстве случаев конвертация проходит менее чем за 1 минуту. После завершения конвертации в «Командной строке» появится сообщение о том, что преобразование завершено.

Теперь можно попробовать записать на флешку файл большого размера. Если все было сделано правильно, то теперь файлы с размером больше 4 гб будут записываться без проблем.

Меня этот вопрос тоже волновал. Хотя, казалось бы, можно поставить 64 битную систему, или даже Windows Server (как известно он даже в 32-битной версии видит всю память), но я хотел пользоваться Windows XP. Два раза за последние 3 года я переходил на Windows 7, в первый раз на 64-битную, второй раз на 32-х битную, но в итоге оба раза вернулся назад на XP, которая живёт у меня без переустановки с 2007 года.
Последний раз я отказался от семёрки в пользу старушки буквально две недели назад. Притом, надо отметить, что семёрка была хоть и 32-х битная, но в ней была разблокирована возможность видеть всю доступную память. Способ разблокировки доступен в Интернет. И теперь мне с новой силой захотелось решить этот вопрос и в XP.

Поиски привели на этот сайт: Patch Vista’s Kernel to Address more than 4 GB of Memory
Статья посвящена разблокировке Windows Vista, зато в комментариях, пара человек описывает аналогичный способ для Windows XP. Я решил последовать их советам и опробовать эту методику на практике.

Для начала нужен дистрибутив Windows XP SP1. Возможно, подойдёт и просто первый сервиспак, не знаю, у меня его нет. В общем-то, там нужен только один файл. А именно файл библиотеки Hardware Abstraction Layer. Начиная со второго сервиспака эта библиотека работает с PAE «фиктивно», т.е. даже если режим расширенной трансляции адресов включён – он ничего не делает и не выходит за пределы четырёх гигабайт. А вот библиотека от первого сервиспака работает полноценно и может адресоваться ко всей доступной памяти, аналогично тому, как работает с памятью 32-битный Windows Server. В установленной Windows XP данный файл называется hal.dll, но в дистрибутиве имеется несколько HAL-файлов, и только один из них инсталлируется в систему под именем hal.dll в процессе установки. Необходимо было узнать, какой из файлов нужно использовать на моём конкретном оборудовании. Делается это просто, надо вызвать Свойства в контекстном меню проводника на файле hal.dll в установленной Windows. Файл находится в папке %systemroot%\system32, и вот что я увидел:

В дистрибутиве Windows XP SP1 в папке I386, я взял файл HALMACPI.DL_. Это архив, в котором находится один файл, искомый мной halmacpi.dll. Я его извлёк WinRAR’ом, но можно обойтись и командной строкой:
expand HALMACPI.DL_ HALMACPI.DLL
Полученный файл надо поместить в папку %systemroot%\system32, что я и сделал. Хочу ещё раз обратить внимание, что если кто-то захочет повторить мои шаги, файл надо брать с именем, указанном в свойстве «Исходное имя файла» в свойствах hal.dll из установленной Windows XP.

Второе, что необходимо сделать, это получить пропатченную версию ядра Windows. Как известно, существует 4-ре версии ядра:

  • ntoskrnl.exe - однопроцессорное ядро Windows.
  • ntkrnlmp.exe- многопроцессорное ядро Windows.
  • ntkrnlpa.exe - однопроцессорное ядро Windows с более чем 3 ГБ оперативной памяти.
  • ntkrpamp.exe - многопроцессорное ядро Windows с более чем 3 ГБ оперативной памяти.
В той инструкции, которую я использовал, говорилось про ядро ntkrnlpa.exe и в моей инсталляции Windows стоит именно оно. Что делать, если попадётся другое ядро – я, честно говоря, не знаю.
Первым делом, я сделал копию ядра, назвал его krnl16.exe, в принципе название неважно. Далее HEX-редактором (я использовал DOS-Navigator, по старой памяти) надо найти последовательность
  • BB 00 00 10 00 33 FF 6A 07 8B F0 и заменить её на
  • BB 00 00 40 00 33 FF 6A 07 8B F0
Здесь 1000h = 4096 Мб, заменяем на 4000h = 16384 Мб. Т.е. поднимаем ограничение до 16Гб. В принципе, можно вписать и большее число. Пропатченный файл также должен располагаться в system32.

Теперь осталось отредактировать boot.ini. Нужно скопировать имеющуюся строчку и дописать пару параметров. У меня была строка:
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS.XP=«Microsoft Windows XP Professional RU» /FASTDETECT /USEPMTIMER /NOSERIALMICE /NOEXECUTE=OPTIN

Я добавил в неё /KERNEL=KRNL16.EXE /HAL=HALMACPI.DLL /PAE и в результате получилось:
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS.XP=«Microsoft Windows XP Professional RU 16Gb» /FASTDETECT /USEPMTIMER /NOSERIALMICE /NOEXECUTE=OPTIN /KERNEL=KRNL16.EXE /HAL=HALMACPI.DLL /PAE
Теперь есть возможность загружаться как в стандартный Windows с присущим ему ограничением на память, так и в пропатченный, так как я не заменял ни одного системного файла, а только добавил два, которые включаются в работу с помощью вышеописанных параметров boot.ini

Ребут!
И… BSOD.
В принципе, такое может быть. Как следует из обзора истории проблемы на ixbt причиной, по которой Microsoft отключила адресацию верхней памяти, было существование кривых драйверов под различное оборудование, кривизна которых, впрочем, проявлялась только в полноценном режиме PAE. Вполне вероятно, у меня сбоит один из них, за 6 лет в системе накопилось много всего, но какой? Пробую запуститься в безопасном режиме, и УРА! Вот они, мои гигабайты:

Но как определить сбойный модуль? Погуглив, я нашёл для этого методику, которая заключается в анализе малого дампа памяти, создаваемого Windows при BSOD. Анализ производится программой Blue Screen View, но вот все найденные мной способы включения режима записи дампа к успеху не привели: дамп не создавался, поэтому пришлось использовать научный метод тыка. Для начала я деинсталлировал то ненужное, что нашлось в системе. А именно драйвер защиты Guardant и драйвера ATI от старой видеокарты.
Ребут.
Результат превзошёл мои ожидания. Честно говоря, я не ожидал, что метод тыка даст такие результаты, и попробовал его просто, чтобы сделать хоть что-нибудь. Который из драйверов вызывал проблему, я точно не знаю, но думаю, что, скорее всего Guardant.
Но главное: цель достигнута, и теперь я подумываю о расширении памяти до 8-ми Гб.

  • Примечание 1. Поскольку в методике используется dll из первого сервиспака, есть вероятность, что в ней имеются какие-либо уязвимости, закрытые последующими сервиспаками. Я не изучал этот вопрос.
  • Примечание 2. Некоторые драйверы в пропатченой Windows XP могут вызывать BSOD. Впрочем, их крайне мало в природе.
  • Примечание 3. сообщают, что на некоторых системах имеются проблемы с USB при использовании данной методики. У меня пока проблем нет. По крайней мере, клавиатуры, мышки и флешки работают в штатном режиме.

Прошло несколько лет с тех пор, как была написана статья «Четыре гигабайта памяти - недостижимая цель? », а вопросов, почему Windows не видит все четыре гигабайта, меньше не стало. К числу вопрошающих добавились и обладатели 64-разрядных систем, которых эта проблема, казалось бы, не должна была коснуться. И стало ясно, что пора писать новую статью на эту же тему. Как и раньше, речь пойдет только об операционных системах Windows, причем в основном клиентских, то есть Windows XP, Windows Vista, Windows 7 и грядущей Windows 8. В некоторых случаях намеренно будут использоваться несколько упрощенные описания тех или иных аспектов. Это даст возможность сосредоточиться на предмете данной статьи, не вдаваясь в излишние подробности, в частности, внутреннего устройства процессоров и наборов микросхем (чипсетов) для системных плат. Рекомендуем предварительно прочитать указанную выше статью, так как не всё, сказанное в ней, будет повторено здесь.

Хотя теоретически 32-разрядной системе доступны (без дополнительных ухищрений) до 4 ГБ физической памяти, 32-разрядные клиентские версии Windows не могут использовать весь этот объем из-за того, что часть адресов используется устройствами компьютера. Ту часть ОЗУ, адреса которой совпадают с адресами устройств, необходимо отключать, чтобы избежать конфликта между ОЗУ и памятью соответствующего устройства - например, видеоадаптера.

Рис. 1. Если оперативная память в адресах, используемых устройствами, не отключена, возникает конфликт

Оперативная память заполняет адреса, начиная с нулевого, а устройствам, как правило, отводятся адреса в четвертом гигабайте. Пока размер ОЗУ не превышает двух-трех гигабайт, конфликты не возникают. Как только верхняя граница установленной памяти входит в ту зону, где находятся адреса устройств, возникает проблема: по одному и тому же адресу находятся и ячейка оперативной памяти, и ячейка памяти устройства (того же видеоадаптера). В этом случае запись данных в память приведет к искажению изображения на мониторе и наоборот: изменение изображения - к искажению содержания памяти, то есть программного кода или данных (скажем, текста в документе). Чтобы конфликты не возникали, операционной системе приходится отказываться от использования той части ОЗУ, которая перекрывается с адресами устройств.

В середине девяностых годов прошлого века для расширения доступного объема ОЗУ была разработана технология PAE (Physical Address Extension), увеличивающая число линий адреса с 32 до 36 - тем самым максимальный объем ОЗУ вырастал с 4 до 64 ГБ. Эта технология первоначально предназначалась для серверов, однако позже появилась и в клиентской Windows XP. Некоторые особенности реализации этой технологии в современных контроллерах памяти дают возможность не только использовать PAE по ее прямому назначению, но и «перекидывать» память в другие адреса. Таким образом, часть памяти, которая ради предотвращения конфликтов не используется, может быть перемещена в старшие адреса, например в пятый гигабайт - и снова стать доступной системе.

В обсуждении первой статьи было высказано замечание, что некорректно отождествлять наличие в контроллере памяти системной платы поддержки PAE - и способность платы переадресовывать память; что это вполне могут быть вещи, друг с другом не связанные. Однако практика показывает, что в «железе» для настольных систем это понятия взаимозаменяемые. К примеру, Intel в документации к своему набору микросхем G35 ни слова не говорит о возможности (реально существующей) переадресации памяти, зато подчеркивает поддержку РАЕ. А не поддерживающий PAE набор i945 не имеет и переадресации памяти. С процессорами AMD64 и последними моделями процессоров Intel дело обстоит еще проще: в них контроллер памяти встроен в процессор, и поддержка PAE (и ОЗУ размером более 4 ГБ) автоматически подразумевает поддержку переадресации.

Рис. 2. Переадресация

Рисунок достаточно условный, переадресация совсем не обязательно выполняется блоками именно по одному гигабайту, дискретность может быть другой и определяется контроллером памяти (который, напомним, является либо частью оборудования системной платы, либо частью процессора). В программе BIOS Setup компьютера обычно бывает настройка, разрешающая или запрещающая переадресацию. Она может иметь различные наименования - например, Memory remap, Memory hole, 64-bit OS и тому подобное. Ее название лучше всего выяснить в руководстве к системной плате. Необходимо отметить, что если используется 32-разрядная система, то на некоторых системных платах, преимущественно достаточно старых, переадресацию необходимо отключать - в противном случае объем доступного системе ОЗУ может уменьшиться.

По умолчанию в Windows XP режим РАЕ был отключен, поскольку реальной надобности в нем не было (напомним, что в 2001 году типичный объем памяти настольного компьютера составлял 128-256 МБ). Тем не менее, если его включить, то ХР могла бы использовать все четыре гигабайта памяти - при условии, конечно, что системная плата поддерживала бы РАЕ. Но, повторим, реальной надобности включать этот режим в те годы не было. При желании читатель может для пробы установить на современный компьютер Windows XP или Windows XP SP1 (делать это для работы, конечно, не стоит), включить режим PAE и своими глазами убедиться, что системе доступны четыре гигабайта ОЗУ.

В 2003 году «Майкрософт» начала разрабатывать второй пакет исправлений для Windows XP (вышедший в 2004 году), поскольку столкнулась с необходимостью существенно снизить число уязвимостей в компонентах ОС. Одним из путей было использование предотвращения выполнения данных (Data Execution Prevention, DEP) - набора программных и аппаратных технологий, позволяющих выполнять дополнительные проверки содержимого памяти и в ряде случаев предотвращать запуск вредоносного кода. Эти проверки выполняются как на программном уровне, так и на аппаратном (при наличии соответствующего процессора). AMD назвала эту функцию процессора «защита страниц от выполнения» (no-execute page-protection, NX), а Intel использовала термин «запрет на выполнение» (Execute Disable bit, XD).

Однако использование такой аппаратной защиты требует перевода процессора в режим PAE, поэтому Windows XP SP2 при обнаружении подходящего процессора стала включать этот режим по умолчанию. И вот тут «Майкрософт» столкнулась с довольно серьезной проблемой: оказалось, что не все драйверы могут работать в режиме PAE. Попробуем пояснить эту особенность, не слишком углубляясь в устройство процессоров и механизмы адресации.

В Windows используется так называемая плоская модель памяти. Тридцать два разряда адреса обеспечивают обращение к пространству размером четыре гигабайта. Таким образом, каждой ячейке ОЗУ или ячейке памяти другого устройства соответствует определенный адрес, и никаких двусмысленностей тут быть не может. Включенный режим PAE дает возможность использовать 36 разрядов адреса и увеличить количество ячеек памяти в 16 раз. Но ведь система команд процессора остается той же самой и может адресовать только 4 миллиарда (двоичных) байтов! И вот, чтобы обеспечить возможность доступа к любому из 64 миллиардов байтов, указав только 32 разряда адреса, в процессоре включается дополнительный этап трансляции адресов (те, кого интересуют подробности, могут обратиться к специальной литературе - например, книге Руссиновича и Соломона «Внутреннее устройство Windows»). В результате 32-разрядный адрес в программе может указывать на любой из байтов в 36-разрядном пространстве.

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

Однако поскольку исторически сложилось так, что до того времени в клиентских компьютерах PAE не использовался, некоторые компании не считали нужным поддерживать этот режим в написанных ими драйверах. Ведь оборудование, которое они выпускали (звуковые платы, к примеру), не предназначалось для серверов, и драйверы не имели серверной версии - так зачем без необходимости эти драйверы усложнять? Тем более, что для тестирования работы в режиме PAE раньше требовалось устанавливать серверную ОС и использовать серверное оборудование (системные платы для настольных компьютеров лишь относительно недавно стали поддерживать PAE). Так что разработчикам драйверов проще и выгоднее было просто забыть про этот PAE и обеспечить работоспособность на обычных клиентских компьютерах с обычными персональными, а не серверными ОС.

И вот с такими драйверами и возникли проблемы в XP SP2. Хотя количество фирм, драйверы которых переставали работать или даже вызывали крах системы, оказалось невелико, количество выпущенных этими фирмами устройств исчислялось миллионами. Соответственно, и количество пользователей, которые могли бы после установки SP2 получить неприятный сюрприз, оказывалось весьма значительным. В результате многие пользователи и сами отказались бы устанавливать этот пакет, и разнесли бы о нем дурную славу, что повлияло бы и на других пользователей. Они, хоть и без каких-либо веских причин, тоже отказались бы его устанавливать.

А необходимость повышения безопасности ХР компания «Майкрософт» ощущала очень остро. Впрочем, рассуждения на тему, почему мы увидели Windows XP SP2 и не увидели чего-то наподобие Windows XP Second Edition, выходят за рамки данной статьи.

Главное, что нас интересует, это то, что для обеспечения совместимости с плохо написанными драйверами функциональность PAE в SP2 для Windows XP была обрезана. И хотя сам этот режим существует и, более того, на компьютерах с современными процессорами включается по умолчанию, никакого расширения адресного пространства он не дает, просто передавая на выход те же адреса, которые были поданы на вход. Фактически система ведет себя как обычная 32-разрядная без PAE.

То же самое поведение было унаследовано Windows Vista, а затем перешло к Windows 7 и будущей Windows 8. Конечно, 32-разрядным. Причина, по которой это поведение не изменилось, осталась той же самой: обеспечение совместимости. Тем более что необходимость выгадывать доли гигабайта отпала: те, кому нужны большие объемы памяти, могут использовать 64-разрядные версии ОС.

Иногда можно услышать вопрос: если именно этот обрезанный режим PAE мешает системе видеть все четыре гигабайта - так, может, отключить его вовсе, чтобы не мешал, и, вуаля, системе станут доступны 4 ГБ? Увы, не станут: для этого требуется как раз наличие PAE, притом полноценного. Другой не так уж редко задаваемый вопрос звучит так: если устройства действительно мешают системе использовать всю память и резервируют ее часть под свои нужды, то почему же они ничего не резервировали, когда в компьютере стояло два гигабайта ОЗУ?

Вернемся к первому рисунку и рассмотрим ситуацию подробнее. Прежде всего отметим, что нужно четко различать два понятия: размер адресного пространства и объем ОЗУ. Смешение их воедино препятствует пониманию сути вопроса. Адресное пространство - это набор всех существующих (к которым может обратиться процессор и другие устройства) адресов. Для процессоров семейства i386 это 4 гигабайта в обычном режиме и 64 ГБ с использованием PAE. У 64-разрядных систем размер адресного пространства составляет 2 ТБ.

Размер адресного пространства никак не зависит от объема ОЗУ. Даже если вытащить из компьютера всю оперативную память, размер адресного пространства не изменится ни на йоту.

Адресное пространство может быть реальным, в котором работает сама операционная система, и виртуальным, которое ОС создает для работающих в ней программ. Но особенности использования памяти в Windows будут описаны в другой статье. Здесь же отметим только, что к реальному адресному пространству программы доступа не имеют - по реальным адресам могут обращаться только сама операционная система и драйверы.

Рассмотрим, как же в компьютере используется адресное пространство. Сразу подчеркнем, что его распределение выполняется оборудованием компьютера («железом») и операционная система в общем случае не может на это повлиять. Есть только один способ: изменить настройки оборудования с помощью технологии Plug&Play. О ней много говорили в середине 90-х годов прошлого века, но теперь она воспринимается как что-то само собой разумеющееся, и всё увеличивается число людей, которые о ней даже не слышали.

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

Базовая программа в системной плате, часто обобщенно называемая BIOS (хотя на самом деле BIOS (базовой системой ввода-вывода) она не является) при включении компьютера опрашивает устройства. Она определяет, какие диапазоны адресов каждое устройство может использовать, потом старается распределить память так, чтобы ни одно устройство не мешало другому, а затем сообщает устройствам свое решение. Устройства настраивают свои параметры согласно этим указаниям, и можно начинать загрузку ОС.

Раз уж об этом зашла речь, заметим, что в ряде системных плат есть настройка под названием «P&P OS». Если эта настройка выключена (No), то системная плата выполняет распределение адресов для всех устройств. Если включена (Yes), то распределение памяти выполняется только для устройств, необходимых для загрузки, а настройкой остальных устройств будет заниматься операционная система. В случае Windows XP и более новых ОС этого семейства данную настройку рекомендуется включать, поскольку в большинстве случаев Windows выполнит требуемую настройку по крайней мере не хуже, чем BIOS.

Поскольку при таком самоконфигурировании распределяются адреса памяти, не имеет никакого значения, сколько ОЗУ установлено в компьютере - процесс все равно будет протекать одинаково.

Когда в компьютер вставлено некоторое количество ОЗУ, то адресное пространство для него выделяется снизу вверх, начиная с нулевого адреса и дальше в сторону увеличения адресов. Адреса устройств, наоборот, выделяются в верхней области (в четвертом гигабайте) в сторону уменьшения адресов, но не обязательно смежными блоками - чаще, наоборот, несмежными. Как только зоны адресов, выделяемых для ОЗУ (с одной стороны) и для устройств (с другой стороны), соприкоснутся, становится возможным конфликт адресов, и объем используемого ОЗУ приходится ограничивать.

Поскольку изменение адреса при настройке устройств выполняется с некоторым шагом, определяемым характеристиками устройства, заданными изготовителем, то сплошной участок адресов для устройств получить невозможно - между адресами отдельных устройств появляются неиспользуемые промежутки. Теоретически эти промежутки можно было бы использовать для обращения к оперативной памяти, но это усложнило бы работу диспетчера памяти операционной системы. По этой и по другим причинам Windows использует ОЗУ до первого адреса памяти, занятого устройством. ОЗУ, находящееся от этого адреса и выше, останется неиспользуемым. Если, конечно, контроллер памяти не организует переадресацию.

Иногда задают вопрос: а можно ли повлиять на распределение адресов, чтобы сдвинуть все устройства в адресном пространстве как можно выше и сделать как можно больше памяти доступной системе. В общем случае без вмешательства в конструкцию или микропрограммы самих устройств это сделать невозможно. Если же руки все-таки чешутся, а времени не жалко, можно попробовать следующий метод: в BIOS Setup включить настройку «PnP OS» (она может или вовсе отсутствовать или называться по-другому), чтобы адреса для большинства устройств распределяла Windows, а затем переустанавливать драйверы, используя отредактированные файлы inf с удаленными областями памяти, которые, на ваш взгляд, расположены слишком низко.

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

Может возникнуть также вопрос: а что будет, если установить видеоадаптер с четырьмя гигабайтами памяти. Ведь тогда получается, что система останется совсем без ОЗУ и работать не сможет. На самом деле ничего страшного не произойдет: видеоадаптеры уже довольно давно используют участок адресного пространства размером 256 МБ, и доступ ко всему объему памяти видеоускорителя осуществляется через окно такого размера. Так что больше 256 мегабайт видеоадаптер не отнимет. Возможно, в каких-то моделях размер этого окна увеличен вдвое или даже вчетверо, но автору в руки они пока не попадали.

64 разряда

Итак, с 32-разрядными системами мы разобрались. Теперь перейдем к 64-разрядным.

Вот уж тут-то, казалось бы, никаких подводных камней быть не должно. Система может использовать куда больше четырех гигабайт, так что, на первый взгляд, достаточно воткнуть в системную плату память и установить систему. Но оказывается, не все так просто. Прежде всего, отметим, что специального оборудования, предназначенного только для 64-разрядных систем, найти не удастся (мы говорим об обычных ПК). Любая системная плата, сетевая плата, видеоадаптер и пр., работающие в 64-разрядной системе, должны с одинаковым успехом работать в 32-разрядной.

А это означает, что адреса устройств должны оставаться в пределах первых четырех гигабайт. И значит, все ограничения, накладываемые на объем памяти, доступный 32-разрядной системе, оказываются применимыми и к 64-разрядной - конечно, в том случае, если системная плата не поддерживает переадресацию или если эта переадресация отключена в настройках.

Не поддерживают переадресацию системные платы на наборах микросхем Intel до 945 включительно. Новыми их, конечно, не назовешь, но компьютеры на их базе еще существуют и используются. Так вот, на таких платах и 64-разрядная, и 32-разрядная системы смогут увидеть одинаковое количество памяти, и оно будет меньше 4 ГБ. Почему меньше - описано выше.

С 64-разрядными процессорами AMD дело обстоит проще: у них контроллер памяти уже довольно давно встроен в процессор, и переадресация отсутствует только в устаревших моделях. Все процессоры для 939-контактного гнезда и более новые поддерживают больше 4 ГБ и, соответственно, умеют выполнять переадресацию памяти. То же самое относится к процессорам Intel семейств Core i3, i5, i7.

Впрочем, и тут может быть загвоздка: если на системной плате не выполнена разводка дополнительных адресных линий, то не будет и возможности обратиться к переадресованной памяти. А некоторые младшие модели системных плат для удешевления выпускают именно такими, так что необходимо смотреть описание конкретной системной платы.

И здесь нас поджидает сюрприз, подобный тому, с которым мы сталкиваемся в 32-разрядной системе: использование адресного пространства для работы устройств может ограничить объем памяти, доступный Windows.

Например, если системная плата поддерживает до 8 ГБ ОЗУ (скажем, использующая набор микросхем G35), и установить все эти 8 ГБ, то использоваться будут только ≈7-7,25 ГБ. Причина заключается в следующем: на такой системной плате разведены 33 линии адреса, что, с точки зрения изготовителя, вполне логично - зачем усложнять конструкцию, если больше 8 ГБ плата все равно не поддерживает? Поэтому даже если контроллер памяти сможет перекинуть неиспользуемый участок ОЗУ в девятый гигабайт, обратиться к нему все равно будет невозможно. Для этого потребуется 34-разрядный адрес, который физически нельзя сформировать на 33-разрядной системной шине. Точно так же на платах, поддерживающих 16 ГБ, Windows сможет использовать ≈15-15,25 ГБ и так далее.

С переадресацией связан еще один малоизвестный нюанс. Ограничение размера памяти, выполняемое в программе msconfig (или соответствующими настройками конфигурации загрузки) относится не к собственно величине памяти, а к верхней границе адресов используемой памяти.

Рис. 3. Эта настройка ограничивает верхнюю границу адресов, а не размер памяти

То есть если задать эту величину равной 4096 МБ, то память, расположенная выше этой границы (переадресованная в пятый гигабайт, например), использоваться не будет, и фактически объем памяти будет ограничен примерно тремя гигабайтами. Эту особенность в некоторых случаях удается использовать для диагностики того, работает переадресация или нет. Например, автору встретился случай, когда на ноутбуке Windows использовала 3,75 ГБ из четырех, и было неясно: то ли не работает переадресация, то ли память используется на какие-то нужды. Установка флажка и ограничение размера памяти четырьмя гигабайтами привели к тому, что стали использоваться только 3,25 ГБ. Из этого можно сделать вывод, что переадресация работала, а четверть гигабайта, следовательно, использовалась для видеоадаптера или каких-то других целей.

Ну и напоследок стоит сказать о том, что даже при работающей переадресации и 64-разрядной системе несколько десятков или даже сотен мегабайт памяти все равно могут оказаться зарезервированными для оборудования. Причины такого резервирования лучше всего выяснить у изготовителя системной платы, но чаще всего можно предположить, что она используется для встроенных видеоадаптера или контроллера RAID.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: