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