2015-09-25 5 views
0

В настоящее время я пытаюсь понять системное программирование для Linux и с трудом понимаю, как работают виртуальные сопоставления физической памяти.Как работает виртуальная работа в иерархической памяти

Я понимаю, что два процесса P1 и P2 могут ссылаться на один и тот же виртуальный адрес, например 0xf11001. Теперь этот адрес памяти разбит на две части. 0xf11 - номер страницы и 0x001 - это смещение внутри этой страницы (при условии, что используется размер страницы 4096). Чтобы найти физический адрес, MMU имеет аппаратные регистраторы, которые сопоставляют pagenumber с физическим адресом, скажем 0xfff. Последний этап - объединить 0xfff с 0x001 для поиска физического 0xfff001.

Однако это понимание не имеет смысла, одни и те же виртуальные адреса все равно указывают на то же физическое местоположение ??? Какой шаг я пропустил, чтобы мое понимание было правильным?

ответ

1

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

Вот хорошая презентация по этой теме: http://www.eecs.harvard.edu/~mdw/course/cs161/notes/vm.pdf