Страничное управление памятью
Страничное управление памятью является дополнительным средством для организации виртуальной памяти. Страницы не имеют прямой связи с логической структурой данных или программ. Селекторы можно рассматривать как логические имена модулей кодов и данных, страницы же представляют части этих модулей. Учитывая обычные свойства локальности кода и ссылок на данные в оперативной памяти в каждый момент времени надо хранить только небольшие части сегментов необходимые активным задачам. Эту возможность и обеспечивает страничное управление памятью.
Механизм страничного управления использует 2 уровневую табличную трансляцию линейного адреса в физический. Механизм имеет 3 части: каталог страниц, таблицы страниц и собственно страницы.
Регистр CR3 хранит физический адрес каталога страниц. Каталог страниц в 4 Кбайта имеет 1024 строки. Каждая строка содержит 20 старших бит адреса таблицы следующего уровня и признаки этой страницы. Каждая таблица страниц имеет 1024 строки аналогичного формата, но эти строки содержат базовый физический адрес и атрибуты самих страниц. Индексом поиска в каталоге является 10 старших бит линейного адреса, а индексом поиска в таблице является 12-21 биты линейного адреса. Физический адрес собирается из адреса страницы взятого из таблицы и младших 12 бит линейного адреса. Механизм защиты страниц 2 уровня привилегий: пользователь и супервизор. Пользователю соответствует уровень привилегий 3, супервизору уровни 0, 1 и 2. Обращение при каждой операции при доступе к памяти через 2 таблицы расположенные в памяти существенно снижает производительность микропроцессора. Для предотвращения этого замедления существует буфер ассоциативной трансляции TLB для хранения интенсивно используемы строк таблицы. Он представляет собой 4-канальную наборно-ассоциативную КЭШ память на 32 строки таблицы трансляции. Микропроцессоры Pentium и старше позволяют оперировать страницами размером в 4 Мбайта.
Режим виртуального 86 (V86)
Этот режим является особым состоянием задачи защищенного режима. В нем работает защита и механизм страничной переадресации. Основным различием реального и защищенного режимов является интерпретация сегментных регистров. В режиме V86 для получения линейного адреса содержимое сегментных регистров сдвигается на 4 разряда влево и суммируется с эффективным адресом. Один Мбайт адресуемого таким образом пространство с памятью страничной трансляции может отображаться в любую область 4 Гбайт физической памяти. Все программы, выполняемые в режиме V86, имеют уровень привилегий 3. Поэтому программы V86 выполняются со всеми проверками защиты. Прерывание V86 для полной эмуляции машины на микропроцессоре 86 обрабатывается особым образом. Все прерывания и исключения влекут собой смену уровня привилегий обратно к уровню операционной системы защищенного режима. Эта операционная система может распознать по образу регистра флагов в стеке, что прерывание пришло из V86. Далее операционная система может либо обработать это прерывание самостоятельно либо переслать его к операционной системе реального режима работающей в V86. В конечном итоге операционная система защищенного режима может эмулировать окружение обычной 86 машины. Прозрачно для приложения работающего в V86. Вход в режим V86 возможен либо выполнением инструкций IRET в 32 битном режиме, либо переключением задач на задачу, у которой в TSS образ регистра флагов имеет установленный в единицу бит VM. Выход из режима V86 возможен только при обработке прерывания. Если задача имеет CPL=0, то бит VM сбрасывается, и вызываемая задача будет выполняться в защищенном режиме. Если CPI>0, то генерируется исключение 13. Если прерывание вызывает переключение задач, то регистры с флагом VM сохраняются в TSS старой задачи. Новый режим устанавливается по TSS новой задачи. Значение VM не может изменяться никакими другими способами. Более того, его значение не читается.