Когда создается новый процесс, ядро должно решить, где в физической памяти должны быть размещены все страницы, необходимые во время создания экземпляра
Почему это должно решаться во время создания процесса? Фактически, он создает их только по требованию - он просто создает PTE (т. Е. «Этот диапазон адресов действителен», но страницы не поддерживаются каким-либо образом); когда процесс впервые начинает выполняться, он сразу же сбои страниц .
Что такое ошибка страницы? Происходит следующее: сначала ЦП читает TLB, чтобы узнать, есть ли у него адресное отображение кадра Когда это не удается, он обходит PTE в поисках подходящей записи. Если запись не найдена или запись указывает на то, что страница не поддерживается, генерируется page-fault . Это означает, что возникает исключение ЦП, и ЦП сразу же переходит на предварительно определенный адрес. Сначала ядро сохраняет контекст процессора (то есть регистры в месте сбоя), а затем отправляет обработчику ошибок страницы.
Когда происходит сбой страницы, Mm (диспетчер памяти в NT) считывает сопоставление в своих собственных структурах данных (помните, что все образы PE являются файлами сопоставления памяти) и определяет в это время, какой физический кадр (т.е. реальный кусок памяти '), который будет использоваться.
Как только сбой страницы устранен, сбой страницы восстанавливает сохраненный контекст ЦП, возвращается к исходному состоянию и повторяет команду, которая вызвала сбой.
Вы правы, что 32-разрядная ОС будет использовать только 4 ГБ адресного пространства ( не ОЗУ! Не забывайте об этих отображаемых в памяти устройствах и файлах!), Процессор будет работать в 32 -битный режим и интерпретировать PTE как 32-битные (помните, что длинный режим AMD64 добавляет дополнительный уровень таблиц страниц и расширяет адресное пространство до 48 бит).