Почему Windows показывает только около 3,5 ГБ из 4 ГБ ОЗУ?

90

Я недавно обновил ОЗУ моего компьютера до 4 ГБ. Моя 32-битная установка Windows показывает только 3574 МБ памяти. Как я могу заставить Windows использовать полный объем оперативной памяти?

ала
источник
2
На этот вопрос ответили только сегодня утром в superuser.com/questions/27006/…
Том
3
Это должно быть увеличено примерно на 2000 голосов, потому что кажется, что каждый день я сталкиваюсь с еще одним человеком, который спрашивает: «Где моя память?» Microsoft должна просто убрать это из диалогового окна. , ,
Surfasb
2
Чувак, тебе нужна 64-битная ОС. Серьезно, начните экономить свои деньги сейчас. Тогда этот вопрос станет спорным вопросом, когда у вас будет система, которая фактически будет поддерживать всю память, которую вы можете разместить на материнской плате.
Fiasco Labs
1
Обращайте внимание на системный блок на предмет влаги или сырости. Это может быть «утечка памяти».
Одиннадцатый
@ala: Из-за разделения памяти ядра ... (1Gb выделяется ядром). Кажется, вы уже используете ключ / 3gb ...
user2284570

Ответы:

71

Вы не можете:

Видишь, чувак, где мои 4 гигабайта оперативной памяти?

если вы хотите поместить память и устройства в 32-разрядный диапазон адресов: не все доступные 4 ГБ адресного пространства могут быть переданы в память.
Так что же на самом деле произойдет, если вы выйдете и купите 4 ГБ памяти для своего ПК?
В карте памяти есть дыра для ввода-вывода. (Сейчас это только 25% от общего адресного пространства, но это все еще большая дыра.) Таким образом, будут доступны 3 младших гигабайта вашей памяти, но есть проблема с последними 1 гигабайтами.

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

VonC
источник
Я не понимаю - не 2 ^ 32 4 гигабайта?
Мэтт
6
Ааа, неважно, на самом деле читать связанную статью
Мэтт
приятно это знать
LiuYan 研 研
@VonC: А как насчет этого ?
user2284570
@ user2284570 правда, PAE может помочь, но кто еще на WXp? ;)
VonC
8

Во-первых, Windows XP (32-разрядная версия) поддерживает только 4 ГБ. Это относится не только к Windows XP. Вместо этого он применяется к 32-разрядным настольным системам Windows - 32-разрядным системам Linux с PAE, и многие 32-разрядные выпуски Windows Server поддерживают более 4 ГБ на связанную статью. Вы никогда не увидите более 4 ГБ, если используете 32-разрядную версию Windows XP. Тем не менее, я нашел более подробную причину, почему ваша система показывает меньше доступного оперативной памяти, чем то, что фактически установлено.

Из проблемы ОЗУ 3 ГБ, а не 4 ГБ (блог Microsoft MSDN):

Из-за архитектурного решения, принятого давно, если у вас установлено 4 ГБ физической ОЗУ, Windows может сообщать только часть физических 4 ГБ ОЗУ (в диапазоне от ~ 2,75 ГБ до 3,5 ГБ в зависимости от установленных устройств, чипсета материнской платы и BIOS).

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

Значительные куски адресного пространства ниже 4 ГБ (самый высокий адрес, доступный через 32-разрядный) зарезервированы для использования системным оборудованием:

  • BIOS - включая ACPI и поддержку устаревшего видео
  • Шина PCI, включая мосты и т. Д.
  • Поддержка PCI Express зарезервирует не менее 256 МБ, до 768 МБ в зависимости от установленной памяти видеокарты

Это означает, что типичная система может видеть между ~ 256 МБ и 1 ГБ адресного пространства ниже 4 ГБ, зарезервированных для аппаратного использования, к которому ОС не может получить доступ. Спецификации чипсета Intel довольно хорошо объясняют, какие диапазоны адресов зарезервированы по умолчанию, и в некоторых случаях говорят, что 1,5 ГБ всегда зарезервированы и, следовательно, недоступны для Windows.

Существует больше информации, если вы проверите источник. Однако вы можете воспользоваться всеми установленными 8 ГБ, если будете следовать этим инструкциям .

Если говорить из личного опыта, это не новая проблема. Я столкнулся с этой же проблемой несколько лет назад, когда создавал 32-битную систему Windows Vista на 4 ГБ, когда Vista была впервые выпущена. На форуме было множество сообщений на эту тему.

Читайте также Microsoft KB 929605 - Объем системной памяти, о которой сообщается в диалоговом окне «Сведения о системе» в Windows Vista, меньше ожидаемого, если установлено 4 ГБ ОЗУ .

SgtOJ
источник
Документы Microsoft здесь , что Windows XP поддерживает до 128 Гб оперативной памяти, если базовая архитектура 64-битная. Можете ли вы обновить свой ответ?
Дан Даскалеску
@SgtOJ: А как насчет этого ?
user2284570
1
@SgtOJ: ограничение в 4 ГБ ОЗУ НЕ распространяется на «все 32-разрядные операционные системы». 32-разрядная ОС, полностью поддерживающая PAE (например, Windows Server 2003), может с радостью использовать более 4 ГБ ОЗУ. «32 бита» ограничивает виртуальное адресное пространство, а не физическое.
Джейми Ханрахан
@JamieHanrahan, это означает, что одна программа не может использовать более 4 ГБ. И я думаю, он имел в виду, что накладные расходы на резервирование ввода-вывода не зависят от ОС.
Jiggunjer
@jiggunjer Нигде в вопросе или ответе, который я комментировал, не было сказано или подразумевалось, что вопрос о том, что может использовать «одна программа». Также резервирование ввода-вывода не является строго независимым от ОС.
Джейми Ханрахан
3

Если вы используете 32-битную Windows XP, то это невозможно. Так как для использования дополнительной оперативной памяти недостаточно адресного пространства

Лучшим решением было бы перейти на 64-разрядную версию Windows, поскольку она поддерживает 4+ ГБ ОЗУ.

Shaharyar
источник
2^32достаточно «адресного пространства» для размещения 4 ГиБ. Вы ошибаетесь адресным пространством и физической памятью. Каждый процесс в современных версиях Windows видит полное адресное пространство 4 ГиБ, хотя обычно из-за разделения виртуального адресного пространства UM / KM можно использовать только 2 ГиБ.
0xC0000022L
@ 0xC0000022L: Это не обсуждаемая проблема.
Бен Фойгт
По данным Microsoft , большинство выпусков Windows 7 (включая 32-разрядные) поддерживают до 192 ГБ ОЗУ. Единственным требованием является то, что базовая архитектура является 64-битной. Таким образом, лучшим решением было бы перейти с XP на Windows 7. Не могли бы вы обновить свой ответ?
Дан Даскалеску
@Shaharyar: Как насчет этого ?
user2284570
3

Как сказали другие, это невозможно.

Объяснение:

Каждый кусок памяти имеет адрес. Операционная система указывает длину адреса. В старых операционных системах длина адреса составляет 32 бита, что позволяет использовать только 2 ^ 32 (4 294 967 296) адресов. Теперь, глядя на это число, может показаться, что ваша операционная система должна поддерживать 4 ГБ, но все другое аппаратное обеспечение (что особенно важно, видеопамять на вашей видеокарте), имеющее внутреннюю память, также отображается в этом адресном пространстве.

Как будто вы пытаетесь раздать 1 200 000 шестизначных телефонных номеров.

drby
источник
Вы смешиваете ОЗУ и адресное пространство.
0xC0000022L
@ 0xC0000022L: Нет, это не так. Он говорит о физическом адресном пространстве, в то время как ОЗУ должно быть отображено для использования.
Бен Фойгт
@BenVoigt: Как насчет этого ?
user2284570
PAE отлично, если весь код ядра написан для его использования. К сожалению, большая часть кода ядра - это драйверы, написанные сторонними разработчиками, которые едва могут добиться стабильности при использовании модели с плоской памятью. Включение PAE требует отбрасывания всех существующих драйверов с предположением плоской модели. Вот почему сервер Windows включает PAE, а клиент - нет. Смотрите ответ Стива.
Бен Фойгт
@BenVoigt: с 1997 года драйверы, которые предполагают наличие памяти <4 ГБ, редки, потому что ВСЕ драйверы WDM могут быть установлены в Windows 2000/2003 ...
user2284570
3

Старая материнская плата поддерживала только 4 ГБ физической памяти, современные поддерживают гораздо больше. Процессор Intel P4 всегда может адресовать более 4 ГБ (используя то, что называется расширением физического адреса или PAE)

Microstoft приняла «маркетинговое решение» не поддерживать физическое адресное пространство более 4 Гб в «клиентских» версиях всех 32-битных версий своих операционных систем, включая все от w2k до 32-битной Windows 8 (если вы посетите MS KB На страницах, которые вы заметите, 32-битные версии серверов могут поддерживать гораздо больше - до 128 Гб, я полагаю, с 32-битной версией Enterprise Edition, - именно поэтому «правильные» 32-битные ОС (Linux и т. д.) на одном и том же оборудовании всегда могут получить доступ ко ВСЕ физическая оперативная память

(примечание: 32-битным пользователям Win7 настолько надоел этот «глупый» лимит, что они «взломали» Kernal, чтобы разрешить доступ к полной физической ОЗУ ... разумеется, это нарушает вашу лицензию и фактически является незаконным в США (DCMA). )

Windows XP 32bit «резервирует» часть адресного пространства объемом 4 Гб для использования драйвером. Нет никаких причин, по которым вы не можете «адресовать» физическую ОЗУ за пределы 4 ГБ (используя PAE), однако многим ПОЛНЫМ ДРАЙВЕРАМ во времена Windows XP Pro не удалось этого сделать, и вы получите ошибку «BSOD» (современные драйверы используют PAE правильно, и в ТЕОРИИ нет причины, по которой им нужно больше, чем около 32 МБ пространства страниц «lo» (как «окна») в общей сложности, даже для поддержки графической карты 2 ГБ (2 ГБ будут находиться в пространстве «hi», т.е. выше 4 ГБ) отметка)

В XP SP2 MS почти утроила объем адресного пространства, «зарезервированного» для драйверов, чтобы устранить BSOD, и с тех пор так и было (MS не хочет «отлаживать» драйверы == они хотят продать вам 64-битную версию). ОС вместо). Фактическое оборудование практически не влияет на это «зарезервированное» пространство.

Итак, если у вас 4 ГБ или более физической ОЗУ, большинство XP Pro sp2 + увидит около 3,25 ГБ. Остальные МОГУТ получить доступ с помощью различных различных драйверов ОЗУ (не MS, конечно) = идите искать что-то, что использует «Невидимое адресное пространство» или «высокое пространство 4 ГБ» в XP Pro). Использование «отсутствующего» 0,75 ГБ как части вашей «виртуальной памяти» может ускорить вашу систему ...

Обратите внимание, что ключ / 3G может разрешить 32-разрядным приложениям доступ к 3Gb в 32-разрядной ОС (если в заголовке .exe установлен флаг LargeAddressAware - в этом случае они могут получить доступ к 4 ГБ в 64-разрядной ОС), но в XP вам также нужно указать / USERVA, чтобы не выдавливать ОС из ОЗУ :-)

Стив Б
источник
Поддержка Windows XP SP1> 4 ГБ ОЗУ, если вы добавите ключ / PAE в boot.ini
user2284570
0

Если вы хотите использовать полные 4 ГБ, единственным вариантом является обновление до 64-битной операционной системы:

  • Windox XP 64
  • Windows Vista 64
  • Linux
  • Max OS / X (хорошо, для этого вам может понадобиться новый ПК)

Обычная Windows XP - только 32-битная, и это ограничивает память до 3,5 ГБ макс. Проверьте ссылку, размещенную VonC для деталей об этой теме.

франки
источник
Быть 32-битным не ограничивает память до 3,5 ГБ макс. Это другие устройства, которые используют доступное адресное пространство, поэтому возможны и 3.75Gb. -1
MaxVT
Вот почему я сказал «проверь ссылку для деталей» :-)
FrankS
Верный. Microsoft отмечает, что 64-разрядная версия XP поддерживает до 128 ГБ ОЗУ .
Дан Даскалеску
0

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

Но лучшее решение, безусловно, получить ОС x64.

Нет причин не слишком в любом случае. Большинство программ работают в x64 с XP / Vista / 7, имеющим слой эмуляции x86. Это просто драйверы, которые могут быть проблемой.

Blam
источник
1
Драйверы x64 в Windows XP Pro x64 являются мусором, но драйверы Vista и 7 x64 уже давно стали достаточно зрелыми.
MDMarra
0

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

  • Центральное процессорное устройство
  • Блок контроллера памяти
  • BIOS / (U) EFI
  • Операционная система
  • заявка

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

Короче говоря, все вышеперечисленные компоненты должны поддерживать более 4 ГБ памяти, чтобы добиться успеха.

Центральное процессорное устройство

Начнем с процессора. Но сначала важно отметить, что ЦП вообще не обладает магической способностью использовать какую-либо память . Вместо этого он мог просто получить доступ к любому адресу в пределах своего адресуемого пространства . Теперь вот идет вещь битности. 32-разрядный ЦП способен обращаться к адресам в диапазоне от 0 до 4 ГиБ. Этот диапазон , однако должен учитывать не только имеющийся RAM, ROM, SMRAM , График Адрес Remapping Таблица но и все необходимые Отображаемый в памяти ввод / выводи многое другое, что может потребовать значительной части этого диапазона адресов. Как следствие, вполне возможно, что некоторые адреса памяти были скрыты этим использованием и, следовательно, недоступны для операций с оперативной памятью. Чтобы восстановить скрытую память, необходимо расширить доступное адресное пространство CPU . В случае 32-битного расширения физического адреса ЦП может помочь. Что позволяет адресовать до 64 ГиБ. 64-разрядный операционный процессор в основном режиме 64-битного по умолчанию , способного доступадо 16 EiB, что довольно много и не требует таких уловок. Но с другой стороны, 64-разрядному ЦП нецелесообразно использовать 64-разрядную адресацию, поэтому в действительности они все еще ограничены адресной шиной меньшим диапазоном, чем 16 EiB.

Блок контроллера памяти

Первоначально он находился в Северном мосту , но был перенесен в процессорную головку AMD, начиная с процессоров AMD64, и Intel с процессорами Nehalem. Даже если ЦП с PAE способен самостоятельно обращаться к 64 ГиБ, ему все равно нужен MCU для доступа к ОЗУ. Проще говоря: процессор, обращающийся к определенному адресу, получает ответ либо от устройства PCI, флэш-памяти BIOS или MCU, если запрашиваемый адрес находится в оперативной памяти, и так далее. Однако для MCU (будь то в северном мосту или в процессоре) нередко поддерживается гораздо меньше адресуемого пространства, чем 64 ГиБ, например, по маркетинговым причинам.

BIOS / (U) EFI

BIOS / (U) EFI также важны, так как их обязанность - конфигурировать аппаратные средства, прежде чем что-либо действительно сможет работать. Помимо прочего, они отвечают за отображение всего адресуемого пространства процессора с диапазонами памяти аппаратных устройств, шин, оперативной памяти и так далее. Интересно, что может случиться так, что вся оперативная память разделится на части и отобразится в нескольких доступных несмежных точках. Проблема с BIOS заключается в том, что его разработчики могут рассчитывать не более чем на 3 ГБ использования ОЗУ в своей системе и, как следствие, BIOS не будет правильно отображать всю используемую память. Скорее всего, этого не произойдет с (U) EFI.

Операционная система

Операционная система также должна поддерживать адресацию более 4 ГБ памяти. Чтобы быть более конкретным, он должен настроить процессор для использования PAE. Некоторые 32-разрядные операционные системы прекрасно могут использовать PAE и получать доступ к более чем 4 ГиБ, другие имеют программный лимит на максимальный объем памяти, даже если они включают PAE для повышенной безопасности (например, Windows XP). И снова 64-разрядные ОС, естественно, не испытывают таких трудностей и обычно поддерживают более 4 ГБ памяти.

заявка

Последний пункт из другого мира, так как приложения обычно работают в виртуальном адресном пространстве , я добавил его для полноты картины. Тем не менее, для компиляции приложения требуется несколько дополнительных шагов, чтобы иметь возможность использовать больше памяти. По умолчанию 32-разрядное приложение может использовать только 2 ГБ памяти. Это же 32-разрядное приложение может адресовать до 4 ГБ памяти при условии, что ОС поддерживает это и поддерживает CPU PAE. Более конкретно, он мог бы использоватьдо 3 ГБ памяти, другой 1 ГБ может быть адресован как общие библиотеки и ядро ​​ОС, но недоступен для записи (в конечном итоге это зависит от архитектуры ОС, а не от самого приложения). Опять же, 64-битные приложения изначально поддерживают адресацию более 4 ГБ памяти и не имеют таких проблем.

Чтобы рассмотреть все это в перспективе, давайте рассмотрим несколько примеров.

Рассмотрим контроллер памяти Intel® 82945G . На сайте Intel говорится, что он не поддерживает PAE и ограничен 4 ГБ оперативной памяти. Давайте посмотрим на абзац 9 System Address Mapтаблицы. В нем много информации. Наиболее интересным является Figure 9-3. Main Memory Address Range: Рисунок 9-3.  Диапазон адресов основной памяти и абзац 9.2 Main Memory Address Range (1 MB to TOLUD), который гласит:

Этот диапазон адресов простирается от 1 МБ до верхней части физической памяти, доступ к которой разрешен (G) MCH (как запрограммировано в регистре TOLUD). Все обращения к адресам в этом диапазоне перенаправляются (G) MCH в основную память, если они не попадают в опциональный TSEG, опциональное отверстие ISA или опциональную память VGA, украденную IGD. (G) MCH обеспечивает максимальное пространство декодирования адреса основной памяти 4 ГБ (2 ГБ для 82945GC / 82945GZ / 82945PL). (G) MCH не переназначает пространство памяти APIC или PCI Express. Это означает, что, поскольку объем физической памяти, заполненной в системе, достигает 4 ГБ (2 ГБ для 82945GC / 82945GZ / 82945PL), будет существующая физическая память, которая еще не адресуема и поэтому не может использоваться системой.

Как говорится, поскольку он не поддерживает PAE, он в конечном итоге не может переназначить PCI и все остальные MMIO выше 4 ГБ, поэтому часть памяти будет затенена и неиспользована. Это означает, что даже если он используется с процессором, поддерживающим 36-битную адресацию, память выше 4 ГБ все равно будет недоступна, а часть памяти, близкая к пределу 4 ГБ, также не будет использоваться.

И наоборот, давайте рассмотрим контроллер памяти Intel® 82955X , который связан с предыдущим, но он настроен на поддержку 8 ГБ в отличие от предыдущего! В параграфе таблицы данных 2.1 Host Interface Signalsпредполагается, что он использует 36-битную адресную шину для процессора, что является хорошим признаком. Параграф 7 System Address Mapимеет дальнейшее понимание. Сравните Figure 7-1. System Address Rangesс тем, что мы видели ранее: Рисунок 7-1.  Диапазоны системных адресов это ясно говорит о том, что он способен использовать более 4 ГБ ОЗУ при условии, что он используется с процессором, также способным к 36-битной адресации. Стоит также отметить, что в этом пункте 7 System Address Mapговорится, что MCH supports 64 GB of addressable memory space. Однако дополнительно уточняется, что максимально используемая оперативная память ограничена 8 ГБ. Это еще раз заявляет о разнице между адресуемой ипригодный для использования, как я пытался передать в разделе процессора.

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

Давайте рассмотрим процессор Intel® Pentium® Extreme Edition 840 . Он поддерживает 64-битный набор инструкций, но не поддерживает PAE. Это означает, что при работе в 32-разрядном режиме он не сможет использовать более 4 ГБ ОЗУ (пожалуйста, исправьте меня, если я ошибаюсь в этом предположении). Давайте посмотрим на таблицу и таблицу Table 4-3. Signal Description. Несмотря на то, что этот ЦП поддерживает 64-разрядную архитектуру, он по-прежнему ограничен шириной 36-разрядной адресной шины, что ограничивает его доступным диапазоном адресов от 0 до 64 ГиБ.

Теперь давайте рассмотрим более свежий процессор. Возьмите Intel® Core ™ i7-7700 Processor , например. Он рекламируется для поддержки до 64 ГБ оперативной памяти. Теперь давайте проверим таблицу данных этого. Параграф 2.3 System Address Mapубеждает нас в том, что адресный диапазон этого ЦП составляет от 0 до 512 ГБ из-за 39-битной адресной шины. Обратите внимание, что это все еще далеко от теоретического диапазона 16 EiB для 64-битного процессора. Удивительно , хотя он дополнительно разъясняет , что этот процессор поддерживает до 32 ГиБ от используемого максимума RAM (вопреки 64 ГБ на веб - сайте). Здесь также есть интересное изображение Figure 2-2. System Address Range Example: Рисунок 2-2.  Пример диапазона системных адресов он хорошо иллюстрирует проблему с затенением памяти PCI-устройствами и т. Д. Также он предлагает способ преодоления этой проблемы путем сопоставлениядиапазон от реального ОЗУ до верхнего диапазона адресов в пределах диапазона адресации ЦП . Таким образом восстанавливая эту скрытую память для использования. Обратите внимание, что это переназначение выполняется BIOS / (U) EFI после аппаратной инициализации, и именно по этой причине я включил BIOS / (U) EFI в список выше.

Я взял в качестве примера продукты Intel, но то же самое относится и к AMD.

Теперь давайте обсудим, как задействованы операционные системы. Ядро Linux включает полную поддержку режима PAE, начиная с версии 2.3.23, и вполне возможно иметь более 4 ГБ памяти, используемой с ядром Linux в 32-разрядной системе. Однако следует помнить о неопределенной проблеме с 32-битным ядром Linux в системе с более чем 4 ГБ ОЗУ на некотором оборудовании (по моему опыту это имеет отношение к сбоям TLB). В любом случае, в Википедии есть хорошая информация о поддержке PAE . Интересно, что Windows XP ограничена 4 ГБ, тогда как Windows Server 2003 Enterprise / Datacenter SP2 может заполнять до 64 ГБ. То же самое для других пар Windows Desktop-Server.

Как вы можете видеть, существует множество комбинаций среди перечисленных компонентов, и в некоторых случаях замена процессора или ОС может помочь. Гораздо сложнее иметь дело с BIOS / (U) EFI или MCU, так как первый является проприетарным и встроенным в систему, и его нелегко изменить, последний встроен в ЦП или припаян на плате.

PF4Public
источник
-4

он показывает 3574 МБ оперативной памяти, потому что именно столько оперативной памяти БЕСПЛАТНО и доступно для использования компьютером в любое время. Эта цифра представляет собой ОЗУ, к которому у вашего компьютера есть полный доступ, поскольку программы и настройки, предварительно установленные на ПК, используют установленный объем ОЗУ, который в вашем случае составляет 426 МБ. Мой 6-ГБ 64-битный ПК показывает 5,8 ГБ доступной оперативной памяти вместо полных 6 ГБ. Лучше всего было бы посмотреть на обновление вашего ПК

user235193
источник
Если 3,5 ГБ является свободной ОЗУ, то почему Windows все еще делит ее на свободную и использованную ОЗУ? Это операционная система, она должна знать обо всем, особенно если что-то использует 0,5 ГБ памяти. Установленные программы не занимают ОЗУ, пока они не запущены.
Гроностай