Управление памятью в микропроцессорах семейства Х86, страница 10

00010110        01000110        01110110        10100110        11010110      100000110

00010111        01000111        01110111        10100111        11010111      100000111

00011000        01001000        01111000        10101000        11011000      100001000

00011001        01001001        01111001        10101001        11011001      100001001

00011010        01001010        01111010        10101010        11011010      100001010

00011011        01001011        01111011        10101011        11011011      100001011

00011100        01001100        01111100        10101100        11011100      100001100

00011101        01001101        01111101        10101101        11011101      100001101

00011110        01001110        01111110        10101110        11011110      100001110

00011111        01001111        01111111        10101111        11011111      100001111

00100000        01010000        10000000        10110000        11100000      100010000

00100001        01010001        10000001        10110001        11100001      100010001

00100010        01010010        10000010        10110010        11100010      100010010

00100011        01010011        10000011        10110011        11100011      100010011

00100100        01010100        10000100        10110100        11100100      100010100

00100101        01010101        10000101        10110101        11100101      100010101

00100110        01010110        10000110        10110110        11100110      100010110

00100111        01010111        10000111        10110111        11100111      100010111

00101000        01011000        10001000        10111000        11101000      100011000

00101001        01011001        10001001        10111001        11101001      100011001

00101010        01011010        10001010        10111010        11101010      100011010

00101011        01011011        10001011        10111011        11101011      100011011

00101100        01011100        10001100        10111100        11101100      100011100

00101101        01011101        10001101        10111101        11101101      100011101

00101110        01011110        10001110        10111110        11101110      100011110

00101111        01011111        10001111        10111111        11101111      100011111

Поэтому страничное преобразование памяти широко распространено при организации систем виртуальной памяти. Прикладные программы не касаются процесса страничного преобразования адреса и могут использовать все линейное адресное пространство. Когда программа обращается к странице, отсутствующей в физической памяти, процессор автоматически формирует особый случай страничного нарушения. При этом адрес, по которому был обнаружен последний отказ страницы, заносится и хранится в регистре управления CR2. При обработке этого особого случая операционная система загружает в оперативную память, затребованную страницу из внешней памяти (при необходимости отправляя ненужную страницу из оперативной памяти на диск). Поэтому сутью страничного преобразования является способ отображения любой страницы линейного адресного пространства на страничный кадр физического памяти.

Границы страниц следуют через одинаковые интервалы 4Кбайт. В то же время границы сегментов являются произвольными, так как определяются базовыми адресами конкретного сегмента. Строго говоря, границы страниц и сегментов не зависят друг от друга и не обязательно должны быть выровнены. Однако для повышения производительности процессора рекомендуется выравнивать небольшие сегменты (с размером 4Кбайт и менее, например сегменты состояния задач TSS), так, чтобы они полностью находились в пределах одной страницы. Такое выравнивание гарантирует, что при загрузке одной страницы будет полностью загружен весь сегмент.

Отметим также, что система защиты используется как на уровне сегментов, так и на уровне страниц. Отличие заключается в том, что если для сегментов предусмотрено 4 уровня привилегий (0,1,2,3), то при страничной организации памяти имеется всего два уровня привилегий: пользователь и супервизор. При этом уровень 3 соответствует уровню пользователя (User), а уровни 0,1,2 – уровню супервизора (Supervisor).

            Организация страничного преобразования.

В процессе страничного преобразования старшие 20 бит 32-разрядного линейного адреса, которые представляют номер виртуальной страницы, заменяется другим 20-битным значением – номером физической страницы. Это осуществляется с помощью специальной таблицы страниц.

Остающиеся младшие 12 бит линейного адреса, определяют положение адресуемого байта внутри страницы (смещение в странице), и остаются неизменными. Прежде чем рассмотреть схему устройства реализации страничного преобразования адресов в современных микропроцессорах, рассмотрим общий принцип страничного преобразования виртуальных адресов адресного пространства размером 4 Г (т.е. 32-разрядных адресов) в адреса физической оперативной памяти общим объемом 32 Кбайт.

                

Рис III.19  Схема преобразования адреса виртуальной памяти в  физический

                        адрес реальной оперативной памяти.  

Будем считать, что размер страничного кадра физической оперативной памяти равен 4 Кбайт (наиболее широко используемый размер страниц). Следовательно, наша оперативная память будет содержать всего  8 страничных кадров. А поскольку пользователю дается в распоряжение 4 Гбайт памяти, то устройство преобразования адресов должно отображать 4 Гбайт виртуальной памяти на 32 Кбайт реальной физической оперативной памяти используемого компьютера. В случае же отсутствия запрашиваемого адреса в оперативной памяти, недостающая страница с требуемым адресом должна быть вызвана из внешней памяти, помещена в оперативную память и запрос по требуемому адресу должен быть повторен.