32-битное физическое разрешение таблицы страниц - PullRequest
0 голосов
/ 22 июля 2011

Я использую 32-битную систему в устаревшем режиме на 64-битной архитектуре (x86-64).Когда создается новый процесс, ядро ​​должно решить, где в физической памяти должны быть выделены все страницы, необходимые во время создания экземпляра (при условии, что один поток может включать в себя несколько областей памяти, таких как стек, кучи и т. Д.).

Я предполагаю, что ядро ​​хранит некоторый динамический список используемых кадров физической памяти, а также статический список всех областей физической памяти, которые были заняты устройствами для систем.которые используют отображенный в память IO.Это правильно?

Кроме того, я также прочитал, что 32-разрядная система Windows имеет ограничение физической памяти 4 ГБ (вероятно, из-за минимальных предположений шины адреса), поэтому, хотя система может иметь более 4Если установлено гигабайт физической памяти, 32-разрядное ядро ​​будет выделять адреса только в диапазоне 4 ГБ.

Конкретная информация о низкоуровневой реализации операционной системы для конкретных случаев, таких как это довольно сложно найти в Интернете.Может ли кто-нибудь проверить эти заявления и, возможно, направить меня к источнику, где я мог бы получить больше информации?

Спасибо за ваши соображения.

Ответы [ 2 ]

0 голосов
/ 23 июля 2011

Когда создается новый процесс, ядро ​​должно решить, где в физической памяти должны быть размещены все страницы, необходимые во время создания экземпляра

Почему это должно решаться во время создания процесса? Фактически, он создает их только по требованию - он просто создает PTE (т. Е. «Этот диапазон адресов действителен», но страницы не поддерживаются каким-либо образом); когда процесс впервые начинает выполняться, он сразу же сбои страниц .

Что такое ошибка страницы? Происходит следующее: сначала ЦП читает TLB, чтобы узнать, есть ли у него адресное отображение кадра Когда это не удается, он обходит PTE в поисках подходящей записи. Если запись не найдена или запись указывает на то, что страница не поддерживается, генерируется page-fault . Это означает, что возникает исключение ЦП, и ЦП сразу же переходит на предварительно определенный адрес. Сначала ядро ​​сохраняет контекст процессора (то есть регистры в месте сбоя), а затем отправляет обработчику ошибок страницы.

Когда происходит сбой страницы, Mm (диспетчер памяти в NT) считывает сопоставление в своих собственных структурах данных (помните, что все образы PE являются файлами сопоставления памяти) и определяет в это время, какой физический кадр (т.е. реальный кусок памяти '), который будет использоваться.

Как только сбой страницы устранен, сбой страницы восстанавливает сохраненный контекст ЦП, возвращается к исходному состоянию и повторяет команду, которая вызвала сбой.

Вы правы, что 32-разрядная ОС будет использовать только 4 ГБ адресного пространства ( не ОЗУ! Не забывайте об этих отображаемых в памяти устройствах и файлах!), Процессор будет работать в 32 -битный режим и интерпретировать PTE как 32-битные (помните, что длинный режим AMD64 добавляет дополнительный уровень таблиц страниц и расширяет адресное пространство до 48 бит).

0 голосов
/ 22 июля 2011

32-битные системы могут напрямую обращаться только к 4 гигабайтам (2 ^ 32 = 4 гигабайт).Есть хаки PAE , которые позволяют системе иметь более 4 гигабайт физического ОЗУ, но ни у одного процесса не может быть больше 4 гигабайт.Кроме того, даже если у вас есть 4 ГБ ОЗУ, вы никогда не увидите более 3,5 ГБ или около того реально доступных - некоторые зарезервированы для аппаратных устройств отображения памяти, таких как ваш видео ОЗУ.

Для одного методаИмея дело с отображением физической и виртуальной памяти, посмотрите на TLB

...