Может ли 32-разрядная ОС использовать все 8 ГБ ОЗУ + 20 ГБ файла подкачки?

98

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

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

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

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

Атос
источник
2
Как примечание: если у вас более 4 ГБ ОЗУ и только 32-битная ОС, вы можете создать ОЗУ. Это жесткий диск в вашей оперативной памяти, и вы можете использовать неиспользуемую / неадресованную оперативную память для ее размещения.
Саймон Вербеке
10
Ты не можешь Через ОС по-прежнему необходимо создать виртуальный диск, если ОС не может использовать память, вы также не можете создать виртуальный диск. (Если ваш биос не может создать виртуальный диск, что редко).
AVee
1
Краткий ответ - да". Хотя обычно процессу дается 32-битное адресное пространство, сама ОС может использовать больше, чем это (либо путем переключения банков, как мы это делали в 80-х годах, либо путем обучения трюкам с расширением адресов в качестве Intel PAE. Кроме того, помните, что вы выполняете более по одной программе за раз, которая может состоять из более чем одного процесса (Chrome помещает вкладки в разные процессы). А сама ОС будет использовать память для таких вещей, как кэширование данных с локальных фиксированных дисков, чтобы у вас уже был более быстрый доступ к данным б.
rbanffy

Ответы:

145

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

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

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

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

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

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

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

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

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

Эрик Липперт
источник
26
Я считаю, что этот ответ не касается рассматриваемого вопроса и в некоторых случаях обманчив.
Rig
48
@Rig: Отлично, я рад услышать вашу конструктивную критику. Теперь у вас есть шанс написать лучший ответ и показать нам ответ, который вы считаете менее обманчивым и более уместным.
Эрик Липперт
4
@BlueRaja: Я подозреваю, что вы путаете физическую память с памятью . Физическая память - это просто оптимизация, которая обеспечивает более быстрый доступ к памяти. Так же, как и кэш-память процессора - это оптимизация, которая обеспечивает более быстрый доступ к памяти. Память для всех намерений и целей зарезервирована в файле подкачки. Является ли данная страница в файле подкачки (1) сопоставленной с адресом виртуальной памяти или (2) скопированной с диска в физическую память, не имеет отношения к вопросу о том, выделена она или нет.
Эрик Липперт
4
@BlueRaja: статья Рэймонда Чена на эту тему может помочь. Он показывает, как выделить 4 ГБ из файла подкачки; это память, которой владеет процесс . Конечно, процесс не может адресовать все сразу, но он может адресовать любую страницу , сопоставляя страницу с неиспользуемой страницей ВМ, используя ее некоторое время, а затем отбрасывая. blogs.msdn.com/b/oldnewthing/archive/2004/08/10/211890.aspx
Эрик Липперт
3
Этот ответ был бы более понятным, Эрик, если бы вы прямо заявили, что Windows (и другие ОС) позволяют вам «резервировать» память, фактически не располагая ею в виртуальном адресном пространстве, а затем ответить на очевидный вопрос «тогда как вы адрес это? ». Я думаю, что ответ на этот вопрос «есть какой-то идентификатор страницы, который вы используете для ссылки на него, чтобы поместить его в виртуальное адресное пространство, а затем вы можете обратиться к нему там», но я не знаю, и ваш ответ не говорит :)
Тимви
67

Это правда, что процессор может адресовать максимум 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.

Дэйв Уэбб
источник
это значит, что если он не поддерживает, то, что я сказал выше, правильно?
10
Windows XP поддерживает PAE (я думаю, начиная с SP2), но игнорирует ОЗУ за пределами 4 ГБ, даже когда машина поддерживает PAE; см здесь . Он используется для аппаратного предотвращения выполнения данных - бит NX / XD доступен только в записи таблицы страниц PAE, а не в «обычной» записи таблицы страниц.
Вайзард
Чипсет также может быть ограничивающим фактором того, сколько памяти можно поддерживать / использовать независимо от того, какую ОС или взлом вы выберете.
Моав
5
Я бы добавил, что причина, по которой потребительские версии 32-битных окон не поддерживают> 4 ГБ оперативной памяти, заключалась в том, что значительное количество аппаратных дисков не было правильно работать с таким большим объемом памяти; и поскольку в то время> 4 ГБ оперативной памяти было крайне редко за пределами серверов / рабочих станций сверхвысокого уровня, большинство компаний, которые обслуживали драйверы, не были заинтересованы в том, чтобы тратить деньги на обновление драйверов, которые будут использоваться только 0,1% их клиентской базы.
Дэн Нили
6
@DanNeely ОС делает иметь поддержку для памяти, она ограничена из - за проблем с лицензированием . Хотя я согласен, что это сторонний хак, он предназначен только для потребительских вариантов Windows. Серверные дистрибутивы Windows, начиная с Windows 2000 , поддерживают более 4 ГБ памяти (см. Первую ссылку).
Прорыв
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).

Прорвать
источник
Из 4 ГБ адресного пространства, которое получает каждый процесс, только 2 ГБ фактически доступны для использования программой; остальные 2 ГБ зарезервированы для использования ядром. Параметр загрузки / 3GB позволяет некоторым программам использовать больше оперативной памяти.
Вайзард
1
@Breakthrough: «Увеличение размера файла подкачки никогда не увеличит производительность» Я не думаю, что это правда. Например, если происходит больше подкачки, ОС может более агрессивно выгружать неиспользуемые данные программы и использовать свободную оперативную память, например, для кэширования диска. В некоторых конфигурациях это может привести к лучшей производительности. На ServerFault есть хороший ответ о важности файла подкачки, который затрагивает следующие вопросы: serverfault.com/questions/23621/…
sleske
2
Будьте осторожны с такими общими утверждениями, как «Увеличение размера файла подкачки никогда не приведет к увеличению производительности» , поскольку файл подкачки может оказаться слишком маленьким, чтобы привести к большему перерасходу диска, чем файл подкачки большего размера! Смотрите ответы и комментарии в этом вопросе .
Марк Бут
1
@sleske Хороший вопрос, я обновил его, чтобы он был больше похож на «обычно нет». Хотя я согласен, что это может иметь огромное значение для сервера, для большинства людей я пытался донести до них мысль о том, что им было бы лучше получить больше оперативной памяти (поскольку при подкачке страниц производительность довольно низкая. как это можно получить).
Прорыв
-1

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

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

Дмитрий Григорьев
источник
Это неверно, как указано в других предыдущих ответах выше.
ChrisInEdmonton
Не могли бы вы указать один конкретный факт, что я ошибся?
Дмитрий Григорьев
1
Один процесс может использовать более 4 ГБ. В частности, предыдущие ответы указывают на то, что «процесс может иметь больше памяти, чем адресное пространство».
ChrisInEdmonton
2
Смотрите, например, blog.superuser.com/2011/04/23/… Теперь, конечно, вы не можете использовать более 4 ГБ одновременно, но один процесс может отобразить и переназначить память, поэтому может использовать более 4 ГБ в одном процессе, немного бухгалтерского учета. Этот пост в блоге довольно специфичен для Windows. Я запускаю серверы баз данных с выделенной> 4 ГБ памяти при 32-битной установке Linux. В наши дни, конечно, вы просто запускаете 64-битный Linux.
ChrisInEdmonton
1
ОК, мои извинения. Я не думал о возможности mmapдополнительной памяти.
Дмитрий Григорьев