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

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

Sorry. No data so far.

Оперативная память больше 4 ГБ в 32-разрядных пользовательских версиях Windows

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

Коротко повторю выводы, которые были сделаны в предыдущих публикациях этой темы:

  • 4-гигабайтный предел физической памяти был преодолен 32-разрядными процессорами x86 в 1995 году благодаря внедрению технологии PAE (Physical Address Extension). Практически все современные 32-разрядные операционные системы имеют поддержку PAE, что позволяет работать им с физической памятью объемом до 128 ГБ.

Для приложений (программ) работа системы в режиме PAE не эквивалентна переходу на x64, так как они по-прежнему имеют доступ только к 4 ГБ виртуальной памяти (Часть 1).

  • Все 32-разрядные операционные системы Windows поддерживают PAE. Начиная с Windows XP SP2 режим PAE включается принудительно для обеспечения работы технологии безопасности DEP (Data Execution Prevention). Не смотря на это, клиентские версии Windows x86 имеют ограничение максимального объема поддерживаемой физической памяти на уровне 4 ГБ. Это ограничение в ядре ОС было сделано Microsoft с целью обеспечения функционирования драйверов устройств, разработанных без учета возможности их работы в режиме PAE (Часть 2).
  • Установленный в клиентских версиях Windows x86 4 ГБ лимит физической памяти делает невозможным использование в них всей имеющейся в компьютере памяти. Microsoft вводит пользователей 32-разрядных версий Windows в заблуждение декларируя поддержку 4 ГБ физической памяти (Часть 3).

Сегодня мы протестируем способность Windows 7 x86 работать с оперативной памятью больше 4 ГБ.

Наверное, можно было бы не делать отдельный пост и закончить все в прошлый раз, но очень не хотелось смешивать между собой варианты “= 4 ГБ” и “> 4 ГБ”. Во-первых, 4 ГБ является официально заявленным Microsoft лимитом физической памяти для клиентских версий. Во-вторых, очень важно было разобраться с адресным пространством в этом диапазоне и понять, что тут не так. А именно, почему 4 ГБ на самом деле не поддерживаются.

Причины, которые могут мешать переходу на 64-разрядные версии Windows

Стоит ли вообще пытаться сегодня заставить 32-разрядный Windows работать с оперативной памятью более отмеренных ей Microsoft 4 гигабайт? Не проще сразу перейти на 64-разрядную версию и обо всем забыть?

На моем основном компьютере установлена Windows 7 x64. Системой я полностью доволен, ну или почти всем доволен. Из раздела недовольств:

Отсутствие непосредственной поддержки унаследованного оборудования

У меня есть МФУ Canon LaserBase MF3110, которое, дай бог ему здоровья, до сих пор исправно выполняет свои функции. Однако, печатать на него напрямую из 64-битной Windows я не могу из-за банального отсутствия соответствующих 64-разрядных драйверов. Думаю, что их не будет уже никогда.

Точно такая же ситуация, даже еще хуже, со сканером Hewlett-Packard.

Чуть позднее я обязательно расскажу как можно выйти из положения с помощью виртуализации. Ну не выкидывать же в самом деле по причине отсутствия драйверов исправно работающее, пусть и не новое, оборудование.

Сегодня унаследованное оборудование является одной из причин, которая все еще тормозит переход на 64-битные операционные системы.

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

Финансовые затраты при смене версии Windows

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

Предположим, что некоторое время назад вы купили в магазине компьютер с предустановленной 32-разрядной версией Windows, а спустя некоторое время, по той или иной причине, приняли решение перейти на 64-разрядную. Очень хорошо, но как реально осуществить это решение?

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

Цена Windows x64 не отличается от Windows x86, но где ее официально взять и не платить при этом дополнительные деньги? Если честно, то я не знаю. Если кто-то знает, поделитесь. Могу предположить, что легитимное решение проходит все же через магазин. Если при этом учесть, что официально ОЕМ версии Windows поставляются только с новыми компьютерами и выбирать придется из более дорогих коробочных вариантов, то желание немедленно осуществить задуманный переход на x64 может заметно поостыть.

Хорошо совмещать переход на x64 со сменой компьютера, но она происходит не так уж часто.

Тестирование работы Windows 7 x86 с ядром, поддерживающим до 128 ГБ оперативной памяти

Сегодня в качестве тестовой лаборатории будет выступать настольный компьютер с процессором I7 и 6 ГБ оперативной памяти.

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

Процесс инсталляции “Windows 7 x86 Корпоративная” на виртуальный диск оказался не очень сложным. Единственное, что не получилось сделать в системе, работающей с виртуального диска, так это определить индекс производительности – начинает мерить, потом говорит, что не может закончить оценку производительности дисковой системы. Жаль, но нам сейчас это не актуально.

P.S. Появилась статья с подробным описанием вариантов установки Windows 8.1 на виртуальный диск.

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

Частично повторим то, что делали при исследовании 32-разрядной Windows 7 с 4 ГБ физической памяти >

w7-32-sys-0

Здесь все достаточно ожидаемо. Из 6 ГБ доступно 3,24 ГБ, что составляет всего 54% от установленной физической памяти. Потери складываются из 4 – 3,24 = 0,76 ГБ на адреса устройств и 2 ГБ, обрезанных выше 4 ГБ.

w7-32-memmap-0

А вот “Монитор ресурсов” говорит, что под оборудование зарезервировано 2,8 ГБ, но мы этому, естественно, не поверим и запустим утилиту MemInfo:

w7-32-meminfo-0

Использование физической памяти Windows 7 x86 с ядром ntkr128g.exe

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

  • Копируем нужное нам ядро “ntkr128g.exe” в папку C:\Windows\System32;
  • Запускаем в командной строке с правами администратора bcdedit.exe без параметров и находим секцию, которая отвечает за загрузку системы с виртуального жёсткого диска (эту секцию я прописал на предыдущем шаге, когда настраивал загрузку Windows 7 с VHD). В моем случае из основной 64-разрядной системы это будет выглядеть так >

bcd-vhd

Если загрузить систему с VHD и проделать то же самое, то мы увидим аналогичную картину, но только пути всех “device” поменяются. То, что описано ниже, можно делать из любой системы;

  • Во избежание ошибки запускаем “Блокнот”, копируем в него содержимое экрана через буфер обмена (экран командной строки –> правая кнопка мыши –> “Выделить все” –> “Enter” –> “Блокнот” –>  “Правка/Вставить”) и сохраняем в произвольный текстовый файл. Собственно говоря, нас интересует “Идентификатор”.
  • Создаем новую загрузочную запись путем копирования найденной и даем новое имя этому варианту. Используем теперь сохраненное в блокноте в обратную сторону для удобства подстановки идентификатора:

bcdedit /copy {5c2a7c3c-a04e-11de-9dac-b90d3342b585} /d "Windows 7 VHD 128"— естественно, в вашем варианте идентификатор будет совершенно другим.

Запустим еще раз bcdedit без параметра и убедимся, что новая запись появилась. Пока она ничем кроме имени не отличается от исходной.

  • Новую запись надо дополнить:

bcdedit /set {5c2a7c3c-a04e-11de-9dac-b90d3342b585} kernel  ntkr128g.exe– указываем, какое ядро нужно грузить;

bcdedit /set {5c2a7c3c-a04e-11de-9dac-b90d3342b585} testsigning  Yes– в связи с тем, что контрольная сумма ядра у нас изменилась, говорим, что работаем в тестовом режиме;

bcdedit /set {5c2a7c3c-a04e-11de-9dac-b90d3342b585} pae  ForceEnable– на всякий случай;

Смотрим, что получилось >

bcd-vhd-128

Запускаем новую систему и смотрим результат >

w7-32-sys-1

Судя по тому, что говорит о себе система, она теперь работает со всеми 6 ГБ физической памяти.

w7-32-memmap-1

“Монитор ресурсов” сообщает, что под оборудование практически ничего не зарезервировано. Как мы теперь хорошо понимаем, на самом деле зарезервированы все те же 0,76 ГБ адресного пространства, но оно теперь не вычитается из установленного объема памяти (надо будет при случае посмотреть, как это место звучит в оригинале на английском языке. Возможно это “трудности перевода”).

Смотрим диапазоны зарегистрированной в системе памяти >

w7-32-meminfo-1

Как и ожидалось, добавился новый большой диапазон памяти выше 4 ГБ.

Сравнительное тестирование работы Windows 7 x86 с ядром ntkr128g.exe

Для того, чтобы развеять последние сомнения и подвести окончательный итог наших изысканий, запустим что-нибудь требующее много оперативной памяти. Самое первое, что приходит на ум, это виртуальные машины в VirtualBox. У меня уже есть несколько готовых виртуальных машин, созданных в основной рабочей системе с Windows 7 x64.

Наша тестовая система с Windows 7 x86 хоть и работает с виртуального диска, но ничего общего, кроме диска VHD, с виртуальной машиной не имеет. Она прекрасно видит все физические диски, которые установлены в моем компьютере, благодаря чему подключить готовые виртуальные машины в VirtualBox не составляет труда. Естественно, в новой Windows 7 x86 предварительно надо установить сам VirtualBox.

Назначим каждой виртуальной машине, скажем, по 1 ГБ памяти и начнем запускать их по очереди, сначала в исходной системе, которая видит лишь 3,24 ГБ, а затем в “скорректированной”.

w7-32-4gb-vm

В исходной системе удалось стартовать четырем виртуальным машинам, однако, как видно из представленного фрагмента экрана, на этом все и закончилось – “Unable to allocate and lock memory… Please close applications to free up memory…”. Виртуальные машины ни на что не реагировали и выключать их пришлось аварийно.

А теперь повторим наш экстремальный эксперимент в “скорректированной” Windows 7 x86 >

w7-32-6gb-vm

Как видно из представленного фрагмента экрана, запущены четыре виртуальные машины Linux, которым отведено по 1 ГБ памяти, и одна Windows XP с 512 МБ ОЗУ.

Можете мне поверить, можете проверить, но все замечательно работало. Я поочередно переключался в разные виртуальные системы и запускал в них имеющиеся приложения, параллельно запустил браузер на хосте – ни торможения, ни каких либо ошибок не наблюдалось. Не знаю, как вам, а мне понравилось.

Стоит ли использовать Windows 7 x86 с модифицированным ядром (с поддержкой до 128 ГБ оперативной памяти)

Рекомендовать со страниц блога использовать рассмотренный вариант увеличения доступной физической памяти для 32-разрядных пользовательских версий Windows я, естественно, не могу и не буду. Тому есть две веские причины:

  1. Нарушение лицензионного соглашения с Microsoft, причем как бы не в трех местах, а мы ничего нарушать не хотим. Конечно, при желании можно найти несколько смягчающих вину обстоятельств. Например, таких как, то, что стоимость однотипных версий Windows разной разрядности одинакова и своими действиями мы не наносим финансового вреда Microsoft. Или то, что при установке в компьютере памяти размером 4 ГБ надо еще посмотреть, кто кому и что должен – в лицензии поддержка такого объема заявлена, но, как мы теперь знаем, на самом деле ее нет. Но, все же, нарушение оно нарушение и есть. Будем считать, что все, что мы делали, было временным и на благо науки Подмигивающая рожица;
  2. Нет никакой гарантии, что в вашем компьютере не используются устройства с “глупыми” драйверами, работа которых в режиме PAE с адресами физической памяти выше 4 ГБ приведет к краху системы.

Видимо придется закончить наше обсуждение секретов большой памяти в 32-битных операционных системах банальной рекомендацией – если планируете увеличить оперативную память компьютера до 4-х и более ГБ, или собираетесь приобрести новый компьютер с таким объемом памяти, задумайтесь о переходе на 64-разрядную операционную систему.

Ну если уж с x64 отношения не складываются категорически – читайте все еще раз внимательнее.

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

  1. павел:

    извините.а может стоило еще упомянуть о таком моменте,что в windows имеется возможность посредством команды set IncreaseUserVa изменять (варьировать) количество памяти,предоставляемой пользовательским процессам ?
    в системе с «твикнутым» ядром можно задать ,к примеру, (при наличи 8 гб оперативной памяти) паралельное выполнение двух приложений, где каждому из них разрешено использовать 3 гб памяти….и все это на 32-битной винде.

  2. Большое спасибо за ценное замечание. На самом деле я упоминал об этом режиме в самой первой публикации по теме «большой» памяти http://www.ithabits.ru/15300-bolshaya-pamyat-v-32-bitnyih-operatsionnyih-sistemah.html. На практике я им никогда не пользовался, ни на серверах, ни тем более на настольных компьютерах. Однако, на сколько я помню, этим режимом настоятельно не рекомендовалось пользоваться, так как возникают проблемы в самой операционной системе.

  3. павел:

    не знаю )))
    я как прописал по весне этого года данную команду у себя в системе-так до сих пор и оставлено…
    а причина была банальная- компьютерная игра.
    ко многим играм (а игра ,в частности, была FALLOUT 3 NEW VEGAS),которые позволяют это дело,выходит много модов любительских. в частности,моды с улучшенными текстурами. и везде в таких типах модов стоит оговорка-так как размер текстур большой,мод будет привередлив до объема оперативной памяти.
    и идет как бы с эти модом «подсказка» для 32-битных систем:
    прописывание команд (последовательное)
    BCDEdit /set PAE forceenable

    BCDEdit /set nolowmem on

    BCDEdit /set IncreaseUserVa NNNN

    так-то оно так, да не так!
    прописать все это дело можно.но ! как я понял,если приложение (наша игра) заранее (не знаю какое слово подобрать-я ни разу не программист, предположу,что…) скомпилировано именно на использование 2 гб памяти на свой процесс ,то такие ухищрения или совсем не проходят или проходят,но не дают видимого эффекта.

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

    запускал,прописывал,ВИДИМОГО РЕЗУЛЬТАТА не ощутил.
    скорее всего,кто-то где-то по незнанию показал (хотя этотот момент присутствует ,к примеру, и на немецких форумах), а другие подхватили

    • Ответ на эти вопросы дает Марк Руссинович в своей книге «Внутреннее устройство Windows»:

      …/3GB и /USERVA … позволяет процессам, выполняющим программы со специальным флагом в заголовке исполняемого образа, использовать до 3 Гб закрытого адресного пространства и оставляет операционной системе только 1 Гб…»

      Т.е. 32-разрядная программа должна «уметь» работать с 3 ГБ.
      А в его же статье «Преодолевая ограничения Windows: физическая память» объясняется, почему 3 ГБ не всегда есть очень хорошо:

      «Диспетчер памяти отслеживает страницы памяти при помощи массива, называемого базой данных PFN, и в целях оптимизации производительности отображает все содержимое этой базы в виртуальную память. … каждая страница памяти представлена структурой данных объемом 28 байт, в системе с физической памятью емкостью 128 ГБ для размещения базы данных PFN потребуется 930 МБ. … В таких условиях база данных PFN объемом 980 МБ занимает почти половину из доступных 2 ГБ системной части пространства виртуальных адресов, а значит, на отображение ядра, драйверов устройств, системного кэша и других структур данных системы остается всего 1 ГБ.»

      Соответственно, если отдать пользовательскому процессу 3 ГБ, системе становится совсем туго.

  4. Лев:

    wow-wow.
    Очень хорошо, просто читаю и умиляюсь. Проведенный эксперимент великолепен!
    Спасибо!

  5. Alexandra:

    Добрый день! Попробовала все патчи, о которых вы писали в своих статьях — все приводят к одному и тому же — BSOD. Ругается на файлы директ х и видеокарты. Можно ли это как-то исправить? 64 бита для меня не вариант, нужное приложение под ней не работает совсем.

    • Здравствуйте Александра! Сделать можно только одно — обновить версии драйверов. Если они уже самые новые или после обновления система опять вываливается в BSOD, то можно смело забыть о патче ядра и начинать искать другое решение. Если ваше 32-разрядное ПО категорически не хочет работать в 64-разрядной системе (что вообще-то довольно странно. Если не секрет, о каком софте идет речь?), то посмотрите в сторону его переноса на виртуальную машину. На мой взгляд наилучшим решением для настольных компьютеров сегодня является Oracle VirtualBox. Во-первых, платформа совершенно бесплатна, во-вторых, отлично интегрируется с основной системой компьютера через общие папки, буфер обмена и USB.

    • Александра:

      речь идет о нехитрой програмке PB Downforce 0.3.3.1 , которая маскирует родной серийник жесткого диска на любой произвольный. Программка категорически не работает на 64, сама не знаю почему, просто не поддерживает и все тут. Плюс на машине стоит Астер, который сам по себе периодически вызывает синие экраны с руганием на ядро (может из-за него и не работает). Из вышесказанного, виртуалка не вариант, у нас и так ресурсы делятся на 2 «виртуальных» компьютера :) Драйвера попробую обновить, отпишусь что из этого получится

    • Александра:

      нет, увы, обновления видеодрайверов ничего не дали.

      p.s. даже с выключенным астер не работает

    • Жаль конечно, хотя такой результат был весьма ожидаемым. Но с другой стороны никто успеха и не гарантировал. Не хочет 32-разрядный Windows работать с памятью больше 3 Гб, и в половине случаем не будет. Как я уже сказал, надо искать другое решение. Если 64x никак и виртуальная машина тоже не подходит, может поискать что-то в направлении виртуального RAM-диска с переносом на него файла подкачки? Но это так, фантазии. Вразумительного и проверенного решения такого типа для Windows у меня нет.

  6. Remdale:

    Добрый день. Вы упоминали насчет 32-разрядных драйверов и виртуализации, но так ничего и не сказали. У меня есть устройство с 32-битным драйвером. Как я могу его установить на 64-битную систему?

    • Прошу прощения, что с таким запозданием — совершенно зашился на основной работе. И да, грешен, планировал написать статью о работе с унаследованными периферийными устройствами с помощью виртуальных машин, но так руки и не дошли.
      Устройство, для которого есть только 32-разрядные драйверы, непосредственно на 64-разрядную систему установить не получится. Придется вначале установить в системе одну из систем виртуализации. В Windows 7 был большой подарок от Microsoft в виде Virtual PC с готовой виртуальной машиной Windows XP. Начиная с Windows 8 пошла усеченная версия серверной Hyper-V уже без готовой ВМ и совершенно бестолковая для использования на домашнем компьютере. Для дома я считаю идеальным вариантом Oracle VirtualBox. Далее в системе виртуализации нужно создать 32-разрядную виртуальную машину (проинсталлировать с нуля или найти готовый образ) с системой, для которой есть драйвера под ваше устройство. А дальше уже ставить драйвера в ОС на виртуальной машине и работать с вашим устройством. Если оно подключается по USB, то VirtualBox пробрасывает его на ВМ без проблем. Я успешно работаю таким образом со старым сканером и принтером.

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

Subscribe without commenting