Содержание
Миф о 4 ГБ памяти
Источник: https://brj.pp.ru/baza/2007/win/x86-4gb-ram
Данная статья написана по итогам постоянных объяснений особенностей x32 и x64 систем и объяснение несостоятельности большинства мифов, распространенных последнее время. Причем под воздействие многих мифов попадают не только пользователи, но и специалисты IT отделов. Данная статья адресована широкому кругу читателей и построена по принципу утверждение мифа, объяснение откуда миф взялся и опровержение мифа.
Миф 1
Объем адресуемой памяти зависит от разрядности шины процессора. Данный миф пришел из x86 систем на основании того, что Windows 2000/XP/Vista x32 не адресовали более 4GB в режиме по умолчанию.
Это один из самых распространенных мифов, которые я когда либо слышал. В этот миф свято верят и пользователи, и многие специалисты IT. На самом деле связь между разрядностью (сейчас многие под разрядностью процессора понимают разрядность основных регистров) и адресацией существует, но это не сильная связь. При проектировании механизма адресации разработчики процессора могут использовать решение в лоб – реализовать непосредственную адресацию – а могут пойти по пути создания сложного алгоритма расчета физических адресов (косвенная адресация, индексная адресация, базово-индексная адресация и т.д.). Наиболее известные процессоры (вся линейка x80 совместимых процессоров, вся линейка x86 совместимых процессоров, процессоры архитектуры SPARC, вся линейка PowerPC процессоров и их наследников и т.д.) используют сложные алгоритмы расчета физических адресов. Intel x80 является 8битным процессором и может официально адресовать до 64KB (16битная адресация), а используя возможности I/O memory mapping, мог адресовать до 1MB. Intel x86 является 16битным процессором и может адресовать до 1MB (20битная адресация), i286 является 16битным процессором и может адресовать в защищенном режиме до 16MB (24битная адресация). Процессоры SPARCv9 являются 64битными, но используются 44битные виртуальные адреса.
Миф 2
x32 разрядные процессоры физически могут адресовать не более 4GB. Данный миф пришел из x86 систем на основании того, что Windows 2000/XP/Vista x32 не адресовали более 4GB в режиме по умолчанию. Кроме распространенного x86 в мире используется большое кол-во других 32-х разрядных исполнительных устройств общего назначения, в которых реализованы разные способы адресации. Если же говорить об архитектуре IA32, то процессор i386 поддерживает несколько режимов адресации:
1 реальный режим (real mode) или режим совместимости с x86 – адресация до 1MB 2 защищенный режим (protected mode) 2.1 виртуальный режим (VM mode) – адресация до 1MB на каждую задачу 2.2 страничный режим (paging mode) 2.2.1 с использованием расширения адресов (PAE mode) – адресация до 64GB, появилась c P6 2.2.2 без использования расширения адресов (paging mode) – адресация до 4GB 2.3 сегментный режим (segment mode) – адресация до 64TB на каждую задачу
Миф 3
x32 ОС могут адресовать не более 4GB. Данный миф пришел из x86 систем на основании того, что Windows 2000/XP/Vista x32 не адресовали более 4GB в режиме по умолчанию.
Возможности адресации ОС во многом зависят от способа адресации, принятой на исполняемой аппаратной платформе. Плюс разработчики ОС для упрощения могут пойти на сознательное уменьшение адресного пространства. Поэтому 32разрядные ОС могут адресовать как более, так и менее 4GB. Если же говорить x86 платформе, то наиболее удобным для многозадачных ОС общего назначения является использование 2 вариаций защищенного режима: виртуального режима и страничного режима. Использование сегментного режима для ОС общего назначения является очень затратным и неэффективным, но может быть удобным для специализированных задач. Все распространенные ОС общего назначения для x86 режима используют страничную адресацию, а для поддержки приложений для DOS – виртуальный режим. На основании описания к мифу 2 можно сделать вывод, что для адресации больше чем 4GB для распространенных ОС для x86 достаточно активировать режим PAE.
Миф 4
В Windows 2000/XP/Vista x32 нужно обязательно прописать включение PAE, потому что в Microsoft это забыли сделать (сделали специально, чтобы покупали x64 ОС или любые другие домыслы). Данный миф основывается на отсутствии знаний по адресации в процессорах i386 и Pentium Pro.
При страничном режиме адресации доступ к данным осуществляется через обращение к страницам. При этом следует иметь в виду, что страницы имеют равный объем. Для процессоров i386 есть 2 варианта страниц: 4KB и 4MB.
- Режим с размером страниц 4KB позволяет очень аккуратно использовать память процесса, но имеет недостаток: двухуровневая система страничной трансляции.
- Режим с размером страниц 4MB называют расширением размера страниц (PSE). Данный режим очень затратный по памяти, но имеет преимущество: одноуровневая система страничной трансляции.
С появлением P6 появился еще один режим – PAE. Данный режим вводит страницы объемом 2MB с двухуровневой системой страничной трансляции.
На основании данных описаний уже можно сделать вывод, что для систем с ОЗУ менее 3GB нужно использовать наиболее распространенный («стандартный») режим страничной адресации с размером страниц 4KB. Для систем с ОЗУ от 3GB до 4GB можно использовать как режим PAE, так и «стандартный» режим, причем «стандартный» режим предпочтительнее из-за меньшего использования ОЗУ процессами. При желании получить доступ за пределами 4GB необходимо использовать только режим PAE. При включении режима PAE следует учитывать возможности ОС: если ОС поддерживает PAE, но при этом адресует не более 4GB, то использование PAE лишено смысла. Т.е. на WindowsXP SP2 x32, Vindows Vista x32 включение PAE приведет лишь к расточительному использованию памяти процессами без каких либо положительных последствий.
Миф 5
В Windows 2000/XP/Vista x32 процесс не может адресовать более 2GB. Данный миф основывается на описании адресации процессов Windows 9x/Me/NT.
В Windows 2000 и более поздних для исполняемого процесса есть 2 способа получения памяти более 2GB: использование режима /3GB в загрузчике и AWE. Остановимся на каждом способе немного подробнее:
- При указании режима /3GB Windows будет проецировать системные библиотеки за границей 3GB виртуального адресного пространства процесса. Таким образом появляется возможность использовать более 2GB для процесса. Данный способ не требует изменения в бинарном коде программы и требует установки бита 3GB в PE заголовке и активизации режима /3GB в загрузчике Windows (через файл boot.ini). При этом следует учесть, что количество выделяемых виртуальных блоков для процесса остается неизменным, так что не следует удивляться сообщению out of memory при использовании даже менее 2GB памяти
- AWE API является возможностью оперировать памятью за пределами 2GB, используя «оконный» механизм доступа к памяти. Данный способ требует изменения программы разработчиком.
Обсуждение