НЕ ПРОПУСТИТЬ ИНТЕРЕСНОЕ

Свежие обсуждения

Sorry. No data so far.

Куда исчезает память в клиентских версиях Windows x86

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

В прошлый раз мы уже полностью переключились на системы от Microsoft и выяснили, что все пользовательские версии x86, начиная с Windows XP SP2, не могут использовать физическую память больше 4-гигабайт из-за установленного в ядре ограничения. Мы нашли объяснение Microsoft, что это ограничение было сделано для того, чтобы избежать неустойчивой работы драйверов устройств, написанных без поддержки режима PAE (Physical Address Extension).

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

Перейдем от теории к практике и на реальном примере покажем, почему в самом начале мы определили границу «большой памяти» для 32-разрядных операционных систем на уровне около 3, а не 4 ГБ.

Поможет нам в этом ноутбук Acer с 4 ГБ оперативной памяти и 32-битной Windows 7 Professional.

Сколько физической памяти компьютера доступно 32-разрядной операционной системе Windows 7

Посмотрим, сколько памяти видит windows 7,  и что говорит об использовании физической памяти в этом компьютере сама операционная система >

Acer-system-01

Вот это да! Если верить тому, что мы видим, а не верить, вроде, оснований пока нет, то получается, что 1,51 ГБ – “деньги на ветер”.

Как же так? А все очень просто.

Адресное пространство под нужды оборудования

Посмотрим еще несколько отчетов. Запустим “Диспетчер задач”, затем “Монитор ресурсов” и откроем вкладку “Память” >

Acer-monres-0

Ну вот, собственно, и готовый ответ на вопрос об использовании физической памяти — сколько памяти видит windows 7, или куда исчезли полтора гигабайта физической памяти. Они зарезервированы под нужды оборудования.

Нет, не так. Под нужды оборудования зарезервирована не память, а 1,5 ГБ адресного пространства в интервале 4 ГБ. Так как одно и тоже адресное пространство не может быть одновременно использовано и устройствами и памятью компьютера из-за неизбежного конфликта, “лишней” физической памяти стало просто некуда деться и она оказалась недоступна.

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

Обратимся еще раз к таблице характеристик процессоров, приведенной в первой публикации. Первым процессором, который имел возможность адресовать 4 гигабайта оперативной памяти, был Intel 80386 выпущенный в 1985 году. Когда разрабатывался компьютер на его основе, было принято решение выделить адреса портов ввода-вывода устройств в верхней части 4-гигабайтного адресного пространства, а нижнюю часть отдать под физическую память.

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

4GB

Конфликт адресов физической памяти и устройств

Некоторое время назад реально появились клиентские компьютеры с 3 — 4 гигабайтами оперативной памяти (сейчас то этим уже никого не удивишь) и адреса оперативной памяти и устройств “встретились” и пересеклись. Вот так условно можно представить картину распределения адресного пространства и использования физической памяти для компьютера с установленными 4 гигабайтами оперативной памяти>

4GB-1

Красная зона в адресном пространстве, занятом устройствами, отражает конфликт, который всегда решается не в пользу физической памяти – это реальные потери, те самые 1,5 ГБ для нашего ноутбука.

Величина “потерь” зависит от того, как много физической памяти установлено в компьютере, и какое адресное пространство резервируют под себя устройства. На разных компьютерах она будет различной. Например, на моем настольном компьютере под нужды оборудования резервируется в два раза меньше — около 0,75 ГБ, но так как физической памяти установлено 6 ГБ, то потери в 32-битной Windows составят уже примерно 2, 7 ГБ, то есть почти половину (!)

Частично воспользуемся методикой, описанной в классической статье Марка Руссиновича «Pushing the Limits of Windows: Physical Memory«, и сделаем две вещи, — они нам пригодятся впоследствии. Воспользуемся маленькой диагностической утилитой MemInfo от Alexa Ionescu. Запустим ее с правами администратора на нашем ноутбуке с ключом –r и посмотрим как используется физическая память >

Acer-meminfo-0

А теперь откроем “Диспетчер устройств” в “Управление компьютером”. Переключим “Вид” на “Ресурсы по типу” и откроем блок “Память” >

Acer-hardware-mem

Сравниваем верхнюю границу физической памяти “9F800000”, определенную утилитой MemInfo, с нижней границей диапазона адресов, зарезервированных устройствами. В нашем случае это “A0000000” для видеокарты AMD Radeon HD. Все сходится. Есть еще окно в нижней части в диапазоне 640 КБ – 1 МБ. Как не трудно догадаться, это атавизм, пришедший к нам от 16-разрядного процессора 8086 и ДОС.

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

Microsoft, некоторым образом, вводит пользователей в заблуждение, декларируя поддержку 4 гигабайт оперативной памяти. На самом деле, как мы уже поняли, система не может задействовать всю память из-за того, что адресное пространство ограничено сверху “FFFFFFFF” (4 ГБ), а именно это и делает Microsoft не смотря на то, что процессор может адресовать несоизмеримо больше и сама ОС давно поддерживает PAE. Одну из наиболее вероятных причин по которой это было сделано мы рассмотрели в прошлый раз.

Как полностью задействовать 4 гигабайта физической памяти в Windows x86

По-хорошему, для того, чтобы продемонстрировать, как можно вернуть “потерянную” память, нужно установить на нашем ноутбуке Linux с ядром PAE или серверную 32-разрядную версию Windows, причем такую, для которой заявлена поддержка более 4 ГБ памяти. Это, например, Windows Server 2003 или 2008 в редакции Enterprise. Делать мне ни первого, ни второго, по правде говоря, совершенно не хочется.

Марк Руссинович использовал для аналогичных целей 64-разрядную ОС. Мы пойдем другим путем. Для этого, правда, придется поступить не совсем честно по отношению к Microsoft — мы просто снимем в ядре ограничение на 4 гигабайта оперативной памяти. Как это сделать можно прочитать здесь.

Делаем и смотрим, что получилось >

Acer-system-11

Как видим, “потерянная” память сразу нашлась. Еще раз откроем монитор ресурсов >

Acer-monres-1

Тут Windows пытается ввести нас в заблуждение когда говорит, что теперь под оборудование зарезервировано всего 138 Мбайт. Я не буду еще раз показывать карту распределения памяти устройств из “Диспетчер устройств” в силу того, что ровным счетом ничего не изменилось – все устройства остались на своих местах в диапазоне адресов между “A0000000” и “FFFFFFFF”. То есть, на самом деле серым цветом монитор ресурсов показывает не размер адресного пространства, зарезервированного под нужды устройств, а суммарный объем “потерянной” памяти. Почему “суммарный” станет ясно, когда мы перейдем к компьютеру с объемом установленной физической памяти больше 4 ГБ.

Посмотрим диапазоны зарегистрированной физической памяти с помощью утилиты MemInfo >

Acer-meminfo-1

Видим, что внизу добавился новый диапазон размером 1,4 ГБ. Это и есть наша “потерянная” память. Из-за того, что мы продолжаем оперировать 32-х разрядными адресами, получился, как бы, конфликт. На самом деле никакого конфликта нет в силу того, что добавившийся диапазон физических адресов лежит выше “FFFFFFFF”. Попробуем графически изобразить то, что получилось после того, как мы сняли 4-гигабайтное ограничение >

4GB-2

“Умный” чипсет и BIOS ноутбука перенесли конфликтную часть физической памяти выше 4 Гбайтной границы. Благодаря этому и работающему режиму PAE, этот участок физической памяти стал доступен операционной системе.

Тут не лишним будет отметить, что для того, чтобы “потерянная” память могла вернуться, нужен не только процессор с поддержкой PAE, но и материнская плата, которая, во-первых, поддерживает больше 4 ГБ ОЗУ, во-вторых, умеет перемещать адресные блоки физической памяти, конфликтующие с оборудованием, выше “FFFFFFFF”. В BIOS по поводу последнего даже может быть отдельная настройка, что-то типа “Memory Remapping”. В использованном мной ноутбуке я такой настройки не нашел – видимо выбор Enabled/Disabled происходит в нем автоматически.

Подводим промежуточные итоги:

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

Комментарии: 10. Присоединяйтесь к обсуждению!

  1. павел:

    немного не понимаю один момент :
    последняя иллюстрация в статье (всего у нас установлено 4096 мб памяти) -есть занятая приложениями часть физической памяти +кусок в верхних адресах под ресурсы устройств.
    работающеий режим PAE расширяет для 32-рязрядных приложений память за счет отображения физической памяти свыше 4 гб в виртуальную память…и вот этот виртуальный (для приложений) ,а на самом деле-реальный физический кусок памяти мы и «отыгрываем» у системы за счет манипуляций по модифицированию ядра.
    но в конкретном то примере с ноутбуком -у вас всего 4 гб памяти. физической памяти.за счет чего удалось отыграть у системы почти 1,4 гб памяти ?
    в какое место добавился новый диапазон размером 1,4 ГБ ? в виртуальную память ? а за счет чего она возникла.если в системе всего 4 гб памяти.

    может я что-то не понимаю ?

  2. Ага, все просто. Материнская плата перекидывает верхний диапазон физической памяти выше 4 ГБ. Работающий режим PAE позволяет системе спокойно общаться с этой памятью, но майкрософтовское ограничение в ядре запрещает обращаться к адресам выше FFFFFFFF (4 ГБ). Вот эта верхняя память и пропадает. Снимаем ограничение — получаем все 4 ГБ в полном объеме.

  3. павел:

    т.е.я так понимаю,что даже при 4 гб физически установленной памяти в системе, режим PAE позволяет,посредством ввода виртуальной памяти,как бы «нарастить» объем памяти ?

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

  5. павел:

    извините,я все как школьник -не могу усвоить:
    есть pae-режим….. есть 32-битная винда…есть 12 гб физической памяти…
    есть процессор,все это дело поддерживающий+ матплата,все это дело разрешающая…
    т.е. ,если бы не было ограничений microsoft при наличи,этих 12 гб оперативной памяти мы видели доступными в системе все эти 12 гб, а адреса устройств ввода-вывода ВСЕГДА перемещались бы в невидимую нам из системы часть адресов памяти-виртуальную память, и это из-за того,что процессор позволяет адресовать 64-128 гб памяти и у нас нет никаких ограничений на это адресование ?

    я правильно рассуждаю ?

    • Ну да, так и есть. Только адреса устройств ввода-вывода как раз никуда не перемещаются — они остаются на местах и очень жестко привязаны. Сдвигается физическая адресация оперативной памяти (RAM), начиная с нижней границы устройств (на рисунке — левый край синей области). Т.е. если бы не было этого занятого устройствами диапазона, то адрес некой ячейки памяти соответствующей, например, 3,5 ГБ был бы физически на уровне 3,5 ГБ, а после перемещения становится 3,5 + диапазон, занятый под устройства (ширина синей области на рисунке).

  6. павел:

    понял. спасибо за пояснения.

  7. Константин:

    Спасибо. Очень интересный цикл статей.
    Вот решил добавить опер. памяти в старый комп и возник вопрос : будет ли доступна вся опер. память общим объёмом 3,5 Гб на 32-разрядной Win XP, т.е. хватит ли 0,5 Гб адресного пространства под нужды оборудования?
    Понимаю что зависит от конкретного оборудования, но всё же приблизительно…

    • Константин, спасибо за отзыв. Вы совершенно правы — сколько в конечном счете памяти сможет задействовать система очень сильно зависит от установленного в компьютере оборудования. Однако можно определить верхний диапазон памяти, например, в «Управление компьютером»/»Диспетчер устройств». Установить в «Вид» «Ресурсы по типу» и найти устройство, использующее наименьший нижний адрес. Он то и определит максимальный адрес для использования системой.

  8. Константин:

    Спасибо за ответ.
    В теории разобраться не получилось, но на практике оказались доступными все 3,5 Гб.
    Но и появился ещё вопрос. Все установленные планки памяти имеют одинаковую частоту, но итоговая частота работы памяти оказывается меньше положенной (проверял через разные программы). Может у Вас есть статьи о частоте и таймингах опер. памяти или что то похожее, было бы интересно почитать.

Написать комментарий

Subscribe without commenting