Как пишут в разных источниках, традиционный размер страницы виртуальной памяти - 4 килобайта (относительно недавно появились и внедряются технологии мегастраниц, но к делу это щас не относится). Т.е. адресация ВНУТРИ страницы - 12битовая, от 0 до 4095 байта. Ок
(
Read more... )
Адрес состоит из трех полей - два по 10 бит, младшее 12 бит (адрес внутри страницы).
В регистре CR3 находится адрес таблицы страниц первого уровня, прибавляем к нему 10-битное значение (старшее), получаем адрес, по которому адрес начала таблицы страниц второго уровня. Прибавляем к этому адресу 10-битное значение (второе), получаем адрес, по которому находится адрес начала страницы. Прибавляем к нему 12-битный адрес внутри страницы и получаем адрес физической памяти.
Плюс в обеих таблицах есть биты, означающие, существует ли в памяти эта таблица или страница и какой доступ к ней разрешен.
Если все в порядке - происходит доступ к данным, если что-то не так (например, страницы нет в памяти) - прерывание и дальше ОС разбирается.
Чтобы не делать двух дополнительных обращений в память, есть TLB на 32 элемента (кэш страниц), в которой находятся элементы, относящиеся к наиболее часто используемым страницам. Интел утверждает, что это обеспечивает вероятность кэш-промахов не более 2%.
При переключении процессов происходит запись в CR3 другого адреса таблицы первого уровня и все элементы TLB делаются не значимыми.
Все.
Остальное (в более новых процессорах) - оптимизации и модификации. Например, таблица страниц может иметь три или четыре уровня. TLB может быть больше и в каждом элементе ее может храниться номер процесса (чтобы не нулить всю TLB при переключении процессов).
Reply
Reply
Leave a comment