Есть ли техническая причина, по которой 32-битные окна ограничены 4 ГБ ОЗУ? [Дубликат]

5

Возможное дублирование:
почему Windows показывает только около 3,5 ГБ моего 4 ГБ + ОЗУ?
Может ли 32-битная ОС использовать все 8 ГБ ОЗУ + 20 ГБ файла подкачки?

Как видно из этой таблицы , все версии x86 Win 7 max выходят по 4 Гб.

Есть ли техническая причина для этого или это просто маркетинговая стратегия, чтобы заставить людей покупать более дорогую ОС?

jaminto
источник
если вы переключите используемый термин на 32-битную (против x86) систему, то поиск здесь покажет ответы. может также выявить груз crud, который вам не нужен :-), но, по крайней мере, ответ существует.
Psycogeek
2
Здесь нет маркетинговой стратегии.
Лелуш Лампероуг
Вы должны действительно указать 32-битный вместо x86
Lelouch Lamperouge
1
@soandos: Опять же, ядро ​​также может иметь более 4 ГБ. Черт, процессоры способны более 4 ГБ. Обратите внимание, что старые 16-битные процессоры могли использовать более 64K. , ,
Surfasb
2
@kobaltz: обратите внимание, это 4 ГБ адресного пространства . Вы должны прочитать связанные ответы. Теоретически, процесс может иметь неограниченную виртуальную память.
Surfasb

Ответы:

11

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

По определению 32-битный процессор использует 32 бита для ссылки на местоположение каждого байта памяти. 2 ^ 32 = 4,2 миллиарда, что означает, что адрес памяти длиной 32 бита может ссылаться только на 4,2 миллиарда уникальных местоположений (то есть 4 ГБ).

В 32-битном мире Windows каждое приложение имеет свое собственное «виртуальное» пространство памяти 4 ГБ. (Это означает, что каждое приложение функционирует так, как если бы оно имело плоские 4 ГБ памяти, а диспетчер памяти системы отслеживает отображение памяти, какие приложения используют какую память, управление файлами подкачки и т. Д.)

Это пространство 4 ГБ равномерно разделено на две части: 2 ГБ выделено для использования в ядре и 2 ГБ оставлено для использования в приложении. Каждое приложение получает свои 2 ГБ, но все приложения должны использовать одно и то же 2 ГБ пространства ядра.

ИСТОЧНИК: http://www.brianmadden.com/blogs/brianmadden/archive/2004/02/19/the-4gb-windows-memory-limit-what-does-it-really-mean.aspx

[Редактировать RE: PAE]

Аппаратная архитектура процессора x86 дополнена дополнительными адресными строками, используемыми для выбора дополнительной памяти, поэтому размер физического адреса увеличивается с 32 до 36 бит. Это теоретически увеличивает максимальный объем физической памяти с 4 до 64 ГБ. 32-разрядный размер виртуального адреса не изменяется, поэтому обычное прикладное программное обеспечение продолжает использовать инструкции с 32-разрядными адресами и (в модели с плоской памятью) ограничено 4 гигабайтами виртуального адресного пространства. Операционная система использует таблицы страниц для сопоставления этого 4-ГБ адресного пространства с 64 ГБ физической памяти. Отображение обычно применяется по-разному для каждого процесса. Таким образом, дополнительная память полезна, хотя ни одно обычное приложение не может получить доступ ко всем этим одновременно.

kobaltz
источник
2
А как насчет PAE? (тем более что в Windows это реализовано)
soandos
@Kobalt Не могли бы вы объяснить, что «32-битный процессор использует 32-битные для обозначения расположения каждого байта памяти. 2 ^ 32» Акцент мой . Почему вы называете эти отдельные блоки байтами? Если каждый адрес памяти является 32-битным адресом, то откуда байт, который составляет 8 бит, входит в картинку?
Компьютерщик
3
@Geek Каждый адрес виртуальной памяти имеет ширину 32 бита. Это дает возможный диапазон адресов от 0 до 0xFFFFFFFF (около 4,3 миллиарда). То, что находится на каждом из этих ~ 4,3 миллиарда адресов (при условии, что оно заполнено), представляет собой 8-битный байт. Есть машины, в которых адреса памяти ссылаются на большие фрагменты данных, обычно называемые «словами», но Windows не работает ни на одном из них.
Джейми Ханрахан
7

И да и нет.

Собственно, 32-разрядный процессор может обрабатывать только 4 GiBОЗУ, поскольку существуют только 2 ^ 32 = 4,294,967,296разные числа, которые можно представить с помощью 32-разрядных.

Всякий раз, когда вы сохраняете что-то в памяти, вам нужно сохранить адрес, чтобы иметь возможность читать или манипулировать им. Обычно ЦП использует только один регистр (размером 32 бита) для хранения этого адреса. Поскольку существуют только 2 ^ 32разные адреса, все, что превышает 4 GiBотметку, остается неиспользованным.

Однако существуют методы, такие как расширение физических адресов (PAE), которые позволяют 32-разрядной ОС адресовать больше, чем 4 GiBОЗУ.

Значительно упрощая процесс, ОС отображает каждый процесс в определенной части памяти (называемой таблицей страниц). Каждый процесс все еще ограничен 4 GiB, но это позволяет ОС адресовать гораздо больше памяти, чем только 4 GiB.

Например, 32-разрядная версия Windows Server 2003 Datacenter Edition поддерживает до 64 GiBоперативной памяти.

Деннис
источник
1
Комментарий-вопрос от Alex Junyan Ли перешел от редактирования к комментарию: Но почему это 4G байт? 32 адресные строки могут получить доступ к 2 ^ 32 (4G) другому адресу, но каждый адрес может быть байтом или словом (4 байта) 32-битным -> 4G-байтом, когда это байт 32-битным -> 4G * 4 байта, когда он это слово Вы имеете в виду, что есть только 8 строк вывода данных? поэтому каждый адрес может выводить только 8 бит. Почему мы должны ограничивать строки данных до 8 строк? Можем ли мы сделать это 32 строк вывода данных?
Пабук
2
@AlexJunyanLi: Хотя в архитектуре x86 используется различная ширина шины данных (от 8 бит в 8088 до 64 бит в Pentium и в настоящее время более сложный QPI ), память по-прежнему адресуется байтами (8 бит). Одной из причин является обратная совместимость, а другая заключается в том, что байт все еще представляет собой практический объем информации, который можно адресовать.
Пабук
2
@pabouk: все современные процессоры x86 и x64 для нескольких поколений использовали 64-битные шины памяти. Младшие три бита физических (RAM) адресов никогда не выходят из процессора. Тем не менее каждый отдельный адрес ОЗУ относится к отдельному байту. Но инструкции могут ссылаться на байты или двух-, четырех- или восьмибайтовые слова; некоторые инструкции даже работают с 16-байтовыми блоками. Адрес любой многобайтовой вещи - это адрес ее младшего байта. Во многих случаях размер данных определяется размером другого операнда. В других случаях это явно закодировано, или в регистре.
Джейми Ханрахан
@JamieHanrahan: Спасибо за расширение моей заметки, адресованной AlexJunyanLi. Я хотел написать только основную информацию, а не углубляться во многие детали, такие как различие между физической шиной и возможностями адресации инструкций машинного кода, выравнивание доступа к памяти и т. Д.
pabouk
@pabouk: Извините, я был сбит с толку. Я бы отредактировал свой комментарий, изменив его на @ AlexJunyan, но он уже прошел с пятиминутным крайним сроком ... было бы неуклюже удалить его и повторно опубликовать с этим изменением?
Джейми Ханрахан