6

Не знаю, если это правильное место, чтобы задать этот вопрос.

Я читал, что 32-битные ОС (например, Ubuntu, на которой я сейчас работаю) не могут использовать более 3,2 ГБ или 3,3 ГБ оперативной памяти.

Я помню для моего старого курса по компьютерной архитектуре, что ограничение памяти составляло 2 ^ 32 "указателя" (не помню правильное слово). Я имею в виду, память была представлена в виде массива, где процессор может получить к ней доступ напрямую, но до своего предела. Если процессор 32-разрядный, то он может адресовать 2 ^ 32 слова, если он 64-разрядный 2 ^ 64 и т.д.

Так что, если то, что я сказал ранее, верно, то моя ОС должна иметь возможность адресовать 2 ^ 32 = 4294967296 = 4 Гб.

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

Можете ли вы дать мне подсказку?

6 ответов6

9

Windows использует некоторые аппаратные адреса, предназначенные для адресации памяти, для другого оборудования (например, USB, SATA, дисковые контроллеры и т.д.). Поэтому некоторые из этих аппаратных адресов не могут быть использованы для вашей памяти. Отсюда и предел.

Насколько мне известно, Unix/Linux МОЖЕТ адресовать чуть больше, чем 3,2 ГБ в Windows. Это потому, что в Linux используется другая схема адресации.

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

5

Это связано с памятью, которую BIOS должен зарезервировать для базовых процессов, таких как передача данных на устройства и видеопамять. Память выше примерно 3,2 ГБ (она варьируется от системы к системе, я видел 3,6 ГБ и 3,1 ГБ) перераспределяется через границу 4 ГБ, где требуется PAE для доступа к ней. Различные системы обрабатывают этот случай по-разному. Некоторые системы не обращаются к нему, предоставляя только 3,2 ГБ оперативной памяти для процессов. Другие просто используют PAE, который медленнее, для процессов.

3

PAE не является стандартным в 2.6 ядрах Linux. Но поддерживается ядра выше 2.3.23.

PAE позволяет использовать до 64 ГБ ОЗУ в 32-битной системе. Однако ограничение одного процесса 32-битным пространством ... и снижение производительности в целом / не только при использовании более 4 ГБ.

Мне пришлось изменить некоторые растущие операционные системы баз данных на 64-битные, чтобы MySQL мог использовать преимущества установленной оперативной памяти. Разница в скорости была заметна:D

Посмотрите здесь http://en.wikipedia.org/wiki/Physical_Address_Extension#Linux

1

Ваша 32-разрядная ОС может адресовать 4 ГБ ОЗУ, однако архитектура ПК означает, что видеопамять и множество других ресурсов отображаются в памяти, поэтому не все это адресное пространство свободно для использования в качестве обычной ОЗУ.

0

Статья в Википедии о "барьере 3ГБ" объясняет это довольно хорошо. Если ваша ОС не поддерживает PAE, вы будете ограничены физическим адресным пространством 4 ГБ, которое должно включать в себя как ОЗУ, так и сопоставления "регистров" и "памяти" устройства PCI. Обычный большой потребитель в последней категории - ваша видеокарта. https://en.wikipedia.org/wiki/3GB_barrier

0

== Не по теме ==

Это напоминает мне о старости DOS, когда компьютер мог видеть только 640 КБ ОЗУ, хотя могло бы быть установлено больше. Даже если архитектурно 2 ^ 20 байт (1024 КБ), где доступны, верхние 384 КБ (область памяти uppper) могут быть решены только хитростями.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .