Пользователь
0,0
рейтинг
17 ноября 2013 в 23:02

Как я преодолевал предел 4Гб на Windows XP 32бит из песочницы

Сразу оговорюсь, «преодолевал» в названии отражает только тот факт, что теперь моя 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.

Второе, что необходимо сделать, это получить пропатченную версию ядра Windows. Как известно, существует 4-ре версии ядра:
  • ntoskrnl.exe — однопроцессорное ядро Windows.
  • ntkrnlmp.exe— многопроцессорное ядро Windows.
  • ntkrnlpa.exe — однопроцессорное ядро Windows с более чем 3 ГБ оперативной памяти.
  • ntkrpamp.exe — многопроцессорное ядро Windows с более чем 3 ГБ оперативной памяти.

В той инструкции, которую я использовал, говорилось про ядро ntkrnlpa.exe и в моей инсталляции Windows стоит именно оно. Что делать, если попадётся другое ядро – я, честно говоря, не знаю.
Первым делом, я сделал копию ядра, назвал его krnl16.exe, в принципе название неважно. Далее HEX-редактором (я использовал DOS-Navigator, по старой памяти) надо найти последовательность
  • BB 00 00 10 00 33 FF 6A 07 8B F0 и заменить её на
  • BB 00 00 40 00 33 FF 6A 07 8B F0

Здесь 1000h = 4096 Мб, заменяем на 4000h = 16384 Мб. Т.е. поднимаем ограничение до 16Гб. В принципе, можно вписать и большее число. Пропатченный файл также должен располагаться в system32.

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



Но как определить сбойный модуль? Погуглив, я нашёл для этого методику, которая заключается в анализе малого дампа памяти, создаваемого Windows при BSOD. Анализ производится программой Blue Screen View, но вот все найденные мной способы включения режима записи дампа к успеху не привели: дамп не создавался, поэтому пришлось использовать научный метод тыка. Для начала я деинсталлировал то ненужное, что нашлось в системе. А именно драйвер защиты Guardant и драйвера ATI от старой видеокарты.
Ребут.
Результат превзошёл мои ожидания. Честно говоря, я не ожидал, что метод тыка даст такие результаты, и попробовал его просто, чтобы сделать хоть что-нибудь. Который из драйверов вызывал проблему, я точно не знаю, но думаю, что, скорее всего Guardant.
Но главное: цель достигнута, и теперь я подумываю о расширении памяти до 8-ми Гб.

  • Примечание 1. Поскольку в методике используется dll из первого сервиспака, есть вероятность, что в ней имеются какие-либо уязвимости, закрытые последующими сервиспаками. Я не изучал этот вопрос.
  • Примечание 2. Некоторые драйверы в пропатченой Windows XP могут вызывать BSOD. Впрочем, их крайне мало в природе.
  • Примечание 3. В первоисточнике ценных знаний сообщают, что на некоторых системах имеются проблемы с USB при использовании данной методики. У меня пока проблем нет. По крайней мере, клавиатуры, мышки и флешки работают в штатном режиме.
@sacred1972
карма
23,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (158)

  • +144
    Какое низкое коварство
    Полуживого забавлять

    (с) А.С.Пушкин.
    • +26
      Это вы сейчас очень мягко выразились.
      • +14
        Это не он, это Пушкин. Вот же провидец, вот же сукин сын =)
    • +3
      Повешу повыше.

      Проще поставить рам-диск, разместив его в области памяти выше 3.5 гигов. Некоторые софтины позволяют это делать. По том по вкусу\необходимости перенести на этот рам диск файл подкачки и\или временные файлы системы

      В результате имеем стабильность непропатченой системы и производительность на уровне системы с максимальным объемом памяти.
      • –1
        Просветите, как можно поставить рам диск (мы говорим про диск из оперативки, а не внешний рам-диск — бывают и такие), если ОС держит всего 3.5-4ГБ? Какие софтины могут это делать? Судя по посту вы это делали — ссылку дадите?
        • 0
          habrahabr.ru/post/202406/#comment_6992114

          SuperSpeed RamDisk and RamDisk Plus
          Gavotte RamDisk
          VSuite Ramdisk
        • +2
          Софт это замечательно может делать через PAE, но включение PAE убивает возможность спящего режима со сбросом содержимого RAM на диск, что сводит всю затею в ноль.
          • +5
            Не всем этот спящий режим нужен… Вам шашечки или ехать?)
            • +5
              Мне и шашечки и ехать.
      • –1
        Файл подкачки находится ВНУТРИ 32-битного адресного пространства — при избытке оперативки он не используется (по прямому назначению). Т.е. размещение его на RAM-диске не даёт никакого эффекта (на обычных задачах).
        • +1
          Файл подкачки находится (на IA-32 с включенным PAE) как минимум внутри 36-битного адресного пространства процессора. Это вне зависимости от того, было ли PAE включено только для того, чтобы включить NX (как это и сделано в XP) или же для реального расширения ОЗУ. При включении PAE формат записей в таблицах страниц меняется: появляется третий уровень ссылок, становится возможным адресовать все 64 Гб, просто XP эту возможность намеренно не использует для адресации именно физической памяти.
        • +2
          Файл подкачки находится ВНУТРИ 32-битного адресного пространства — при избытке оперативки он не используется (по прямому назначению).
          Хм, это не так. Или вы как-то не так выразились. Файл подкачки не находится внутри никакого пространства. По сути это просто скопище выгруженных из вирт памяти страниц, которые конкретная ОС хранит в каком-то своём виде.
          • +2
            Не совсем так. Я чуть выше тоже неправду написал. Страницы в файле подкачки находятся в адресном пространстве конкретного процесса. Они же находятся в таблицах страниц, т.е. на них расходуется адресное пространство. Другое дело, что в этих таблицах у них сброшен бит Present, и при обращении к такой странице MMU процессора генерирует исключение Page Fault, которое обрабатывает ОС — разбирается, где там в подкачке эта страница лежит, выделяет для неё блок в физической ОЗУ, загружает туда страницу из подкачки и вписывает в страницу физический адрес блока памяти, который выделен, и устанавливает Present, после чего происходит выход из обработчика и процессор перезапускает провалившуюся операцию.

            Просто вдумайтесь в этот механизм: процессор-то знал, к какому адресу он обращался. Значит, в его пространстве адресов эта страница есть. Правда, эта страница есть именно в линейном пространстве (которое своё для каждого процесса), а Page Fault произошёл именно оттого, что страницы нет в физической памяти.

            Естественно, процессов у нас может быть много, поэтому никакого ограничения «суммарно 4 Гб» или «суммарно 64 Гб» там нет.
            • 0
              Эм… разумеется, всё так, это я прекрасно знаю. Речь о том, что ни файл подкачки, ни отдельные его части не находятся внутри какого-то (какого? чьего?) 32-битного адресного пространства. И заявление «при избытке оперативки он не используется» потому тоже непонятно. Насколько избыток? Да, если её больше, чем требуется реально занятым страницам вирт.памяти всех процессов в сумме — конечно, подкачка не будет использоваться, по определению, т.к. «оперативки» хватает чтобы все эти страницы расположить в физ.памяти.
              Просто вдумайтесь в этот механизм: процессор-то знал, к какому адресу он обращался. Значит, в его пространстве адресов эта страница есть. Правда, эта страница есть именно в линейном пространстве (которое своё для каждого процесса), а Page Fault произошёл именно оттого, что страницы нет в физической памяти.

              Ну да, ни процессор, ни процесс не знают где лежит конкретная страница виртуальных 4гб выделенных каждому процессу — где-то в физической озу (неизвестно где), либо в файле подкачки, либо где-то ещё (это ОС решает как подкачку предоставлять по page fault в том числе) — так и задумывалось. Потому я и написал, что файл подкачки — фактически неупорядоченная куча выгруженных ОС страниц памяти. Что именно «не совсем так» то?
              • 0
                Файл подкачки фактически используется всегда, даже если памяти в «достатке». Система пользуется подкачкой мудро — всегда держит в резерве определенный объем памяти, чтобы если вот вот приложению понадобится память то не выгружать в своп для освобождения памяти для приложения в момент запроса а дать ему память сразу. Механизм очень сложен, нельзя сказать что своп вообще не используется пока памяти достаточно.
                • +1
                  Файл подкачки фактически используется всегда, даже если памяти в «достатке». Система пользуется подкачкой мудро
                  Это всё решает конкретная ОС в, о чём и речь. Всё что я хотел сказать своими комментариями: то, что высказывание про какой-то там упорядоченный своп находящийся в адресном пространстве итд итп — некорректны.
                  нельзя сказать что своп вообще не используется пока памяти достаточно
                  Ну это не я сказал. Хотя теоретически так оно и есть при должном запасе физ.памяти, но это планировщик решает уже. Возможно, можно это в отдельных случаях и отдельных ОС и платформах настраивать всё. Всё это настолько платформозависимо вообще, что спорить про то как оно там есть вообще странно.
        • 0
          Как только вы забьете оперативную память — тут же начнет использоваться по прямому назначению.
      • –1
        Win Server 2003 «видит больше 4х ГБ из коробки», т.е. использует PAE, проблем это не вызывает, да и не может, поскольку файл подкачки уже использует расширенный режим.
        • +1
          Без наличия драйверов разработанных с учетом PAE и Server 2003 Вы столкнетесь с теми же трудностями.
    • +1
      Интересно, написали вы бы эту цитату в гипотетическую статью под заголовком: «640кб хватит не всем: доступно о himem.sys и emm386.exe»?
  • +21
    Идея и реализация классная. Но почему бы не поставить х64 ОС и более новую?
    • +1
      Иногда нужна именно 32-битная ОС. Например, 64-битная винда не умеет 16-битные и досовые программы запускать.
      • +19
        Для этого есть ДосБокс
        • +13
          Видимо речь идет не о поделках, а государственном/военном ПО.
          Не царское это дело, инновационным программам в эмуляторе летать.
          • +3
            Друг админил в детской поликлиние и больнице, обслуживал штук 6-7 зданий. Часть софта крутилась именно в DosBox, ибо даже в Win98 оно глючило, а в Windows XP совсем не запускалось.
          • +3
            Например есть софт под дос, который уже очень долго не поддерживается. Вот под него такая винда очень актуальна. Приведу время работы довольно стандартного прогона в разных режимах на Core2Quad 2,4 ГГц
            1. Win (любой) x32 — 20 минут
            2. Win7 x64 — MS VirtualPC — 1 час
            3. Win7 x64 — VM VirtualBox — 4 часа
            4. Win7 x64 — DosBox — неделя (точное время не замерял :), но пробные запуски показали примено такой прогноз)

            От запуска на win9x нас спасло то, что нашли подходящий Dos4gw, который на XP/7 нормально работает.
          • +1
            Ох, мы вот страдаем от этого временами. Партия сказала x86, значит x86!
            • 0
              Ничего против x86 не имею. Меня больше расстраивает надстройка x86_64. По-моему она должна была произойти в сторону x86_48: туда влезает все что нужно, и на телефоны подойдет.
    • –7
      Ставил. Вот даже сейчас стоит целых две Windows 7 32 и 64 бит. Как-то оно всё «не так». Интерфейс у семёрки мне нравится, много новых удобных моментов. Технически она более совершенна, спору нет. Но вот из формализуемого: с теми же самыми программами, в 7-ке я упираюсь в нехватку памяти (у меня сейчас 4 Гб), а на XP32 при её 3.25 доступных памяти нехватка встречалась много реже, а сейчас при 4-х, вообще запас. Прокрутка мышью во многих программах на XP — плавная, на 7-ке дёрганая, а иногда вообще замерзает на некоторое время. Но это, конечно на моём железе. Т.е. был вариант расширить память и жить на 7-ке. Но что делать с плавностью? Менять комп целиком. Он у меня старенький. Так видимо и случится: поменяю комп, на него и поставлю современную систему.
      Ну и ещё момент, два раза я переходил с 7-ки назад на XP не из-за вышеописанных причин, а потому, что система просто умирала. Не помню, что было в первый раз, а нынче она просто загружается в тёмный (чёрный?) экран без иконок и без чего-либо ещё, только одинокий мышиный курсор ездит по экрану. А с XP я чего только не делал, поднималась отовсюду. Я даже её внутрь виртуальной машины помещал, имею ввиду не с нуля установил, а рабочую мою XP, когда в первый раз на 7-ку перешёл. Чтобы плавность перехода обеспечить. Такое моё субъективное ощущение, что XP — лёгкая, а 7-ка тяжёлая. Пока не для моего железа.
      • 0
        Оперативка сейчас стоит вообще копейки. Не хватает — купите 8. Я год назад две палки по 4 Гб брал за 1.1к деревянных.
        • +23
          Не «палки», а «планки». «Две палки» — это совсем про другое ;-)
        • +1
          Оперативка уже почти как год в стоимости поднялась. Причем скакнув сразу в 2 раза.
        • +1
          Копейки она стоила года полтора назад, сейчас подорожала в 2-3 раза.
        • +1
          Допустим если у человека действительно старый системник, и там еще память DDR (которая 1), то: а) найти такую память может быть затруднительно б) она стоит не очень дешево. Ситуация с DDR2 лучше, но тоже далека от идеала.
      • –2
        Что планируете делать со своей операционной системой после 8 апреля 2014? Там вроде бы как хочешь не хочешь, а ставь минимум 7 (Vista не ОСь).
        • +2
          А что с ней может сделаться то?
          Вроде про тайм-бомбы не слышал.
          А то, что официальная поддержка загнётся — ну и хрен с ней! Вы часто к ней обращаетесь на домашнем (и даже не на домашнем) десктопе?

          У нас вот в бухгалтерии трудится машина на Win2000. Отлично справляется!
          • 0
            А как же обновления безопасности? Они же тоже перестанут выходить. К тому же, когда поддержка XP будет официально прекращена, производители прикладного ПО вздохнут с облегчением и тоже официально перестанут поддерживать XP.
            • +3
              После таких манипуляций о безопасности не задумываешься
              • +2
                После таких манипуляций патчи лучше не ставить — перепишут пропатченый файл вдруг.
            • +1
              … вот и слава богу.
          • +1
            Дело не в поддержке в том виде, в котором это кажется. А в том, что прекращается поддержка разработчиков. Новые программы резко начнут переставать поддерживать XP. Начнутся приличные проблемы с этим, и уже придется мириться со старыми версиям программ. Примерно также как сейчас с 2000 и NT. Использовать их можно и сейчас, но вот программы будут вставать с трудом.
      • +3
        Сдается мне, что-то с Вашим железом (или драйверами) не то (как вариант — видеокарта). У меня на куче машин с 4Гб памяти уже в течении лет 5ти семерка очень шустро бегает и есть не просит. Даже на стареньком ноуте 2005г с 2Гб памяти она шустро бегала, чему я сам был, мягко говоря, удивлен. И нигде не наблюдал симптомов, описанных Вами, разве что на глючном железе и/или драйверах.
        С другой стороны, если Ваши задачи требуют много памяти — может задуматься о смене железа? Ибо многопроцессорность — она да, очень хорошо, а так же ssd и минимум 8Гб памяти.
        • +1
          Отрицать тот факт, что один и тот же процесс с одним и тем же софтом в семёрке потребляет процентов на 30 памяти больше, чем в хрю — бессмысленно. Да просто настройте там и там дистпетчер задач на отображение одних и тех же колонок и увидите (по умолчанию настроено по-разному, говорят, как раз чтобы скрыть факт увеличившегося потребления памяти).
          Так что вполне возможно, что есть задачи, которым хватает 4G в XP и мало — в 7-ке. На вполне нормальном оборудовании и беспроблемных драйверах.
          • 0
            Да, а в вин 98 еще меньше! А в MS DOS так вообще праздник. Как Вы думаете, почему они сейчас почти не встречаются? :)
            Вопрос в задачах. Если для них требуется много памяти и более новое железо, то логично сменить железку вместе с ОС. Как было у меня: старый ноут с хрюнделем всем устраивал, но тут понадобилось запустить ide… и потопал я в магазин за новым ноутом с ssd, многоядер, многопамяти и win8 ia64.
            Да, ОС может предоставлять некоторый оверхед под свои нужды. Та же архитектура ia64 подразумевает бОльший расход памяти для приложения, чем в случае x86-32. Но оно идет на дело.
            Все просто: если взять 2 машины нормальной современной конфигурации, например core i5 4 ядра, 8Гб памяти и ssd на 128Гб, и поставить туда win xp, и win 7, то на 7ке все будет ГОРАЗДО быстрее (и стабильнее). Проверено.
            • +2
              Где ж вы ноут на IA64 (Intel Itanium, если что) нашли?

              Core i3/i5/i7 никогда не были IA64. Они x86_64/AMD64/EM64T.
            • 0
              Все просто: если взять 2 машины нормальной современной конфигурации, например core i5 4 ядра, 8Гб памяти и ssd на 128Гб, и поставить туда win xp, и win 7, то на 7ке все будет ГОРАЗДО быстрее (и стабильнее). Проверено.

              А если там собрать Gentoo (на такой машине соберётся быстро), то всё будет ещё быстрее и стабильнее. Проверено.

              С чем вы спорите? Факт, что потребление выросло. Из этого факта — прямое следствие, что в одном случае для некоторой задачи 4G может хватать, в другом может не хватать. Мы говорим об этом, а не о стабильности и быстроте.

              Речь идёт не про то, сколько памяти требуется для работы самой системы (хотя, гигабайты памяти только для работы некоей сервисной прослойки — это очень чересчур). Вопрос про потребление памяти прикладными программами, которые даже разрабатывали не в мокросовте.
              Почему в новой ОС те же самые прикладные задачи занимают больше памяти? В моём понимании, один и тот же самый код на одном и том же оборудовании на одной и той же задаче в любой ОС должен потреблять одинаковое количество приватной оперативной памяти. Конечно, библиотеки и интерфейсы ОС могут потреблять другое число, но сами структуры данных-то программы не менялись, с чего бы им занимать больше места?
              А вот занимают. И это явный недостаток ОС.
              • –1
                С чего это вдруг должны? Потребление памяти зависит от таких мелочей как оптимизация программы при компиляции, выравнивание структур данных и областей памяти программой и т.д.
                Как минимум в x64 изменились размеры указателей в 2 раза… а для запуска x32 приложений используются прослойки и «эмуляторы» которые требуют своего куска памяти и т.д. и т.п.
                • 0
                  Конечно, разные компиляторы, разные архитектуры и так далее.

                  Я же говорю про
                  один и тот же самый код на одном и том же оборудовании на одной и той же задаче

                  Один раз скомпилировали, ничего не меняли. Запускаем на XP и на 7 x32. На 7 потребляется на 30% больше памяти.
                  Ещё раз: программу не перекомпилировали, архитектура не менялась. Памяти потребляет больше.
                  Как?
                  • +1
                    Подключенные DLL-ки память приложения тоже жрут. на Win7 парочка библиотек со строками в юникоде — и уже прибавка в объеме. Даже если приложению непосредственно они не нужны, они могут быть загружены другой DLL или присоединены к процессу другим приложением вроде антивирусника. От версии к версии этих добавок все больше и больше…
                    В итоге к какому-нибудь приложению вроде блокнота в результате сложных зависимостей может присосаться глупая библиотека видеокодека, чтобы в диалоге выбора файлов иметь возможность отобразить превью видеофайлов которые приложению и не сдались вовсе, но диалог-то стандартный на все приложения.
                    Есть такая утилита procexp.exe — расширенный диспетчер задач, который вполне способен показать кто и чем занял память приложения. Там всплывают весьма забавные вещи…
                    К сожалению, Win7 под рукой нет чтобы сравнить, но думаю эта утилита даст ответ на вопрос.
      • 0
        Скорей всего у вас с дровами на видео проблемы какие-то. Не знаю насчет Вашего железа, но на «детском» процессоре нетбука с 2Гб памяти 7-я винда чувствует себя прекрасно и тормозит почему-то меньше чем настольный на ХП, хотя процессор там раз в 5 мощнее.
        Разница ощущается только на играх, что вобщем-то вполне ожидаемо.
  • +8
    Операционной системе 12 лет. Зачем?
    • –12
      -
    • +7
      Знаете, честно говоря, основная причина: мне было интересно. Вторая основная причина: с тех самых пор, как на материнке стало 4 гигабайта, меня грыз червяк неудовлетворённости из-за того, что XP их не видит полностью. Неаккуратненько как-то! Ну и просто так сложилось: я в очередной раз вернулся с 7-ки на XP, меня погрыз червь перфекционизма и пошарив по сусекам интернета, я нашёл информацию о возможном решении, каковое мне незамедлительно захотелось проверить. А поскольку в рунете описаний аналогичного решения мне не встречалось, я решил поделиться им со всеми через многоуважаемую площадку хабра.
    • +2
      Я на некоторых предприятиях наблюдаю не то, что XP, там даже WIn 95 на некоторых машинах до сих пор стоит)
      • 0
        Я и DOS частенько наблюдаю.
        • +1
          Многие промышленные станки под DOS работают. Причем иногда там не просто управление движками, а небольшой графический редактор даже. Видел станок с DOS-версией AutoCAD. Прямо в станке начертил и он работает. Можно всё обновить до win8, благо софт там не сложный для написания, но зачем?
          • +1
            Нельзя. Реалтайм не позволит.
            По крайней мере, на том станке, на котором я работал.
            Станок тупо шлет пакеты через определенные интервалы времени. И так же их принимает.
            Под виндой не прокатит — перехватил какой процесс управление и можно помахать рукой заготовке.
            • 0
              Можно, если поставить например Real Time eXtension.
              • 0
                Тот RTX для винды, который используется у нас стоит каких-то очень больших денег. Зачем это надо, если можно обойтись?
                • 0
                  Я опроверг утверждение «Нельзя». А зачем это уже другой вопрос, как и вопрос стоимости.

                  Кстати, если денег нет, существуют Real-time ядра для Linux и *BSD.
                  • 0
                    Да, я в курсе, у нас по каким-то причинам используется винда для этих целей. Подробности не знаю.
    • 0
      12 лет? Собираетесь подать на автора в суд за любовь к несовершеннолетним?
  • 0
    Крушение устоев. Из последнего предложения следует, что ОС и 8ГБ увидит и сможет адресовать? Но, кажется, основная причина перехода на х64 была как раз в невозможности адресовать выше 4ГБ ОЗУ, нас обманули?
    • +4
    • +22
      Вкратце — да, 64 бит не нужно, чтобы увидеть более 4Гб. Windows Server 2003 (32-бит), к примеру, может видеть до 128 Гб памяти. Используется PAE — страничная организация памяти. Т.е. в каждый конкретный момент каждая конкретная программа может адресовать не более 4Гб, но в режиме PAE этим 4Гб адресов программы необязательно соответствуют ПЕРВЫЕ 4Гб памяти, и вообще для каждой из программ эти 4Гб могут находится в разных местах физической памяти. Память распределяется окнами, и эти окна можно двигать по всей доступной памяти. Это всё происходит незаметно для программ, на уровне операционки. Программы считают, что вот — есть 4Гб адресов и всё. Т.е. обычная программа не умеет адресовать больше. Хотя 32-битный софт, написанный специальным образом, может адресовать всю доступную память, например MS SQL Server 32 бит умеет использовать более 4Гб для себя, естественно, при условии поддержки со стороны ОС. Страничная организация сложнее в программировании, поэтому таких программ исчезающе мало. Под 64 бит использовать в программе много памяти легко, однако каждый указатель занимает вдвое больше места. А подробнее можно прочитать по первой ссылке в моём посте.
      • +3
        Хех, а я все время считал, что РАЕ это костыль на жалкие 0.75ГБ.
      • 0
        Вкратце — да, 64 бит не нужно, чтобы увидеть более 4Гб. Windows Server 2003 (32-бит), к примеру, может видеть до 128 Гб памяти.

        Враньё, адресная шина IA-32 процессора — 36 бит, так что 32-битная ОС может адресовать не больше 64 гигабайт. (Ну то есть, никакя вообще ОС, будь то редакция винды или ещё что-то.)

        Откуда вы взяли 128 — не понимаю. И Microsoft со мной вполне согласен.
        • НЛО прилетело и опубликовало эту надпись здесь
          • +3
            В спектруме это было, да. Но там и система проектировалась с поддержкой банков памяти. В архитектуре IA-32 нет никакой поддержки этого процессором и софта (ОС) такого нет. Ну то есть, переключая банки вы можете адресовать и терабайт, вы не сможете закодировать например инструкцию «JMP переключиться в такой-то банк на такой-то адрес», такие «кросс-банк джампы» придётся делать вручную. И соответственно будут проблемы с обработчиками прерываний (предствьте: пришло прерывание, а у нас активен не тот банк, а процессор про банки вообще ничего не знает. Гейт прерывания переключает процессор туда, а а там вообще не то, double fault, и всё на этом).

            Так что именно на IA-32 банков никаких нет и 64Гб — жёсткий предел. Кстати говоря, и объём файла подкачки тоже ограничен этим размером, т.к. технически все страницы в подкачке адресуемы процессором.

            Когда-то во времена 8086 были популярны платы EMS (Expanded Memory), которые вставлялись в ISA-слот, содержали несколько мегабайт памяти на борту и доступ к ней осуществлялся через переключение банков по 32 или 64 кбайт, которые отображались на блоки адресов, начиная с 0xE0000 и 0xD0000, если не мне не изменяет память. Это уже потом появились процессоры с 24-битной и 32-битной адресной шиной, которые смогли адресовать много основной памяти.
            • НЛО прилетело и опубликовало эту надпись здесь
            • 0
              Так что именно на IA-32 банков никаких нет и 64Гб — жёсткий предел. Кстати говоря, и объём файла подкачки тоже ограничен этим размером, т.к. технически все страницы в подкачке адресуемы процессором.

              Вот это я, конечно, написал неправду. Нет такого ограничения, и про формат и адресацию внутри файла подкачки процессору ничего не известно.
            • 0
              О да, EMS был таким наикостылёнышным костылём, что описанная в этом посте процедура кажется просто детсадовской шалостью по сравнению с ним. Причём в этой памяти могли хранится только данные. Занятно, что спецификация EMS появилась через три года после появления 286 и в тот же год как и 386. Первый мог уже адресовать 16 Мб, а второй аж 4 Гб. Но досовское наследие никак не могло отпустить.
              • 0
                Так софта понаписали к этому времени. Поэтому первое время лишнюю память использовали как EMS — отображали страницы из верхних мегабайтов на те же самые адреса 0xE0000 :) Точнее, не всегда даже отображали, иногда просто копировали туда-сюда.
        • +2
          Действительно про 128 Гб это я нагло соврал. 64, конечно же. Спасибо за ценное замечание.
      • +1
        32-битный софт не может адресовать более 4Гб в любом случае. Независимо от «написания специальным образом». Но вот иметь доступ (это не то же самое, что просто адресовать) может гораздо больше. «специальным образом написанный» может сам переключать страницы. Любой другой — может работать с дисковыми файлами (которые никто не мешает на уровне системы замапить в рамдиск).
        • +1
          Это опять же 4 (на самом деле 2, при особой настройке 3 гб) на один процесс. Например, Firebird в режиме Classic запускает по одному процессу на каждое соединение, так что в целом сервер может сожрать несколькими процессами больше 4-х.
        • 0
          Да, конечно, именно это и имел в виду, некорректно выразился.
          • 0
            Кстати да, эта ошибка есть в английской википедии. Там написано 128, чего быть не может.
      • 0
        Еще раз кратко суть, можно?
        Я правильно понимаю: х32-программа (1 процесс) может использовать max 4 gb, а x64 — больше?
        Это и вся разница по большому счету?
        • 0
          Да, правильно.

          (Позанудствую: ещё в 64-битном режиме регистры процессора больше, т.е. операции например сложения 64-битных чисел становятся быстрее. А ещё регистров в этом режиме в два раза больше — в некоторых случаях компилятор умеет обходиться ими, не дёргаться постоянно к ОЗУ и таким образом экономить нагрузку на шину памяти, что тоже может ускорить работу программы.)
    • +2
      Но, кажется, основная причина перехода на х64 была как раз в невозможности адресовать выше 4ГБ ОЗУ, нас обманули?

      Да. Ограничение в 4GB — это фикция, абстрактное число, которое прописано в файле лицензии.

      Вот отличная статья про потроха ядра во всех деталях: www.geoffchappell.com/notes/windows/license/memory.htm
      • 0
        Нет, не в файле лицензии, а в том же самом hal.dll. По крайней мере, в 2003 Standard hal отличается от hal в 2003 Datacenter.
      • +2
        О, спасибо за отличную статью! Многое разъяснила вкупе с комментариями здесь. кое-что стало понятнее, а причин любить Линукс стало на одну больше =)
    • 0
      Кроме адресования памяти ядром есть еще проблема адресования памяти процессом. В 32-битной винде ограничение на процесс 2 ГБ, кажется опция ядра /3GB увеличивает до 3-х. Но все равно это мало для серьезного инженерного софта, например, где моделька может быть и 10 ГБ.
      • 0
        Если мне не изменяет память, есть какие-то апи для возможности адресования более двух Гб для 32-битных программ с расширением указателей, вроде, до 40 бит.
    • +2
      Вообще-то процессор начиная с Pentium Pro имеет шину адреса памяти 36 бит, т.е. уже способен адресовать до 64 Гб ОЗУ. Начиная с Pentium Pro. Было два механизма для этого — PAE и PSE36.

  • +1
    Плохо только что SP1, ИМХО
    • +2
      Ну от SP1 там только один 130-килобайтный файлик. Насколько он уязвим можно выяснить, я думаю, прошерстив сайт Microsoft на предмет критических уязвимостей. Но пока — да, это неизвестно.
  • –10
    Хватит уже насиловать труп.
    Поставьте себе Windows 7, 8.1, Server 2008r2, server 2012r2, линукс наконец, поднимите в нём виртуальную машину на hyper-v, vmware player, virtualbox, dosbox, запустите в виртуалке разное старье, и прочие эксперименты и живите себе счастливо.
    • +11
      Наверное к автору статьи это не относится, но я сталкивался с тем, что есть специфическое оборудование, драйвера на которое бывают только для ХР. Конкретно в моем случае это 24-битный ЦАП на 16 каналов, карта с драйверами для шаговых двигателей и т.п. Так что далеко не все можно решить новыми операционками.
      • –8
        С точки зрения безопасности оборудование, работающее под такими устаревшими версиями ОС даже в локалку выпускать нельзя, не то, что в интернет. И пускают к ним обычно или сертифицированного своего специалиста для работы или сертифицированный персонал вендора для настройки.
        И трогать его тоже обычно очень не рекомендуется, но что-то со слов автора не видно, что он трясётся над управляющей машиной, например станка, стоимость простоя которого вполне может исчисляться миллионами, а попытка влезть в рабочую систему чревата потерей гарантии от вендора.

        Уже не считая того, что во начале второго абзаца поста ясно указано, что это личная машина, с которой «что хочу, то верчу»

        Кстати, для Вашего случая обычно используется стандартная практика инженеров СЦ — почта, месенжеры, crm на нормальом компе на современной ОС как рабочая станция плюс тестовая машинка которую можно хоть каждое утро инженеру переставлять, и которая таки да используется как программатор, доступ ко всяким хитрым железкам через хитрые интерфейсы, которые кстати вполне могут жить до сих пор под win 9x.
        • +1
          Видел у нас в городе в одной поликлинике рентгеновский аппарат такой. Специальная карточка в компе и 98-я винда.
          Проблемы были, потому, что приходилось отдельно настраивать 2008R2 на сервере, чтобы она согласилась работать с 98-й. Из коробки — никак не работала.
        • 0
          Это и есть лабораторный комп, не для почты и всего остального. На рабочем крутится 7-ка х64, на серверах для расчетов тоже *nix/win* х64, для всего свое место. Кстати, обновления безопасности для ХР еще выходят (до 8 апреля 2014). Дома — да, вариантов побольше, но все же, если автору нравится эта система, то не вижу причины от нее отказываться (тем более, он знает на что идет, а ХР х64 далеко не так хороша, как х86).
  • +9
    > надо найти последовательность
    > BB 00 00 10 00 33 FF 6A 07 8B F0 и заменить её на
    > BB 00 00 40 00 33 FF 6A 07 8B F0

    Это вам не KDE патчить :)
  • 0
    Если все так просто, почему же MS сделало такие ограничения? И все таки я не понимаю что произойдет в этом случае когда процесс попытается занять больше памяти чем операционная система может адресовать?
    • +4
      Говорят, ограничения были введены по причине наличия несовместимых (читай кривых) с данным режимом драйверов. Однако, уже начиная с Windows Vista 32bit ограничения носят чисто лицензионно-маркетинговый характер, см. статью, рекомедованную чуть выше в комментариях Athari.
      По второму вопросу: обычный процесс не может адресовать более 4Гб в любом случае. Просто в непропатченном Windows на все процессы суммарно имеется не более 4 Гб (на самом деле меньши, из-за адресов оборудования). А в пропатченной каждый процесс может использовать всё равно не более 2 (или 3, если с ключом /3Gb) Гб единолично, а суммарно — сколько есть памяти.
    • 0
      И все таки я не понимаю что произойдет в этом случае когда процесс попытается занять больше памяти чем операционная система может адресовать?
      Если он изначально меньше 2-3 гб, а плавно набирает память во время работы — в какой-то момент он просто падает.
      • +2
        Точнее, на попытку выделения памяти ему говорят «нет памяти». Уж упадёт он или обработает это — вопрос второй.
  • +7
    Мне нравится Ваш путь решения проблемы, но на самом деле Misrosoft уже имеет довольно комфортный путь решения этой проблемы — использование файлов подкачки. Нужно только приложить немного умения и смекалки: если создать виртуальный RAM-диск и задать на нём своп-файл, то на самом деле мы получим ту же возможность использования доступной памяти выше лимита в 4 (а точнее около 3.25 в SP3) Гб памяти. Есть немало рам-дисков, и в их списке точно есть такие, с которыми данный трюк прекрасно работает — я лично проверял.
    Как видите, всё гениальное — просто.
    • 0
      Когда приложение обратится к откачанной странице, произойдет исключительная ситуация PageFault. Обработчик этого события должен проверить, была ли ранее откачана запрошенная страница, и, если она есть в swap-файле, загрузить ее обратно в память.

      Предложенное в статье решение работает намного быстрее, тут много накладных расходов.
      • 0
        Ваша правда. Но с другой стороны — потери в скорости явно несущественные и кривые дрова явно не приведут к BSOD-у из-за PAE (чего Microsoft и опасалась при работе ОС в этом режиме, т.к. далеко не все производители драйверов тестировали свои дрова при включённом PAE).
    • 0
      Трюк работает замечательно, но этот трюк к сожалению не совместим со спящим режимом. Т.к. виндовс всеравно не может получить доступ ко всему объему памяти чтобы сбросить его на диск.
      • 0
        С Hibernate не пробовал, но со Sleep работает — я постоянно этим пользуюсь под Win7x64: у меня при загрузке создаётся 2Гб виртуальный диск ImDisk, который я использую как временный раздел (но не файл подкачки). При том самое приятное, что пока диск не используется, общий объем виртуальной памяти на него не расходуется. После выхода из режима сна все данные, что раньше были на диске, сохраняются (кэширования на винт не происходит).
        • 0
          Win7x64 никаких проблем с этим нет — ей вся память доступна и может быть в любой момент сброшена на диск. Проблема касается 32-х битных систем с более чем 3Гб RAM при использовании недоступного системе остатка в качестве RAM-диска.
    • 0
      а по-этому поводу есть какая-то статья на русском?
  • +4
    Не обязательно качать всю Windows XP SP1 — одного сервис пака хватит. Вот линк на SP1, если кому надо.
    Собрал все нужные файлы и два пропатченных ядра — на 16 и 32 гигабайта в архив, скачать можно тут.
    Т.к. у меня есть только 16 гигабайт ОЗУ — то и проверить будет ли версия ядра на 32 ГБ видеть больше я не знаю.
    Вот на виртуалке спокойно увидела все 11 Гб:
    Скриншот

    • 0
      а на 8 Гб оперативки в чем отличие в файлах будет?
      • +1
        В одном байте. Стандартное ядро:
        BB 00 00 10 00 33 FF 6A 07 8B F0
        8 Гб:
        BB 00 00 20 00 33 FF 6A 07 8B F0
        16 Гб:
        BB 00 00 40 00 33 FF 6A 07 8B F0
        32 Гб:
        BB 00 00 80 00 33 FF 6A 07 8B F0
    • 0
      Такие хаки лучше сразу в инсталлер внедрять (перепаковать makecab-ом и заменить соотвествующие файлы дистрибутива). Также после изменения PE-файла стоит править CRC32 — иногда ОС проверяет контрольную сумму файла и теоретически может ругнуться.
      • 0
        Так ведь и не было такой задачи. Вообще, есть же XP SP2 x64 — кому надо её и используют. Там даже некоторые x64 приложения работают.
        • 0
          Я слышал, что она вообще повышенной надежностью отличается.
    • 0
      Ядро необходимо патчить самому, оно у всех разное, даже если версия одна.
  • 0
    Если системный диск зашифрован трукриптом — то без расшифровки всего диска этот способ применить нельзя?
    • 0
      Ну так само-собой. Ведь если весь диск зашифрован, то для добавления туда файлов его конечно надо расшифровать.
    • 0
      Невнимательно читал.
      Из системных файлов надо изменить только boot.ini, остальные можно просто скопировать.
      Вечером проверю этот способ + трукрипт на виртуалке, если сработает, то потом на основной системе.
      • 0
        Расскажу свою историю сегодняшнего вечера.
        Сначала попробовал этот способ на чистой виртуалке с выложенными выше патчеными файлами — все сработало как надо (как мне казалось).
        Поставил на рабочую систему — не загружается, черный экран. Заменил halmacpi.dll на halacpi.dll — загрузилось, стало видеть полную память, но только 1 ядро процессора из 4. Причем даже в основной системе после перезагрузки. Погуглил, оказалось что для возврата 4 ядер нужно запустить /kernel=ntkrnlmp.exe /hal=halmacpi.dll — действительно, смог вернуть 4 ядра.
        После этого пропатчил свой ntkrnlpa.exe — винда стала запускаться, но синий экран. А так как система старая и ненужных программ нету, просто прекратил дальнейшие действия.
        • 0
          Upd.
          Оказывается, halmacpi.dll стоял от sp3 — заменил на sp1, все заработало.
          Загружаться стало чуть дольше, но видит и полную память, и 4 ядра.

          Вывод — четко следуйте инструкциям и ядро патчите сами, а не используйте чужое — и все будет хорошо.
  • 0
    Притом, надо отметить, что семёрка была хоть и 32-х битная, но в ней была разблокирована возможность видеть всю доступную память. Способ разблокировки доступен в Интернет.

    Был бы очень благодарен за ссылку на рабочий способ. Сколько не пробовал — ни разу не находил рабочего :( Win7HP, SP1
    • 0
      чуть выше — habrahabr.ru/post/202406/#comment_6991806

      > Сколько _не_ пробовал
      Не попробовав и не получится :)
      • 0
        Не пробовал ни пробовать ;) статья-то хорошая, да вот версия ядра уже 6.1.7601.18247. К тому же, наконец, хочется получить одну кнопку «сделать хорошо». Буду благодарен за ссылку на рабочий патч
        • 0
          Насчёт совсем одной кнопки — фигушки, но вот поделиться тем что есть и то что работало у меня в течение пары лет, не жалко.
          yadi.sk/d/u_Jtju0pCt2yE
          (теги не могу)
          • 0
            Ezhyg, ссылка померла,
            не перевыложите ли снова?

            Спасибо.
            • +1
              ой, «сделал перестановку» называется :) (переупорядочил файлы и симлинк померла, вертаю взад)

              https://yadi.sk/d/l8hLfMJ5ruiPU
              (теги всё так же не могу)
    • +1
      wj32.org/wp/2016/02/01/pae-patch-updated-for-windows-10/
      github.com/wj32/PatchPae2
      Tested on: Windows Vista SP2, Windows 7 SP0, Windows 7 SP1, Windows 8, Windows 8.1, Windows 10 (build 10586)
  • 0
    Сорри за глупый вопрос — но где-то вычитал (не могу вспомнить где), что такое предоставление памяти системы — только позволяет ее отображать в диспечере задач и в свойствах. Но по факту, система не сможет заюзать больше 3,7… Так вопрос: Смогли ли нагрузить систему, выше 4-ех?
    • 0
      Может-может. Почитайте про PAE и memory mapping лучше и станет ясно как это происходит. Если подумать, то наверное и больше 4х можно было бы попытаться запихнуть… хотя что-то может и отвалиться… ой может…

      Лучше бы не влезать в это безумие, по-хорошему-то
    • –1
      Вот, попробовал загрузить. Всё работает без сбоев.

      Как видно свободной памяти осталось 112 Мб из 4-х Гб. Больше вручную нагрузить труднее, система начинает скидывать в файл подкачки.
      • 0
        Больше вручную нагрузить труднее
        Архиваторы очень хорошо умеют выжирать практически всю оставшуюся ОЗУ, правда иногда это чревато глубоким зависанием ОС
  • НЛО прилетело и опубликовало эту надпись здесь
    • +2
      Примерно такие

      #define MAX_MEM 1000h
      if (memSize>MAX_MEM) memSize=MAX_MEM   // Ha-ha-ha!
      
  • 0
    Мне одному кажется, что все эти действия — нарушение EULA?
    • +1
      У нас у половины страны нарушение лицензии и без этого :-)
    • 0
      В соответствии со ст. 25 Закона РФ «Об авторском праве и смежных правах», лицо, правомерно владеющее экземпляром программы для ЭВМ, вправе без получения разрешения автора или иного обладателя исключительных прав на использование произведения и без выплаты дополнительного вознаграждения внести в программу для ЭВМ или базу данных изменения, осуществляемые исключительно в целях ее функционирования на технических средствах пользователя, осуществлять любые действия, связанные с функционированием программы для ЭВМ или базы данных в соответствии с ее назначением, а также исправление явных ошибок, если иное не предусмотрено договором с автором.

      В eula есть пункт:
      4. LIMITATIONS ON REVERSE ENGINEERING, DECOMPILATION, AND
      DISASSEMBLY. You may not reverse engineer, decompile, or disassemble
      the Software, except and only to the extent that such activity is
      expressly permitted by applicable law notwithstanding this limitation.

      Можно ли посчитать то что зделал автор реверс инжинирингом, декомпиляцией или дизасемблированием?

      Ну и тут с одной стороны «such activity is
      expressly permitted by applicable law notwithstanding this limitation» с другой «если иное не предусмотрено договором с автором.» кто кому уступает в этом случае?
      • 0
        Почитал первоисточник и понял, что я спутал EULA к XP с более поздними EULA, которые запрещают модификации, которые обходят ограничения.
        Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. For more information, see www.microsoft.com/licensing/userights.
        Но для XP все проще, там можно, там даже не запрещено хачить винду с целью обхода регистрации.
        • 0
          В нашем законодательстве закреплено право на адаптацию ПО в личных целях.

          Т.е. сделать такую штуку кому-то нельзя. Себе можно. И в EULA прописано на этот случай, что «если какие-то части EULA не соответствуют местному законодательству, они игнорируются, а остальные продолжают действовать» — если бы этого не было, сам факт наличия такого закона у нас отменял бы это соглашение полностью :)
          • 0
            В нашем законодательстве закреплено право на адаптацию ПО в личных целях.
            Засомневался, пошёл читать ГК.
            Статья 1273 только про воспроизведение в личных целях.
            В статье 1280 разрешается «внесение в программу для ЭВМ или базу данных изменений исключительно в целях их функционирования на технических средствах пользователя», но только для лиц, правомерно владеющих экземпляром программы.
            Выходит, для потрошения платного софта надо его купить?
            • +1
              Не обязательно, но, а как вы хотели?
              Правомерность — те же 30 дней (или другой срок) пробного периода вполне себе ;).
              • 0
                А, действительно ж, это меняет дело.

                Правда если вести речь про Windows, то на пробу Microsoft даёт скачать только Enterprise редакцию последней версии ОС, которая через 90 дней не только обои на чёрный фон сменит, но и должна вырубаться каждый час. Уж не знаю, распространяется ли на энтерпрайз трюк, которым можно разблокировать установку из того же образа других редакций, и если да, установится ли при этом и упомянутая бомбочка отложенного действия, это уже тянет на тему совсем другой статьи о других модицикациях.
                • 0
                  Источник получения дистрибутива не важен — «брал с официального сайта, давно, не помню». Главное чтобы довеском не шло готовое «лекарство».
  • 0
    А для win7x32 такое можно сделать?
    • 0
      Windows 7 проще переустановить на x64 версию. В отличие от Windows 7 установка WinXP x64 скорее принесла бы больше проблем чем пользы. Windows 7 x64 сегодня спокойно можно использовать не беспокоясь за совместимость с x86 ПО.
      • 0
        И если есть много места под папочку WinSXS, куда попадают все варианты версий используемых DLL-библиотек когда-либо устанавливавшихся программ.
        • 0
          Эта проблема была актуальна с Vista. Windows 7 у меня года 4 на ноуте стоит со всеми обновлениями и не пожирает место за счет WinSXS как это делала Vista.
          • 0
            SXS характерна 64-битной винде при установке на нее 32-битных приложений, вы видимо успешно перешли на 64 бита и проблем не знаете. Есть вероятность, что вы проблем просто не замечаете.
            • 0
              Конечно успешно :) Но это не отменяет факта того, что половина софта все равно x86. Если интересно могу замерить размер данной папки вечером. Пока скажу лишь, что при жесткий диск у меня 500гб.
              • 0
                Проблема этой папки в том что это очень сложная система хард-линков, непонятно где именно лежит реальный файл.
                • –1
                  WinDirStat, учитывающий симлинки при подсчете размера папок, насчитал 17,6 гб. Это на 3 гб больше размера установленого StarCraft II.
                  С моей точки зрения, такой объем на сегодня уже не представляет проблем.
                  • 0
                    Судя по минусу к предыдущему коментатию, кому-то сильно не понравилась вторая часть StarCraft ;)
                    • 0
                      А если говорить серьезно и человек поставивший минус считает, что вариант с установкой Windows 7 x64 это «фууу» из-за лишнего десятка гигобайт и его путь патчить ядро и dll — пожалуйста. Только вот когда вдруг на рабочей машине из-за этого в какой-нибудь ответственный момент навернется система и ее придется реанимировать, а не заниматься работой — я с удовольствием посмотрю на него ;)
                      Про проблемы с патчеными ядрами в Windows 7 мы уже читали на хабре за этот год ни раз в топиках про «кривые заплатки» от Microsoft.
                    • 0
                      Людям наверно не понравилось «не представляет проблем».
                      А ведь это доставляет проблемы, и немаленькие например с резервными копиями системы — лишние 17 гигов практически балласта это не хухры-мухры. Проблема ведь не в том что они там лежат, в конце-концов для обеспечения совместимости на какие только жертвы не пойдешь, но ведь файлы оттуда никогда не удаляются. Даже если программы больше нет — файлы от нее осядут в этой папочке до следующей переустановки виндовс.
                      • 0
                        Даже не сомневаюсь, что именно эта фраза :)
                        Я же не зря привел пример со StarCraft — могу привести точно такой же с VisualStudio + MSDN и еще некоторыми SDK, которые могут быть нужны. На сегодня объемы софта достигли таких размеров, что для полного бэкапа может легко понадобиться 100-200 гб. И эти 17 гб не делают какой-то погоды (хотя даже лет 5 назад этот объем вполне ощущался). Именно по этому в сетях организаций при поднятом домене, зачастую, бэкапов машин пользователей не делают, ограничиваясь вынесением локальной папки пользователя в сеть.
                        В любом случае, Microsoft создала удачное решение для комфортной работы в x64 окружении с x86 софтом. И предолженный в топике сценарий решения проблемы с памятью актуален лишь для Windows XP.
                  • 0
                    В Windows 8/8.1 на эту тему сделали возможность чистки от дублей: www.outsidethebox.ms/15272/
                    Про 7рку тоже есть: www.outsidethebox.ms/15444/
                    • 0
                      Если за следующие 4 года она вырастет вдвое и я не сменю ноут, то может быть подумаю о том, чтобы ее почистить — при текущем размере не мешает ;)
    • 0
      Чуть выше архив для этого дела.
      habrahabr.ru/post/202406/#comment_6994530
  • +1

    Вчера поработал некромантом и по предложенной инструкции успешно вживил на Windows XP 32bit SP3 8 ГБ оперативной памяти.


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


    1. "Начиная со второго сервиспака эта библиотека работает с PAE «фиктивно», т.е. даже если режим расширенной трансляции адресов включён – он ничего не делает и не выходит за пределы четырёх гигабайт." — это не соответствует действительности. Полноценный PAE режим имеется и в hal.dll из комплекта SP2 и из комплекта SP3.
      В принципе для активации работы с памятью >4 Гб достаточно только патча 1 строчки в ядре + прописать опцию /PAE в boot.ini если это еще не было сделано раньше.
      Т.е. ограничение на 4 Гб полностью искусственный барьер со стороны Microsoft.
      Правда конкретно в моем случае с самой свежей библиотекой HAL (SP3 + все оф. патчи) как раз словил упомянутую проблему с драйверами — в частности большая часть USB устройств отвалилась(похоже драйвер USB контроллера не инициализировался правильно), включая мышку. Но все 8 Гб при этом были доступны и реально работали, а кроме отвала USB серьезных проблем не наблюдалось (в частности работали видео, включая аппаратное ускорение, звук, сеть — дальше не полез проверять).
      А вот использование старого HAL (из SP1) эту проблему с драйверам USB решило. В результате если кто захочет повторить — можно пробовать и с самой свежей HAL, просто заменив 1 байт в ядре и откатываться на старые версии библиотек только в случае проблем.


    2. "ntkrnlpa.exe — однопроцессорное ядро Windows с более чем 3 ГБ оперативной памяти." У меня тоже использовалось это ядро, как и у автора. Что в общем-то сильно удивило — и у него и у меня процессоры многоядерные(2 и 4 ядра соответственно) и при использовании не того ядра, не должны были работать доп. ядра. В процессе выяснилось, что на самом деле в этом файле, несмотря на его название (как текущее имя файла, так и "исходное" прописанное в его свойствах), лежит содержимое файла ntkrpamp.exe (многопроцессорное ядро Windows с более чем 3 ГБ оперативной памяти). Выяснил это случайно — винда упорно заменяла пропатченную версию ядра на исходную. Даже после того как я нашел все резервные копии (аж 3 штуки) файла ntkrnlpa.exe в служебных заначках и пропатчил их тоже. Но каким-то неведомым образом каждый раз все-равно восстанавливался исходный файл. Пришлось запустить мониторинг системных процессов и выяснилось, что система берет содержимое файла ядра "ntkrpamp.exe" из \system32\dllcache\ и копирует его в файл "\system32\ntkrnlpa.exe". Т.е. в реальности используется многопроцессорное ядро, лишь обозначенное как однопроцессорное. Зачем в Майкрософт сделали такую путаницу — совершенно не ясно.


    3. Забавная вещь. На самом деле ни один из приведенных вариантов ядра ОС (ntoskrnl.exe, ntkrnlmp.exe, ntkrnlpa.exe, ntkrpamp.exe) вообще не является обязательным. Windows XP настолько сурова, что может работать вообще без ядра! :)
      Хотя самом деле нет — просто ядро состоит минимум из 3х файлов (ntoskrnl.exe, hal.dll, и один из этих 4х), но без этого 3го все вполне работает. В процессе экспериментов случайно удалил файл текущего используемого ядра прямо на рабочей системе и сначала удивился, что ОС вообще дала это сделать. И из любопытства перезагрузился и удивился еще больше — никаких глюков, все работало и без него, разве что память опять только ниже 4 Гб доступна была.


    4. У меня почему-то опции /NOEXECUTE=OPTIN и /PAE оказались не совместимы друг с другом — если присутствуют обе, то ОС не загружается (черный экран в самом начале загрузки). Хотя NOEXECUTE=OPTIN вроде бы официально является значением по-умолчанию, т.е. указание OPTIN должно быть равносильно отсутствию этой опции.


    5. BSOD от драйверов так и не словил. Но все-таки совсем без BSOD не обошлось — его стабильно вызывала попытка использовать опции ядра /PAE (т.е. расширение общего объема адресуемой памяти с 4 до 64 ГБ) и /3GB (расширение адресуемой памяти на один процесс с 2 ГБ до 3 ГБ). Возможно, это тоже можно как-то решить, но настрой дальше расковыривать потроха ОС к этому моменту закончился, и я просто убрал /3GB. В моем случае она не особо актуальна — оперативки на этой машине нужно много не из-за какого-то одного тяжелого приложения, а из-за большого количества работающих параллельно.
    • +1
      Поделитесь offset патча для Sp3 и многоядерного процессора.
      • +1
        Лучше все-таки по указанной в статье HEX последовательности нужное место в файле найти:
        «BB 00 00 10 00 33 FF 6A 07 8B F0» и менять 4й байт в ней.
        Т.к. в зависимости от версии позиция может и отличаться.

        У меня файл ядра ntkrnlpa.exe (при этом внутреннее имя файла ntkrpamp.exe — MP, т.е. многопроцессорный и по факту поддержка многопроцессорности работает, процессор 4х ядерный) версии 5.1.2600.6419 (xpsp_sp3_qfe.130704-0421)
        В нем эта последовательность нашлась по offset 1B3A39 (1784377), где успешно и пропатчил. Собственно лимит адресуемой памяти прописан 2мя байтами начиная с 1B3A3C (1784380) количеством 64к блоков как и указано в основной статье.

        Да, по накопившемуся опыту работы с такой патченой системой указание объема больше реально присутствующего может приводить к дополнительным глюкам. Я сначала 16 Гб прописал (4000h) при имеющихся 8 Гб, доступно к использованию были все 8 Гб. Но иногда наблюдались странные глюки — например USB сканер не хотел сканировать и некоторые программы из автозагрузки (Punto Switcher например) не загружались на автомате (процесс в памяти есть и даже работает — например раскладку автоматически переключает, но GUI отсутствует), хотя работали нормально при запуске вручную.

        Потом поменял значение в файле на 8 Гб (2000h), доступно стало 7.5 Гб (аналогично тому как на непропатченной 32 бит системе доступно 3.5 Гб при физических 4 Гб) но зато эти глюки пропали.
  • –1
    А почему бы просто не установить Windows Server 2003?
    Когда-то давно она у меня стояла, все игрушки и софт работали, а в 32 битном режиме там хоть все 64 гига можно адресовать.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.