При доступе к виртуальной/физической памяти программы пользовательского пространства

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

Теперь, когда запускается процесс пользовательского пространства, ядро ​​​​настраивает для него память и таблицу подкачки (насколько я понимаю). Теперь после запуска программы, как именно работает доступ к памяти? Каждое ли отдельное действие, которое требует чтения/записи памяти (по сути, почти все), должно проходить через ядро ​​для преобразования адресов, или процесс может «напрямую» обращаться к памяти. Имеется в виду компонент (в основном mmu), который выполняет перевод «на лету» без необходимости переключения на ядро. для перевода.

tl;dr есть ли физический компонент, который выполняет сопоставление виртуальных-> физических адресов, или все это обрабатывается ядром.

p.s. если это имеет значение, я говорю о процессоре x86 и Linux.


person jfp    schedule 19.08.2017    source источник
comment
Ядро обеспечивает необходимые структуры подкачки и настраивает систему для подкачки, но сама трансляция адресов выполняется чисто аппаратно, за исключением, возможно, ошибки страницы. Прочтите предложенный дубликат сообщения или это руководство Intel, особенно Глава 4.   -  person cadaniluk    schedule 19.08.2017
comment
Да, MMU справляется с этим без обращения к ядру. Если это что-то, что MMU не может обработать (например, страница все еще находится на диске), она просто регистрируется как несуществующая. Любой доступ к такой странице заставляет MMU регистрировать ошибку страницы, которая затем обрабатывается ядром.   -  person that other guy    schedule 20.08.2017
comment
Каждое ядро ​​имеет оборудование, которое может читать таблицы страниц и кэшировать эти переводы. Он называется TLB (перевод резервного буфера) и позволяет современным процессорам, таким как Intel Haswell, поддерживать пропускную способность 2 загрузки + 1 сохранение за такт. (И есть отдельный iTLB для получения инструкций). На x86 промахи TLB разрешаются аппаратным обеспечением обхода страниц, который читает таблицы страниц без вмешательства ядра. (И это может быть сделано даже предположительно, как своего рода предварительная выборка TLB.)   -  person Peter Cordes    schedule 20.08.2017
comment
@thatotherguy: Вы могли бы назвать аппаратное обеспечение TLB + обхода страниц MMU, если хотите, но на самом деле поддержка подкачки встроена в различные части ядра, включая кэши L1 (которые виртуально индексируются / физически помечены, хотя это сделано таким образом, что они также физически индексируются, используя только биты адреса ниже разделения страницы). Кэши Intel uop адресуются виртуально, поэтому аннулирование iTLB должно вытеснять строки кэша uop. На самом деле нет отдельной вещи, которую можно было бы назвать MMU, но она работает как простая ментальная модель.   -  person Peter Cordes    schedule 20.08.2017