Как архитектура x86 одновременно виртуализирует один и тот же адрес?

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


person user1628056    schedule 14.11.2019    source источник
comment
ОС гарантирует, что каждый процесс получит свою собственную таблицу страниц.   -  person Chuck Adams    schedule 14.11.2019
comment
В x86/x86-64, когда ОС выполняет переключение контекста между процессами (приложениями), она обычно изменяет регистр CR3, содержащий адрес корня структур подкачки для процесса. Используя этот метод, каждому процессу можно задать различные сопоставления виртуальных и физических адресов. Также возможно, что разные процессы имеют виртуальный адрес, сопоставленный с тем же физическим адресом, что и другие процессы, что приводит к концепции общей памяти между процессами.   -  person Michael Petch    schedule 14.11.2019
comment
stackoverflow.com/questions/26583919/ упоминает как часть предпосылки вопроса о том, что у каждого процесса есть свои собственные таблицы страниц, но не идеальный дубликат, потому что ответы не об этом. stackoverflow.com/questions/10671147/ имеет комментарий от OP о том, что переключатели контекста должны изменить CR3. Ах, наконец-то нашел вопросы и ответы о выборе таблиц страниц для каждого процесса, где ответ должен установить CR3. Это дубликат, связанный с этим вопросом.   -  person Peter Cordes    schedule 14.11.2019
comment
Также обратите внимание, что каждое логическое ядро ​​имеет свой собственный регистр CR3 (и другое архитектурное состояние), поэтому многоядерные системы могут запускать разные процессы на разных ядрах, даже с гиперпоточностью на одном физическом ядре.   -  person Peter Cordes    schedule 14.11.2019