32 битная система сколько оперативной памяти видит

Обновлено: 04.07.2024

Секреты большой памяти в 32-битных операционных системах

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

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

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

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

3 ГБ может показаться странным. Однако, как вскоре станет понятно, ничего странного в этом нет, а Microsoft слегка вводит народ в заблуждение.

Максимальный размер оперативной памяти, который поддерживают 32-разрядные системы

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

Главное, что надо сделать в самом начале, это четко разделить между собой три понятия:

  1. Свойства процессора;
  2. 32-битная операционная система;
  3. 32-разрядное приложение (программа)

Последние два очень часто смешивают в одну кучу, чего в данном случае, делать как раз не следует. Начнем по порядку и издалека – совершим короткий исторический экскурс.

Процессор

Обратимся к таблице основных характеристик процессоров (чуть было не написал х86, что было бы ошибкой – эта система команд впервые появилась у процессора 8086) >

cpu-71-03

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

Для начала обратим внимание на 16-разрядные процессоры. Если бы они имели 16-разрядную адресную шину, то максимальный размер доступной им физической памяти составлял бы всего 64 КБ (2 в 16-й степени равно 65536). Однако уже Intel 8086 мог работать с памятью до 1 МБ, а 80286 уже до 16 МБ благодаря 20 и, соответственно, 24 битам шины адреса.

Эпоха процессоров IA-32 и 4 ГБ ОЗУ началась с Intel 80386 в 1985 году. На протяжении последующих 10 лет процессоры архитектуры IA-32 не имели физической возможности работать с памятью более 4 ГБ.

В 1995 году был представлен процессор Intel Pentium Pro. Наряду с совершенно новой архитектурой ядра этот процессор получил 36-битную адресную шину благодаря чему, как не трудно подсчитать, максимальный размер доступной ему физической памяти увеличился до 64 ГБ (в современных 64-разрядных процессорах используются 37 разрядов, что увеличивает предел адресуемой физической памяти до 128 ГБ).

Pentium Pro позиционировался в то время как процессор для серверов и рабочих станций. Действительно, представить себе в 1995 году настольный компьютер с объемом оперативной памяти не то что больше, а хотя бы отдаленно приближающимся к 4 ГБ, было не просто. Память измерялась тогда мегабайтами. И в наше то время 4 ГБ памяти в настольном компьютере или ноутбуке нужны далеко не всем. Кроме того, этот процессор был очень дорогим и имел проблемы с быстродействием при выполнении популярных в то время 16-разрядных приложений.

Можно сказать, что такое решение было новым для 32-разрядных процессоров, однако, в силу того, что ранее подобная практика повсеместно применялась в 16-разрядных процессорах, революционной ее назвать сложно.

Коль уж заговорили о процессорах, то отметим, что первый 64-разрядный процессор х86 появился не у Intel, а у ее главного конкурента – компании AMD в 2003 году. К этому моменту у Intel уже был, выпущенный в 2001 году, 64-разрядный процессор Itanium совершенно новой архитектуры IA-64, не совместимой с х86. В том числе по причине последнего, процессор не получил распространения на настольных компьютерах. В 2003 году специально для Itanium была выпущена единственная версия Windows XP 64-Bit Edition Version 2003 (Itanium 2). Проект был прекращен в 2005 году за ненадобностью.

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

Проще всего определить поддержку режима PAE процессором оказалось в Linux. В Ubuntu, или в любом из ее многочисленных клонов, можно набрать в терминале:

В результате должно получиться что-то вроде этого >

mint-pae-check

32-разрядные операционные системы

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

Если у Вас 32-разрядный Linux, то проблем с использованием памяти объемом более 4 ГБ, скорее всего, не возникнет. В операционных системах Linux поддержка PAE появилась в 1999 году в ядре 2.3.23 и используется с тех пор безо всяких ограничений.

Можно отметить, что, например, популярный Linux Mint вообще поставляется сегодня исключительно с ядром PAE и требует его обязательной поддержки процессором. Кстати, как в Windows 8. Не все этому обстоятельству рады, так как очевидно все еще сохранились процессоры без поддержки PAE.

windows-2000-2003-pae

Как видно из этой таблицы, режим PAE поддерживается во всех версиях ОС Microsoft начиная с Windows 2000. Вариации размеров максимальной памяти в различных версиях серверных операционных систем объясняются исключительно их позиционированием на рынке компанией Microsoft. Наверное, так проще объяснить их отличающуюся друг от друга стоимость. Для нас особый интерес представляют строки таблицы, которые прямо говорит о том, что во всех версиях Windows XP общее адресное пространство физической памяти ограничено на уровне 4 ГБ. Именно искусственно ограничено в ядре, так как поддержка PAE есть. С чем связано такое ограничение, причем не только в ХР, но и во всех последующих настольных 32-разрядных версиях Windows, разберемся во второй части.

DEP – это технология, которая позволяет защитить операционную систему от большого класса вредоносного кода, который изначально внедряется в область памяти, отведенную под данные и маскируется под данные, а затем пытается из нее запуститься. Технология DEP такое выполнение вредоносного кода блокирует. Реализуется технология как программно, так и аппаратно. В последнем случае процессор помечает отдельные страницы памяти как не содержащие исполняемого кода измененным старшим битом в адресной таблице PTE (Page Table Entry) виртуальной памяти, а затем перехватывает и предотвращает запуск исполняемого кода с этих страниц.

Переходим к нашему последнему сегодняшнему пункту.

32-разрядные приложения

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

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

На этом пока остановимся и подведем итоги:

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

Сразу оговорюсь, «преодолевал» в названии отражает только тот факт, что теперь моя XP видит всю память, установленную на системной плате. Не я придумал способ, я просто им воспользовался и теперь хочу поделиться.
Вопрос о четырёх гигабайтах памяти в Windows XP (здесь, и далее 32 бит) поднимался на просторах Интернет неоднократно. И так же неоднократно делался вывод, что более четырёх увидеть в принципе невозможно, а так как оборудование тоже требует адресного пространства, то и того меньше. Обычно 3.25 Гб, или около того. Очень подробно и убедительно история вопроса освещена здесь: Четыре гигабайта памяти — недостижимая цель?

Меня этот вопрос тоже волновал. Хотя, казалось бы, можно поставить 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.

  • ntoskrnl.exe — однопроцессорное ядро Windows.
  • ntkrnlmp.exe— многопроцессорное ядро Windows.
  • ntkrnlpa.exe — однопроцессорное ядро Windows с более чем 3 ГБ оперативной памяти.
  • ntkrpamp.exe — многопроцессорное ядро Windows с более чем 3 ГБ оперативной памяти.
  • BB 00 00 10 00 33 FF 6A 07 8B F0 и заменить её на
  • BB 00 00 40 00 33 FF 6A 07 8B F0

Теперь осталось отредактировать 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 лет в системе накопилось много всего, но какой? Пробую запуститься в безопасном режиме, и УРА! Вот они, мои гигабайты:


Физические ограничения на объем памяти для 32-битных платформ также зависят от поддержки технологии Physical Address Extension (PAE), которая позволяет 32-битным версиям Windows использовать более 4 ГБ физической памяти.

Максимальные объемы памяти и адресного пространства

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

  • x64 – 8 ТБ;
  • ОС на базе Intel Itanium – 7 ТБ;
  • Windows 8.1 и Windows Server 2012 R2 – 128 TB.

Windows 8.1 и Windows Server 2012 R2 – 15,5 ТБ или назначенный лимит системы, который в любом случае меньше.

Windows Server 2008 R2, Windows 7, Windows Server 2008 и Windows Vista – лимитируется объемом доступного виртуального адресного пространства для системных приложений. Начиная с Windows Vista с пакетом Service Pack 1 (SP1), объем выгружаемого стека также может лимитироваться значением ключа реестра PagedPoolLimit.

Windows Home Server и Windows Server 2003 – 530 МБ.

Windows 8.1 и Windows Server 2012 R2 – 15,5 ТБ или назначенный лимит системы, который в любом случае меньше.

Windows Server 2008 R2, Windows 7, Windows Server 2008 и Windows Vista – 128 ГБ или назначенный лимит системы, который в любом случае меньше.

Windows 8.1 и Windows Server 2012 R2 – объем RAM или 16 ТБ (заведомо меньше); объем адресного пространства лимитирован двойным объемом RAM.

Windows Vista – лимитируется только объемами виртуального адресного пространства для системных приложений и физической памяти. Начиная с Windows Vista с пакетом SP1, объем невыгружаемого стека также может лимитироваться значением ключа реестра NonPagedPoolLimit.

Windows 8.1 и Windows Server 2012 R2 – объем RAM или 16 ТБ (заведомо меньше); объем адресного пространства лимитирован двойным объемом RAM.

Windows Server 2008 R2, Windows 7 и Windows Server 2008 – 75% RAM (не более 128 ГБ).

Windows Vista – 40% RAM (не более 128 ГБ).

Windows 8.1 и Windows Server 2012 R2 – 16 ТБ.

Windows Vista – лимитируется только доступным объемом виртуального адресного пространства для системных приложений. Начиная с Windows Vista с пакетом SP1, объем виртуального адресного пространства системного кэша может также лимитироваться значением ключа реестра SystemCacheLimit.

Windows 8.1 и Windows Server 2012 R2 – 16 ТБ.

Максимальные объемы оперативной памяти для версий ОС Windows

Влияние ограничений памяти на использование видеокарт и других устройств

Для обеспечения совместимости устройств с версиями Windows, не оснащенными PAE, используемая память устройств не должна превышать 4 ГБ. То есть, если система имеет 4 ГБ RAM, избыточная память некоторых устройств или не будет использоваться, или будет переформатирована BIOS’ом. С переформатированной памятью устройств могут работать 64-битные версии Windows. 32-битные пользовательские версии Windows не поддерживают физическую память свыше 4 ГБ, поэтому они не могут обращаться к переформатированным разделам, в отличие от 32-битных серверных версий или любых 64-битных версий.

Сначала немного теории.
Простейший элемент информации – бит. Он является минимальной единицей информации и может принимать значение 0 или 1. За ним идет байт, он состоит из 8 бит. Так как бит может принимать 2 значения, то всего получается 2 8 =256 значений байта.

32 битные ОС для адресации памяти используют 2 32 бит, что составляет 4294967296 бит или 4 Гигабайт (Гб). Это значит, что максимальный объем памяти, к которому может обращаться 32 битная операционная система, составляет 4 Гб. Однако даже этот объем использовать в полной мере нам не удасться, поскольку компоненты операционной системы и устройства требуют выделенного адресного пространства в пределах первых 32 бит (4 Гбайт) оперативной памяти. Например, видеокарта с 512 Мбайт памяти потребует синхронизации этой памяти с оперативной, что снизит доступную ёмкость на 512 Мбайт.

Таким образом, общий объем памяти, доступной в 32 – битной ОС Windows обычно составляет 3.25-3.75 Гб в зависимости от используемого железа.

Некоторые версии Windows поддерживают функцию под названием Physical Address Extension (PAE), позволяющую использовать больше 4 Гбайт памяти благодаря специальной технологии переадресации. Данная технология позволяет процессору работать не с 32-битной, а с 36-битной адресацией, теоретически расширяя доступные ему адреса до 2 36 = 68719476736 байт (64 Гб). При этом само адресное пространство остается 32-битным, то есть равным 4 Гб, но за счет измененного отображения на него физической памяти становится возможным использование большего ее объема.

Согласно официальной информации Microsoft, режим PAE можно использовать в следующих 32-битных операционных системах :

  • Microsoft Windows Server 2000 Enterprise/Datacenter Edition
  • Microsoft Windows Server 2003 Enterprise/Datacenter Edition
  • Microsoft Windows Server 2008 Enterprise/Datacenter Edition

В Server 2008 PAE включен по умолчанию, если на сервере на хардварном уровне включена технология DEP (Data Execution Prevention), либо сервер имеет возможность горячего добавления памяти (hot-add memory). В противном случае PAE необходимо включить принудительно с помощью BCDEdit, следующей командой:

BCDEdit /set [] pae ForceEnabled

Чтобы включить PAE в Server 2000\2003, необходимо указать в файле Boot.ini ключ /PAE. Вот пример файла Boot.ini, содержащего ключ PAE:

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS=″Windows Server 2003, Enterprise″ /fastdetect /PAE

Стоит заметить, что возможность использовать режим PAE для клиентских ОС была реализована во втором сервис-паке к Windows XP. Однако в процессе тестирования выяснилось, что при использовании этого режима происходит большое количество сбоев. Дело в том, что драйверы некоторых устройств, в основном таких как аудио- и видео, жестко запрограммированы на работу с адресами памяти в пределах 4ГБ. Они обрезают все адреса выше этого объема, что приводит к повреждению содержимого памяти со всеми сопутствующими последствиями. Поскольку, как правило, сервера не используют подобные устройства, то с серверными системами подобных проблем не возникало.

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

И еще, уточнить информацию о поддержке памяти различными версиями Windows можно здесь: Memory Limits for Windows and Windows Server Releases.

Читайте также: