Виправте мене, я помиляюся.
Q1) Я розумію, що в 32-бітовому режимі ми отримуємо віртуальний адресний простір 4 Гб. Це тому, що 32-бітна Windows може підтримувати лише 4 Гб фізичної оперативної пам’яті.
Q2) Кожен процес отримує свій приватний адресний простір у 4 ГБ. Режим користування 2 ГБ і ядро 2 ГБ. Чи процес відображає весь код у режимі користувача, і компоненти ОС, необхідні для цього процесу для зв'язку з процесором для виконання коду, завантажуються в режимі ядра.?
Q3) Якщо процес отримує свій приватний 4 Гб місця. Якщо я завантажую 3 процесу, загалом 12 ГБ адресного простору. Чи виникне проблема з продуктивністю, оскільки у мене є лише 4 ГБ оперативної пам’яті.
Але оскільки віртуальна адреса призначена для задоволення потреб процесу у випадку меншої оперативної пам'яті. Так що моє справжнє запитання, коли процес (однопроцесовий додаток) завантажує чи він відображає весь код на віртуальну адресу 4 Гб незалежно від того, що програма зараз виконує лише певну частину всього коду.
Я розумію, що коли запускається процес, весь його код завантажується у віртуальний адресний простір в режимі користувача 2 ГБ, а решта 2 Гб він завантажує файли ядра ОС. Тепер за допомогою таблиць сторінок віртуальна адреса відображається на фізичну адресу в оперативній пам'яті та на диску. Якщо я відмовляюся використовувати файл сторінки, чи означає це, що лише 1 процес з віртуальною адресою 4 Гб може працювати на 32-бітній 4 Гб ОС?
===================================================== =========================== Дякую за попередні відповіді.
Я все ще трохи заплутаний у тому, як розділений простір адрес користувача та ядра.
1) Чи розділяється адресний простір ядра в 2 Гб усім процесом, оскільки він є загальносистемним і завантажується під час завантаження. або Чи кожен процес отримує 2 Гб адресного простору ядра.? 2) Я читаю, що погано написана програма може споживати весь її адресний простір. Чи означає це, що зараз немає місця для запуску інших програм на машині 4 Гб.? 3) Якщо адресний простір ядра є спільним для всіх процесів, чи коли-небудь у нього не вистачає адресного простору, або це ніколи не відбувається, тому що (я думаю) адреса ядра залишається виправленою на основі архітектури ОС і поділяється всім процесом. 4) За допомогою перемикача USERVA адреса ядра зменшується до 1 ГБ лише для додатків із відомою великою адресою. Чому це не робиться для всіх процесів, якщо простір адреси ядра, якщо 2 Гб (що, на мою думку), є спільним для всіх процесів.? 5) Як саме ми розмежовуємо б / ч віртуальну пам’ять та віртуальну адресу. ? Якщо програмі потрібно 5 Гб оперативної пам’яті відповідно до розробника, вона не працюватиме на 32-бітній машині з 2 Гб адресою (чи добре сказати віртуальна пам'ять процесу = віртуальний адресний простір процесу?)