Управление памятью в 32-битной Windows

560
Aman Yadav

В 32-разрядной системе это виртуальное адресное пространство 4 ГБ для всей ОС или для отдельного процесса?

Если это для всей ОС, то разве ОС обманывает каждый процесс, имеющий собственное 4 ГБ адресного пространства?

Когда процесс запущен, он использует все виртуальное адресное пространство? Это то, что мы называем фиксацией или резервированием виртуального адреса?

Как мы можем узнать, сколько виртуального адресного пространства требуется процессу? Что делать, если процесс требует больше виртуального адреса, чем 3 ГБ (система расширенного пользовательского режима).

0
Если я запускаю 3 процесса на 32-битных окнах, которые разработаны с требованиями 1 ГБ ОЗУ каждое. Будет ли проблема выделения памяти в системе с 2 ГБ ОЗУ. Если нет, то как Windows достигает этого.? Все ли виртуальные адресные пространства процесса выделены физическим адресом в физической памяти или это ленивое распределение, когда сопоставление выполняется только при обращении к этому виртуальному адресу? Aman Yadav 6 лет назад 0
Пожалуйста, не расширяйте ваши вопросы в комментариях; [отредактируйте] ваш вопрос, чтобы сделать его более понятным и полным. Scott 6 лет назад 1

3 ответа на вопрос

0
cybernard

Нет, дурака в этом нет, у вас максимум 4 ГБ ОЗУ для всей ОС.

Вы можете включить PAE, который иногда, если он работает, позволяет окнам распознавать более 4 ГБ. До сих пор далеко не так много, как 64-битной ОС.

0
sawdust

Для каждого процесса создается виртуальное адресное пространство объемом 4 гигабайта, которое совместно используется ОС и процессом. ОС решает границу (которая фиксирована для всех процессов).
ОС существует в каждом виртуальном адресном пространстве.
IOW «процесс [имеет] свой собственный 4 ГБ адресного пространства», но должен использовать его совместно с ОС и не может читать, записывать или выполнять часть виртуальной памяти, принадлежащую ядру.

Если я запускаю 3 процесса на 32-битных окнах, которые разработаны с требованиями 1 ГБ ОЗУ каждое. Будет ли проблема выделения памяти в системе с 2 ГБ ОЗУ. Если нет, то как Windows достигает этого.?

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

Можно создать условие нехватки памяти (или OOM), если процессы создают большие требования к памяти и не хватает физической памяти и пространства подкачки.

Все ли виртуальные адресные пространства процесса выделены физическим адресом в физической памяти или это ленивое распределение, когда сопоставление выполняется только при обращении к этому виртуальному адресу?

Никогда не требуется, чтобы вся программа была выделена физической памяти и загружена в память.
Отображение физической памяти для процесса основано на необходимости.
Процесс должен быть резидентным только в том случае, если он фактически выполняется, и как минимум независимо от его размера, только одна страница кода, на которую в данный момент ссылается регистр счетчика программы, и любые страницы ссылок на данные должны быть фактически резидентными,

Так что да, есть «ленивое распределение, при котором сопоставление выполняется только при обращении к этому виртуальному адресу», то есть подкачка по требованию.

0
phuclv

В 32-разрядной системе это виртуальное адресное пространство 4 ГБ для всей ОС или для отдельного процесса?

Каждый процесс имеет свое собственное виртуальное адресное пространство 4 ГБ, из которых 2 ГБ предназначены для пространства ядра. В 32-битной Windows вы можете использовать LARGEADDRESSAWAREвместе с /3GBопцией загрузки, чтобы уменьшить пространство ядра до 1 ГБ

ОС получит более широкую адресную шину с PAE, поэтому она может адресовать более 4 ГБ ОЗУ.

Если это для всей ОС, то разве ОС обманывает каждый процесс, имеющий собственное 4 ГБ адресного пространства?

Здесь нет дурака. Виртуальный адрес! = Физический адрес . Каждый процесс всегда имеет свое собственное адресное пространство 4 ГБ независимо от объема физической памяти, чтобы он не мог испортить данные других процессов. Даже если у вас всего 128 МБ ОЗУ, у вас все еще есть адресное пространство 4 ГБ. Это потому, что указатели в 32-битных программах всегда имеют 32-битную ширину. Адресное пространство используется не только для оперативной памяти, но и для устройств MMIO, и процесс также может сопоставить файл непосредственно в свое адресное пространство.

Если в системе более 4 ГБ ОЗУ, процесс может использовать AWE для сопоставления старших адресов с окном 4 ГБ, чтобы иметь доступ ко всей доступной памяти. Или он также может создавать несколько процессов, таких как Adobe Premiere CS4, чтобы использовать больше, чем ограничение памяти одного процесса

Когда процесс запущен, он использует все виртуальное адресное пространство? Это то, что мы называем фиксацией или резервированием виртуального адреса?

Процесс имеет 2-4 ГБ адресного пространства, но, конечно, от процесса зависит, какой объем памяти ему требуется. Если процесс запросил больше памяти, чем доступно, но фактически не записал в эту область, то он фактически не потребляет никакой памяти. Это называется фиксацией и разрешено в Linux, но Windows не позволяет выделять больше, чем доступно ОЗУ + файл подкачки

Как мы можем узнать, сколько виртуального адресного пространства требуется процессу? Что делать, если процесс требует больше виртуального адреса, чем 3 ГБ (система расширенного пользовательского режима).

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

  • Запустите процесс в 64-битной Windows LARGEADDRESSAWARE, в этом случае он может получить доступ к 4 ГБ памяти
  • Использует более одного процесса, как в примере с Premiere CS4 выше
  • Используйте AWE, как указано выше
  • Перепишите алгоритм так, чтобы он занимал меньше памяти, если у вас есть исходный код
  • Используйте 64-битную версию программы

Если я запускаю 3 процесса на 32-битных окнах, которые разработаны с требованиями 1 ГБ ОЗУ каждое. Будет ли проблема выделения памяти в системе с 2 ГБ ОЗУ

Обычно проблем не возникает, поскольку некоторые из них можно перенести в файл подкачки. Но, конечно, это будет намного медленнее

Если нет, то как Windows достигает этого? Все ли виртуальные адресные пространства процесса выделены физическим адресом в физической памяти или это ленивое распределение, когда сопоставление выполняется только при обращении к этому виртуальному адресу?

Весь виртуальный адрес не отображается линейно как огромный кусок в физическое адресное пространство. Память отображается на страницах, поэтому в адресном пространстве процесса будет много неопределенных адресов

pagetable

Более того, некоторые физические страницы будут отображаться в нескольких виртуальных адресных пространствах, чтобы процессы могли обмениваться данными. Некоторые общие страницы, помеченные как «только для чтения», также будут автоматически клонированы при записи для сохранения памяти. Это называется копирование при записи

Вы должны сначала прочитать о виртуальной памяти