32 разрядная система оперативная память максимум



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

Здравствуйте уважаемые читатели блога www.ithabits.ru. Должен сразу признаться, что не смотря на то, что я много лет профессионально занимаюсь различными аспектами ИТ, до недавнего времени такой вопрос, как максимальный размер оперативной памяти в клиентских компьютерах с 32-разрядными операционными системами, меня совершенно не интересовал.

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

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

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

Впервые я реально столкнулся с проблемой большой памяти когда ко мне в руки попал ноутбук с 4 ГБ оперативки и Windows 7 Professional x86. Захотелось выяснить что к чему. А именно, — куда “исчезла” часть установленной памяти и нельзя ли ее как-нибудь вернуть? Ведь объем доступной физической памяти самым непосредственным образом влияет на быстродействие системы.

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

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

Сегодняшняя статья является первой, и ее название «Секреты большой памяти в 32-битных операционных системах» можно смело отнести ко всему циклу. Я очень советую ознакомиться с этим циклом не только тем, кто работает с 32-разрядными операционными системами, но и тем, кто уже перешел на 64-разрядные ОС. Поверьте, вы значительно лучше начнете понимать свой компьютер.

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

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

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

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

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

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

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

Процессор

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

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

Для начала обратим внимание на 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 ГБ).

Кроме того, в процессоре был реализован «хитрый» механизм управления памятью, который отображал физическую память, расположенную за пределами 4 ГБ, в 32-разрядную виртуальную память в диапазоне 0 — 4 ГБ «обманывая» таким образом 32-разрядные приложения. Такой режим управления памятью процессором х86 получил название PAE (Physical Address Extension — расширение физических адресов).

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, или в любом из ее многочисленных клонов, можно набрать в терминале:

grep —color=always -i PAE /proc/cpuinfo

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

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

Первой в ряду 32-разрядных ОС Microsoft стала Windows NT 3.1, выпущенная в 1993 году. Она предназначалась для корпоративного сектора, то есть для серверов и рабочих станций. Двумя годами позже в 1995 году появилась Windows 95 — операционная система для настольных компьютеров и ноутбуков. Между двумя этими событиями в 1994 году была представлена версия 1.0 ядра Linux. 32-разрядная архитектура оказалась столь удачной и «достаточной», что она повсеместно используется до сих пор на протяжении вот уже 2-х десятилетий. Последней 32-битной серверной операционной системой Microsoft стала Windows Server 2008. Однако, новейшая Windows 8 по-прежнему предлагается в двух вариантах. Споры о том, что лучше – 32 или 64 не прекращаются и сегодня.

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

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

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

Посмотрим таблицу максимально поддерживаемых размеров физической памяти, взятую из статьи 2005 года в msdn.microsoft.com, для Windows 2000, Windows XP и Windows Server 2003 >

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

Режим PAE может быть включен, может быть выключен. Начиная с Windows XP SP2 PAE включается принудительно для обеспечения работы технологии безопасности DEP (Data Execution Prevention — предотвращение выполнения данных).

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

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

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

Благодаря диспетчеру памяти процессора, осуществляющему ее распределение в режиме PAE независимо от работы приложений, и поддержке такого режима работы операционной системой, 32-разрядные приложения отделены от физической памяти и не имеют сведений о ее реальном размере. Каждому приложению, так как для них сохраняется 32-битное адресное пространство, по-прежнему доступны только 4 ГБ виртуальной памяти. В Windows под нужды самого приложения из этих 4 ГБ отдается ровно половина, в Linuх — 3 ГБ. В Windows существует возможность принудительно отдать приложению 3 ГБ, но, в большинстве случаев, это является нецелесообразным.

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

Например, требуется одновременная работа двух виртуальных машин, каждой из которых отведено по 2 ГБ памяти. Что будет без PAE понятно — вторая виртуальная машина, скорее всего, просто не запустится, ну или в системе начнется такой интенсивный обмен со swap-файлом, что процесс перейдет в категорию «пошаговая стратегия» (забегая в перед скажу, что в реальном эксперименте с виртуальными машинами, о котором можно прочитать в заключительной части, swap не помог). С включенным PAE, при условии достаточного объема физического ОЗУ хостовой машины, обе виртуальные машины будут благополучно работать. На самом деле все несколько сложнее, но, в общих чертах, так.

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

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

  • Практически все современные 32-битные операционные системы умеют работать с оперативной памятью размером более 4 ГБ. Такая возможность появилась в 1995 году благодаря внедрению в процессоры технологии PAE (Physical Address Extension — расширение физических адресов);
  • Не смотря на то, что поддержка PAE позволяет задействовать физическую память объемом до 64 (128) ГБ, работа ядра операционной системы в таком режиме совершенно не эквивалентна переходу на 64-битную ОС. Приложения продолжают выполняться в обычном для них 32-разрядном адресном пространстве, но при этом, если установленная физическая память превышает 4 ГБ, самих приложений может быть одновременно запущено больше;
  • В режиме PAE может наблюдаться снижение скорости доступа к памяти и проблемы с драйверами устройств;
  • В операционных системах Microsoft Windows верхний предел доступной физической памяти ограничен программно на уровне ядра ОС.

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

Сколько оперативной памяти поддерживает Windows 7,8, 10 и XP?

Не все знают, что операционные системы Windows от компании Microsoft поддерживают только определенный объем оперативной памяти. Поэтому если вы используете, к примеру, Windows XP 32 bit, то даже при наличии 16 Гб оперативной памяти система будет поддерживать не более 4 Гб из них, а на деле еще меньше. Связано это с внутренними архитектурными ограничениями.

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

Windows XP

  • Windows XP x86 (32 bit): 4 гб
  • Windows XP x64 (64 bit): 128 Гб

Windows 7

  • Windows 7 Starter x86 (32 bit): 2 Гб
  • Windows 7 Home Basic x86 (32 bit): 4 Гб
  • Windows 7 Home Premium x86 (32 bit): 4 Гб
  • Windows 7 Professional x86 (32 bit): 4 Гб
  • Windows 7 Enterprise x86 (32 bit): 4 Гб
  • Windows 7 Ultimate x86 (32 bit): 4 Гб
  • Windows 7 Home Basic x64 (64 bit): 8 Гб
  • Windows 7 Home Premium x64 (64 bit): 16 Гб
  • Windows 7 Professional x64 (64 bit): 192 Гб
  • Windows 7 Enterprise x64 (64 bit): 192 Гб
  • Windows 7 Ultimate x64 (64 bit): 192 Гб

Windows 8

  • Windows 8 x86 (32 bit): 4 Гб
  • Windows 8 Professional x86 (32 bit): 4 Гб
  • Windows 8 Enterprise x86 (32 bit): 4 Гб
  • Windows 8 x64 (64 bit): 128 Гб
  • Windows 8 Professional x64 (64 bit): 512 Гб
  • Windows 8 Enterprise x64 (64 bit): 512 Гб

Windows 10

  • Windows 10 Home x86 (32 bit): 4 Гб
  • Windows 10 Home x64 (64 bit): 128 Гб
  • Windows 10 Pro x86 (32 bit): 4 Гб
  • Windows 10 Pro x64 (64 bit): 512 Гб

Как видите, 64-битная редакция поддерживает практически невероятный объем оперативной памяти, которого с лихвой хватит для домашнего пользования. А вот в случае с 32-битной версией нужно быть внимательным: зачастую система не поддерживает даже указанные 4 Гб, оставляя пользователю от 2,8 Гб до 3,5 Гб памяти.

32 разрядная система оперативная память максимум

При добавлении в компьютер памяти часто возникает проблема — услановлено 4Гб памати, а системе доступно только 3Гб.

Эта проблема связана с особенностями адресации памяти 32-разрядными операционными системами. Если вкратце — проблема берет свои корни из древности, когда объем памяти в несколько гигабайт был чем-то запредельным. Дальше все шло по накатанной, пока технологии не добрались до тех самых пресловутых 4Gb.

Если в вашем компьютере есть аппаратная поддержка PAE — то проблема решаема.

Physical Address Extension (PAE) — режим работы встроенного блока управления памятью x86-совместимых процессоров, в котором используются 64-битные элементы таблиц страниц (из которых для адресации используются только 36 бит), c помощью которых процессор может адресовать 64 ГБ физической памяти (вместо 4 ГБ, адресуемых при использовании 32-разрядных таблиц), хотя каждая задача (программа) всё равно может адресовать максимум 4 ГБ виртуальной памяти. Также, в новых моделях процессоров в PAE-режиме старший бит элемента таблицы страниц отвечает за запрет исполнения кода в странице, что затрудняет атаку по методу переполнения буфера.

Впервые расширение появилось в процессоре Pentium Pro. Для использования 36-разрядной адресации памяти необходима поддержка расширения физических адресов на аппаратном уровне (можно определить по команде CPUID) и программное включение режима PAE в ОС.

Итак, при установке 4Гб RAM в компьютеры, получим следующие варианты использования памяти:

  • Для 64-х битных ОС будет доступна вся установленная оперативка.
  • Для 32-х битных ОС с поддержкой PAE так же будет доступна вся память.
  • Для 32-х битных ОС без поддержки PAE (у которых доступное адресное пространство ограничено четырьмя гигами) доступным будет от 2,8 до 3,5 Гб оперативки, т.к. та часть оперативной памяти, что переброшена выше границы 4Гб попросту не будет использована.
  • Для Server 2003 Web Edition в любом случае доступным будет только 2 Гб — ограничение самой операционной системы.

Проблема адресации памяти, кроме того, не ограничивается одной только операционной системой или одним процессором. Рассмотрим основные компоненты, накладывающие ограничения на объем оперативной памяти 4Gb.

В 32-х битном режиме процессоры могут адресовать лишь 4 Гб памяти. Но начиная с PentiumPro появилась 36-ти битная адресная шина, т.е. теоретически стали доступны 64Гб оперативной памяти.

32-х битные ОС адресуют не более 4Гб памяти. Те из них, в которых есть поддержка процессоров c PAE, теоретически могут поддерживать больше (в зависимости от реализации и позиционирования на рынке).

Видно, что на 64-х битные OC Microsoft также зачем-то наложил ограничения, весьма далекие от теоретического предела.

Чипсеты на i865 поддерживают 4Гб, на i975 поддерживают 8Gb — проверено опытным путем.

Особенности архитектуры компьютера .

Не все из первых 4-х гигов оперативной памяти доступны операционке для размещения в них данных и программ. Часть из этого адресного пространства отводится для работы с железом (PCI/PCI-E/FirmWare/VGA mem/etc), т.е. затеняется им. В зависимости от конфигурации компьютера объем затеняемого таким образом (железом) адресного пространства может варьироваться. Но «перекрываемая» железом часть оперативной памяти может быть перенесена и размещена выше границы 4Гб. В биосах материнок для этого обычно есть соответствующие настройки (remap). Таким образом, отключив часть неиспользуемого железа и сделав ramap памяти можно выкроить еще пару сотен мегабайт оперативной памяти.

32 разрядная система оперативная память максимум


Не секрет, что 32 битные операционные системы не позволяют адресовать более 4Гб оперативной памяти. Сейчас я вам хочу рассказать как это ограничение можно косвенно обойти в виртуальной среде, где есть полноценный доступ к хостовой операционной системе.

Собственно, цель достаточно ясна – это позволить гостевой x32 операционной системе использовать помимо «честных» 4Гб оперативной памяти еще какое-то количество, которое можно безболезненно выделить из доступной.

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

Начнем

Исходные данные:

  • Host: Ubuntu 12.04 x64, RAM 8Gb
  • VM: VMware Player 4.0.4
  • Guest: Windows XP SP3 x32, RAM 3Gb

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

Некоторые детали
  • Размер создаваемого vmdk диска можно рассчитать следующим образом:
    (ОЗУ доступная хост системе) — (ОЗУ переданная VM) — k
    где k – это минимальное необходимое количество ОЗУ для работы хост системы.
  • Так как vmdk диск должен располагается в оперативной памяти, то его следует туда помещать, как минимум, каждый раз после загрузки системы
  • Так как I/O операции в оперативной памяти достаточно быстры, нет необходимости создавать preallocated (т.е. с заранее выделенным местом) файл vmdk диска.
  • Желательно, чтобы конфигурация файла подкачки содержала минимальный и максимальный его размер, приблизительно равный объему созданного vmdk диска. Этот размер будет немного отличаться от указанного объема при создании vmdk, так как часть места займет файловая система и служебная информация самой системы.
  • Для размещения vmdk файла в оперативной памяти нужно эту память подготовить для доступа к ней из файловой системы.
  • В большинстве случаев при использовании такого тюнинга уже нельзя будет воспользоваться функцией «Suspend» в vmplayer.

Интересный факт: если vmdk диск был сделан не preallocated (т.е. «резиновый»), а файл подкачки был настроен так, как описано выше, то есть максимального и фиксированного размера, то, несмотря на то, что файл подкачки займет все пространство vmdk диска, в хосте этот vmdk файл будет занимать места почти так же, как и до переноса на него файла подкачки. Естественно, это не может не порадовать, так как гостевая система будет использовать дополнительную оперативную память по мере необходимости, правда, только в сторону увеличения.

Секреты ограничения памяти 32-х версий Windows

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

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

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

Свойства процессора;
32-битная операционная система;
32-разрядное приложение (программа)
Последние два очень часто смешивают в одну кучу, чего в данном случае, делать как раз не следует. Начнем по порядку и издалека – совершим короткий исторический экскурс.

Обратимся к таблице основных характеристик популярных процессоров от Intel:

Эта таблица нужна нам для того, чтобы наглядно показать тот факт, что разрядность адресной шины отнюдь не всегда совпадала с разрядностью архитектуры процессора.
Для начала обратим внимание на 16-разрядные процессоры. Если бы они имели 16-разрядную адресную шину, то максимальный размер доступной им физической памяти составлял бы всего 64 КБ (2 в 16-й степени равно 65536). Однако уже Intel 8086 мог работать с памятью до 1 МБ, а 80286 уже до 16 МБ благодаря 20 и, соответственно, 24 битам шины адреса.
Эпоха процессоров x86 совместимых процессоров с 32-х разряздными регистрами и 4 ГБ ОЗУ началась с Intel 80386 в далеком 1985 году. На протяжении последующих 10 лет 32-х разрядный процессоры архитектуры х86 не имели физической возможности работать с памятью более 4 ГБ.
В 1995 году был представлен процессор Intel Pentium Pro. Наряду с совершенно новой архитектурой ядра этот процессор получил 36-битную адресную шину благодаря чему, как не трудно подсчитать, максимальный размер доступной ему физической памяти увеличился до 64 ГБ (в современных 64-разрядных процессорах используются 37 разрядов, что увеличивает предел адресуемой физической памяти до 128 ГБ).
Кроме того, в процессоре был реализован «хитрый» механизм управления памятью, который отображал физическую память, расположенную за пределами 4 ГБ, в 32-разрядную виртуальную память в диапазоне 0 — 4 ГБ «обманывая» таким образом 32-разрядные приложения. Такой режим управления памятью процессором х86 получил название PAE (Physical Address Extension — расширение физических адресов).
Pentium Pro позиционировался в то время как процессор для серверов и рабочих станций. Действительно, представить себе в 1995 году настольный компьютер с объемом оперативной памяти не то что больше, а хотя бы отдаленно приближающимся к 4 ГБ, было не просто. Память измерялась тогда мегабайтами. К примеру, в 1998 году размер ОЗУ обычного настольного компьютера в 32МБ не считался маленьким. А стоила такая планка памяти от 60$. И в наше то время (2014 год) полным ходом используются компьютеры менее чем с 4 ГБ памяти. Для работы офисных приложений в связке с Windows XP такого объема памяти даже много. Кроме того, процессор Pentium Pro был очень дорогим и имел проблемы с быстродействием при выполнении популярных в то время 16-разрядных приложений.
Можно сказать, что такое решение было новым для 32-разрядных процессоров, однако, в силу того, что ранее подобная практика повсеместно применялась в 16-разрядных процессорах, революционной ее назвать сложно. Ведь еще со времен DOS широко применялся трюк с сегментной адресацией когда вся память была разбита на сегменты в 64КБ и адрес состоял из двух частей: сегмента и смещения внутри сегмента, таким образом удавалось использовать более 64КБ памяти.
Не все, но подавляющее большинство современных процессоров х86 для настольных компьютеров являются 64-разрядными и имеют поддержку PAE. Благодаря этому они не только могут работать с памятью более 4 ГБ, но и предоставляют такую возможность 32-битным операционным системам.

Проще всего определить поддержку режима PAE процессором оказалось в Linux. В Ubuntu, или в любом из ее многочисленных клонов, можно набрать в терминале:
grep —color=always -i PAE /proc/cpuinfo
В результате должно получиться что-то вроде этого:

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

Первой в ряду 32-разрядных ОС Microsoft стала Windows NT 3.1, выпущенная в 1993 году. Она предназначалась для корпоративного сектора, то есть для серверов и рабочих станций. Двумя годами позже в 1995 году появилась Windows 95 — операционная система для настольных компьютеров и ноутбуков. Между двумя этими событиями в 1994 году была представлена версия 1.0 ядра Linux. 32-разрядная архитектура оказалась столь удачной и «достаточной», что она повсеместно используется до сих пор на протяжении вот уже 2-х десятилетий. Последней 32-битной серверной операционной системой Microsoft стала Windows Server 2008. Однако, новейшая Windows 8 по-прежнему предлагается в двух вариантах. Для реализации дополнительных возможностей режима расширения физических адресов, помимо наличия соответствующего процессора и материнской платы с адекватным чипсетом и нужным количеством разведенных адресных линий, необходима поддержка PAE непосредственно самой операционной системой.
Если у Вас 32-разрядный Linux, то проблем с использованием памяти объемом более 4 ГБ, скорее всего, не возникнет. В операционных системах Linux поддержка PAE появилась в 1999 году в ядре 2.3.23 и используется с тех пор безо всяких ограничений.

Посмотрим таблицу максимально поддерживаемых размеров физической памяти, взятую из статьи 2005 года в msdn.microsoft.com, для Windows 2000, Windows XP и Windows Server 2003 >

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

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

32-разрядные приложения
Благодаря диспетчеру памяти процессора, осуществляющему ее распределение в режиме PAE независимо от работы приложений, и поддержке такого режима работы операционной системой, 32-разрядные приложения отделены от физической памяти и не имеют сведений о ее реальном размере. Каждому приложению, так как для них сохраняется 32-битное адресное пространство, по-прежнему доступны только 4 ГБ виртуальной памяти. В Windows под нужды самого приложения из этих 4 ГБ отдается ровно половина, в Linuх — 3 ГБ. В Windows существует возможность принудительно отдать приложению 3 ГБ, но, в большинстве случаев, это является нецелесообразным.
Необходимо иметь в виду, что включение режима PAE отнюдь не эквивалентно переходу на 64-битную систему, в которой каждому приложению выделяется несравнимо больший объем памяти. Если за счет PAE попытаться непосредственно удовлетворить непомерный аппетит некого современного приложения, например, пакета инженерного или графического моделирования, то ничего хорошего не получится. А вот если требуется одновременно запустить несколько требовательных к памяти (но не супертребовательных) приложений, то польза от PAE будет прямая. В первую очередь это касается серверов.
Например, требуется одновременная работа двух виртуальных машин, каждой из которых отведено по 2 ГБ памяти. Что будет без PAE понятно — вторая виртуальная машина, скорее всего, просто не запустится, ну или в системе начнется такой интенсивный обмен со swap-файлом, что процесс перейдет в категорию «пошаговая стратегия». С включенным PAE, при условии достаточного объема физического ОЗУ хостовой машины, обе виртуальные машины смогут благополучно работать.
К недостаткам PAE обычно относят возможное снижение производительности системы из-за уменьшения скорости доступа к памяти, связанной с дополнительными операциями на переключение отображаемых страниц памяти, и плохую работу некоторых драйверов устройств в 36-битном адресном пространстве.

Максимально поддерживаемые различными версиями Windows объемы физической памяти

Посмотрим сколько оперативной памяти поддерживают другие версии Windows, выпущенных после ХР.

В версиях Windows Vista х86 по сравнению с ХР практически ничего не изменилось.

Как видим, опять никаких изменений – абсолютный предел для x86 остался на уровне 4 ГБ. 1 ГБ в Windows Vista Starter и 2 ГБ в Windows 7 Starter только подкрепляют вывод об искусственном характере этих ограничений.

То же для Windows 8

Как видно из представленной таблицы, в плане лимитов памяти в Windows 8 тоже ничего не изменилось. Жаль, могли бы уже, наверное, ограничение снять или, по крайней мере, отодвинуть.

И тут самое время рассмотреть причины, по которым Microsoft ограничивает верхний предел доступной физической памяти в клиентских версиях Windows x86.

Одна из главных причин — Проблемы с безопасностью Windows XP.

Windows XP была выпущена осенью 2001 года и за очень короткий срок завоевала огромную популярность среди пользователей во всем мире. А, как известно, где большая популярность, там и большие проблемы. Моментально для нее было создано огромное количество вредоносного кода в виде разнообразных и многочисленных вирусов. При этом оказалось, что новая операционная система имеет ряд уязвимостей и весьма низкую стойкость ко взлому. Своего полноценного клиентского антивирусного пакета в то время у Microsoft не было. Ситуацию в значительной мере исправляли программные продукты сторонних разработчиков, однако, этого было явно недостаточно и, в целом, положение оставалось весьма напряженным.
Для того чтобы как-то повысить безопасность Windows XP, в 2004 году был выпущен второй пакет обновлений — SP2. И тут возникли проблемы. Одной из главных особенностей этого пакета, с точки зрения безопасности, было включение технологии DEP (Data Execution Prevention — предотвращение выполнения данных). Эта технология, повсеместно используемая и сегодня, позволяет отражать целый класс вредоносных атак благодаря запрету запуска исполняемого кода с непредусмотренных для этого страниц памяти. Но для работы DEP должна быть включена поддержка PAE (Physical Address Extension — расширение физических адресов). Включение режима PAE меняет механизм обращения к страницам оперативной памяти и делает возможным работу с физической памятью размером более 4 ГБ. Однако при подготовке и тестировании Windows XP со вторым пакетом обновлений обнаружились большие проблемы, приводившие к фатальным ошибкам и аварийным отказам в работе операционной системы. Очень быстро причины неприятностей были найдены. Ими оказались драйверы устройств, написанные без учета возможности их работы в режиме PAE.

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

Драйвер пытается считать или записать некую информацию по адресам, которые отведены для работы с устройством. Если драйвер “глупый”, не понимает в каком окружении он работает и не может “договориться” с операционной системой, то, как показано на рисунке, вместо портов ввода/вывода своего устройства он начнет общаться с некими ячейками физической памяти. Результат такого “общения” для работы системы непредсказуем, вплоть до полного «зависания» и перезагрузки.

Для того чтобы решить эту проблему и не блокировать установку SP2 пользователями из-за возможных проблем, Microsoft приняла командирское решение — PAE включить, но тривиально ограничить верхнюю границу доступной оперативной памяти клиентских версий своей операционной системы на уровне 4 ГБ. Адреса при этом транслируются один в один как в “классической” 32-разрядной системе и “глупые” недоделанные драйверы устройств успешно работают.
Ну что же, дешево и сердито. Дешево потому, что производителям оборудования не нужно было спешно заказывать разработку “правильных” драйверов. Сердито потому, что отложенные таким образом до поры до времени проблемы с использованием физической памяти компьютера, были переложены на конечного пользователя.
Много уже гигабайт утекло с момента выхода SP2 для XP, а Windows по-прежнему не видит оперативную память больше 4 ГБ и, как мы видели по таблице “Physical Memory Limits: Windows 8”, изменений в этом плане не предвидится.
И это не совсем понятно: для Windows Vista все равно пришлось писать новые драйвера, значит была возможность переписать их корректно для работы с PAE, но ограничение в 4 ГБ так и осталось.
Сегодня уже очень трудно представить себе 32-разрядные драйверы, которые не умеют работать с памятью более 4 ГБ. Возможно причина в том, что Microsoft таким образом хочет подтолкнуть пользователей к переходу на x64?

А как же серверные версии Windows?
Можно предположить, что для них драйверы устройств сразу разрабатывались с учетом работы в режиме PAE, то есть были “умными” и тщательно тестировались. Этому способствовало и то обстоятельство, что в серверных конфигурациях оборудования не было такого “зверинца” встроенных устройств.
До недавнего времени, например, до появления технологии виртуализации рабочих мест, которая, в том числе, предполагает возможность обработки графики самим сервером, последнему совершенно не нужна была серьезная видеокарта, так как вполне хватало видео, встроенного в материнскую плату. Кроме того, 32-разрядные серверные версии Windows закончили свою историю на Windows Server 2008.

Во второй части секреты распределения памяти в 32-х разрядной Windows и как бороться с ограничением.

Отправить ответ

avatar
  Подписаться  
Уведомление о