Рассмотрим архитектуру x86 в защищенном режиме.
Предположим, 0x01 - виртуальный адрес, к которому хочет обратиться процесс и инструкция выглядит например так: mov eax, 0x01
Когда процессор начнет выполнять эту инструкцию, он пойдет в таблицу страниц (page table) (адрес корня которой лежит в регистре cr3), найдет запись соответствующую этой странице (в данном случае номер страницы - 0x0) и проверит специальный бит - присутствует ли страница в памяти или нет.
Предположим, присутствует - тогда процессор возьмет физический адрес этой страницы из таблицы страниц, и получит по нему данные - если они были в L1/L2/L3 кэше, то из кэша, иначе выставит адрес на шину и получит данные из RAM.
Теперь предположим, что страница не присутствует - тогда происходит исключение Page fault (#PF, номер 14 на x86) и вызывается специальный обработчик из ядра операционной системы, который будет решать, откуда взять эту страницу - возможно она есть в свопе, тогда произойдет подкачка страницы из свопа, она запишется в память, бит присутствия станет 1 в соответствующей записи в таблице страниц, а процесс получит нужные ему данные.
Но также возможно, что такой виртуальный адрес (что скорее всего верно для адреса 0x1) процессу недоступен и система пошлет ему сигнал SEGFAULT и он завершится.
Предположим, 0x01 - виртуальный адрес, к которому хочет обратиться процесс и инструкция выглядит например так:
mov eax, 0x01
Когда процессор начнет выполнять эту инструкцию, он пойдет в таблицу страниц (page table) (адрес корня которой лежит в регистре cr3), найдет запись соответствующую этой странице (в данном случае номер страницы - 0x0) и проверит специальный бит - присутствует ли страница в памяти или нет.
Предположим, присутствует - тогда процессор возьмет физический адрес этой страницы из таблицы страниц, и получит по нему данные - если они были в L1/L2/L3 кэше, то из кэша, иначе выставит адрес на шину и получит данные из RAM.
Теперь предположим, что страница не присутствует - тогда происходит исключение Page fault (#PF, номер 14 на x86) и вызывается специальный обработчик из ядра операционной системы, который будет решать, откуда взять эту страницу - возможно она есть в свопе, тогда произойдет подкачка страницы из свопа, она запишется в память, бит присутствия станет 1 в соответствующей записи в таблице страниц, а процесс получит нужные ему данные.
Но также возможно, что такой виртуальный адрес (что скорее всего верно для адреса 0x1) процессу недоступен и система пошлет ему сигнал SEGFAULT и он завершится.