Что я понимаю о 32-битных ОС, так это то, что адрес выражается в 32 битах, поэтому в большинстве случаев ОС может использовать 2 32 = 4 ГБ памяти - я предполагаю, что единица измерения - байты, поэтому 4 ГБ.
Означает ли это, что если какая-либо машина с 32-разрядной ОС (будь то Windows или Unix) имеет более 4 ГБ ОЗУ + файл подкачки на жестком диске, например, 8 ГБ ОЗУ и файл подкачки 20 ГБ, ее память никогда не будет «использована» «?
Под «использованным» я подразумеваю, что увеличение ОЗУ или файла подкачки не повлияет на производительность; Конечно, всегда возможно, что приложение будет продолжать запрашивать память у ОС, но не получится.
Аналогично, если этот 32-разрядный компьютер с ОС имеет 2 ГБ ОЗУ и 2 ГБ файла подкачки, увеличение размера файла подкачки не повлияет на производительность. Это правда?
Ответы:
Максимум, что может адресовать процесс - это 4 ГБ. Вы потенциально путаете память с адресным пространством . Процесс может иметь больше памяти, чем адресное пространство. Это совершенно законно и довольно часто встречается в обработке видео и других приложениях, требующих большого объема памяти. Процесс может быть выделен десятки ГБ памяти и поменять его в адресном пространстве и из него по желанию. В адресное пространство пользователя одновременно может входить только 2 ГБ .
Если у вас есть гараж на четыре машины в вашем доме, вы все равно можете иметь пятьдесят автомобилей. Вы просто не можете держать их всех в своем гараже. Вы должны иметь вспомогательное хранилище где-то еще, чтобы хранить как минимум 46 из них; какие автомобили вы держите в своем гараже, а какие - на парковке вниз по улице - решать только вам.
Абсолютно это не значит. Один процесс может использовать больше памяти, чем это! Опять же, объем памяти, который использует процесс, практически не связан с количеством виртуального адресного пространства, которое использует процесс. Точно так же, как количество автомобилей, которые вы держите в своем гараже, совершенно не связано с количеством автомобилей, которыми вы владеете.
Более того, два процесса могут совместно использовать не частные страницы памяти . Если все двадцать процессов загружают одну и ту же DLL, все процессы совместно используют страницы памяти для этого кода. Они не разделяют адресное пространство виртуальной памяти , они разделяют память .
Моя точка зрения, на случай, если неясно, что вы должны перестать думать о памяти и адресном пространстве как об одном и том же, потому что это совсем не одно и то же.
У вас пятьдесят машин, гараж на четыре машины и стоянка на 100 машин по улице. Вы увеличиваете размер парковки до 200 мест. У вас быстрее садится какая-нибудь машина, потому что у вас теперь 150 дополнительных парковочных мест вместо 50 дополнительных парковочных мест?
источник
Это правда, что процессор может адресовать максимум 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.
источник
Говоря конкретно о 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-битных операционных системах более чем возможно использовать эту память.
Увеличение размера файла подкачки, как правило, не приведет к увеличению производительности (если только для вашего ОЗУ и файла подкачки не задан абсолютный минимум или он не установлен слишком низко, ваш компьютер постоянно перебивает). Это, однако, предотвратит исчерпание (виртуальной) памяти вашего компьютера. Всякий раз, когда нужно что-то удалить в файл подкачки, вы уже получаете огромный удар по производительности (поскольку жесткий диск на несколько порядков медленнее, чем ваша RAM).
источник
Когда процессор называется 32-разрядным, это означает, что он может работать с 32-разрядными числами, используя одну инструкцию. Это не имеет ничего общего с шириной адресной шины, которая в архитектуре Intel является 36-разрядной с момента выпуска Pentium Pro в 1995 году.
Известное ограничение в 4 ГБ происходит из-за того, что в большинстве программ для ПК используется модель плоской памяти, где каждый байт памяти может быть адресован указателем. Поскольку указатель должен помещаться в регистр, который будет использоваться, а регистры имеют ширину 32 бита, вы ограничены 4 ГБ.
источник
mmap
дополнительной памяти.