96

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

Означает ли это, что если на любой машине с 32-разрядной ОС (будь то Windows или Unix) на жестком диске содержится более 4 ГБ ОЗУ + файл подкачки, например, 8 ГБ ОЗУ и файл подкачки 20 ГБ, ее память никогда не будет "использована" «?

Под "использованным" я подразумеваю, что увеличение ОЗУ или файла подкачки не повлияет на производительность; Конечно, всегда возможно, что приложение будет продолжать запрашивать память у ОС, но не получится.

Аналогично, если этот 32-разрядный компьютер с ОС имеет 2 ГБ ОЗУ и файл подкачки 2 ГБ, увеличение размера файла подкачки не повлияет на производительность. Это правда?

4 ответа4

145

Что я понимаю о 32-битных ОС, так это то, что адрес выражается в 32 битах, поэтому самое большее ОС может использовать 2 ^ 32 = 4 ГБ памяти.

Максимум, что может адресовать процесс - это 4 ГБ. Вы потенциально путаете память с адресным пространством. Процесс может иметь больше памяти, чем адресное пространство. Это совершенно законно и довольно часто встречается в обработке видео и других приложениях, интенсивно использующих память. Процесс может быть выделен десятки ГБ памяти и поменять его в адресном пространстве и из него по желанию. В адресное пространство пользователя одновременно может входить только 2 ГБ.

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

Означает ли это, что в любой 32-разрядной ОС, будь то Windows или Unix, если на компьютере имеется файл ОЗУ + файл подкачки на жестком диске более 4 ГБ, например, 8 ГБ ОЗУ и файл подкачки 20 ГБ, "память никогда не будет израсходована"?

Абсолютно это не значит. Один процесс может использовать больше памяти, чем это! Опять же, объем памяти, который использует процесс, практически не связан с количеством виртуального адресного пространства, которое использует процесс. Так же, как количество автомобилей, которые вы держите в своем гараже, совершенно не связано с количеством автомобилей, которыми вы владеете.

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

Моя точка зрения, если неясно, что вы должны перестать думать о памяти и адресном пространстве как об одном и том же, потому что это совсем не одно и то же.

Если этот 32-разрядный компьютер с ОС имеет 2 ГБ ОЗУ и файл подкачки 2 ГБ, увеличение размера файла подкачки не повлияет на производительность. Это правда?

У вас пятьдесят машин, гараж на четыре машины и стоянка на 100 машин по улице. Вы увеличиваете размер парковки до 200 мест. У вас быстрее получается, что у вас есть 150 дополнительных парковочных мест вместо 50 дополнительных парковочных мест?

66

Это правда, что процессор может адресовать максимум 4 ГБ ОЗУ. Однако современные процессоры используют MMU (блок управления памятью) для преобразования адресов памяти, специфичных для процесса, в адреса физической памяти.

Этот MMU используется для всевозможных уловок, от изоляции памяти (процесс A не может манипулировать памятью процесса B) до совместного использования памяти (процесс A может получить доступ к той же области физической памяти, что и процесс B, и может таким образом обмениваться данными).

Хотя 32-разрядный процессор поддерживает только 4 ГБ памяти на процесс, он может адресовать до 64 ГБ ОЗУ при использовании расширения физических адресов. Это позволяет процессу A использовать первые 4 ГБ памяти, в то время как процесс B использует следующие 4 ГБ. В общей сложности используется более 4 ГБ физической памяти, но общий объем памяти, используемый одним процессом, по-прежнему ограничен 4 ГБ.

PAE поддерживается в Linux начиная с версии ядра 2.3.23 и в некоторых 32-разрядных версиях Windows Server, но не в 32-разрядных Windows XP, Vista или 7.

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

Обратите внимание, что ваша операционная система по-прежнему может извлекать части физической памяти на диск (файл подкачки) независимо от того, поддерживает ли процессор PAE. Это гарантирует, что вы можете запустить несколько процессов, которые используют более 4 Гб вместе. Единственное влияние, которое оказывает PAE, заключается в том, можете ли вы сохранить 4 ГБ процесса B в физической памяти во время выполнения процесса A.

15

Говоря конкретно о 32-разрядных вариантах Windows, они поддерживают более 4 ГБ ОЗУ по сравнению с вариантами Windows 2003 (и вы также можете получить взлом ядра для Windows 7, чтобы позволить вам использовать всю вашу память в 32-разрядной версии). Однако это обходится дорого, как вы обрисовали в общих чертах в первой части вашего вопроса.

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

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


Возвращаясь к вашему вопросу, скажем, у вас есть программа, которая использует 2 ГБ оперативной памяти. Если у вас есть 10 экземпляров этой программы, это 20 ГБ. Все 8 ГБ вашей оперативной памяти будут израсходованы, а также еще 12 ГБ файла подкачки. Так что да, в 32-битных операционных системах более чем возможно использовать эту память.

Если этот 32-разрядный компьютер с ОС имеет 2 ГБ ОЗУ и файл подкачки 2 ГБ, увеличение размера файла подкачки не повлияет на производительность. Это правда?

Увеличение размера файла подкачки, как правило, не приведет к повышению производительности (если только для вашего ОЗУ и файла подкачки не задан абсолютный минимум или он не установлен так низко, что ваш компьютер постоянно работает). Это, однако, предотвратит исчерпание (виртуальной) памяти вашего компьютера. Всякий раз, когда необходимо что-то удалить в файл подкачки, вы уже получаете огромный удар по производительности (поскольку жесткий диск на несколько порядков медленнее, чем ваша RAM).

0

Когда процессор называется 32-разрядным, это означает, что он может работать с 32-разрядными числами, используя одну инструкцию. Это не имеет ничего общего с шириной адресной шины, которая в архитектуре Intel является 36-разрядной с момента выпуска Pentium Pro в 1995 году.

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

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