Поправь меня, я ошибаюсь.
Q1) Насколько я понимаю, в 32-битном режиме мы получаем виртуальное адресное пространство 4 ГБ. Это потому, что 32-битная Windows может поддерживать только 4 ГБ физической ОЗУ?
Q2) Каждый процесс получает свое собственное 4 ГБ адресное пространство. Пользовательский режим 2 ГБ и ядро 2 ГБ. Связывает ли процесс весь свой код с пользовательским режимом, и компоненты ОС, необходимые для взаимодействия этого процесса с процессором для выполнения кода, загружаются в режиме ядра.
В3) Если процесс получает свое собственное пространство 4 ГБ. Если я загружу 3 процесса, всего 12 ГБ адресного пространства. Будет ли у меня проблема с производительностью, так как у меня всего 4 ГБ ОЗУ?
Но так как виртуальный адрес предназначен для удовлетворения потребностей процесса в случае меньшего объема оперативной памяти. Так что мой реальный вопрос: когда процесс (приложение с одним процессом) загружает, отображает ли он весь код на виртуальный адрес 4 ГБ, независимо от того, что приложение в настоящее время выполняет только определенную часть всего кода.
Я понимаю, что когда процесс запускается, весь его код загружается в виртуальное адресное пространство в режиме пользователя 2 ГБ, а остальные 2 ГБ загружают файлы ядра ОС. Теперь с помощью таблиц страниц виртуальный адрес отображается на физический адрес в оперативной памяти и на диске.Все ли 4 ГБ виртуальные адреса будут сопоставлены с 4 ГБ физической ОЗУ, а остальные находятся в файле подкачки? Если я отказываюсь использовать файл подкачки, означает ли это, что только 32 процесса с виртуальным адресом 4 ГБ могут работать в 32-разрядной ОС 4 ГБ?
================================================== =========================== Спасибо за предыдущие ответы.
Я все еще немного озадачен тем, как разделено адресное пространство пользователя и ядра.
1) Является ли адресное пространство ядра размером 2 ГБ общим для всего процесса, поскольку оно является системным и загружается во время загрузки. или каждый процесс получает 2 ГБ адресного пространства ядра.? 2) Я читал, что какое-то плохо написанное приложение может потреблять все его адресное пространство. Означает ли это, что на других компьютерах емкостью 4 ГБ нет места для запуска других приложений? 3) Если адресное пространство ядра совместно используется всеми процессами, не исчерпывается ли оно когда-либо вне адресного пространства или никогда не происходит, потому что (я думаю) адрес ядра остается фиксированным на основе архитектуры ОС и используется всеми процессами. 4) При использовании переключателя USERVA адрес ядра сокращается до 1 ГБ только для приложений с поддержкой большого адреса. Почему не делать это для всех процессов, если адресное пространство ядра, если 2GB (который я думаю) распределяется между всеми процессами.? 5) Как именно мы различаем ч / б виртуальную память и виртуальный адрес Sace.? Если приложению требуется 5 ГБ памяти в соответствии с разработчиком, оно не будет работать на 32-разрядной машине с адресом 2 ГБ (можно ли сказать, что виртуальная память процесса = виртуальное адресное пространство процесса?)