Алгоритм - Учебный центр

Версия сайта для слабовидящих
Заполните форму ниже! Мы вам перезвоним!
Подтверждая отправку данной формы, Вы даете Согласие на обработку персональных данных в соответствии с Политикой обработки персональных данных

Организация виртуальной памяти (ликбез).

Организация виртуальной памяти (ликбез).

Виртуальная память организуется и поддерживается операционной системой, которая использует для этого возможности защищенного режима процессоров фирмы Intel. Виртуальная память состоит из сегментов памяти, большая часть из которых размещены на жестких дисках, а другая часть сегментов располагается в оперативной динамической памяти на системной плате. Обращение процессора в сегмент виртуальной памяти, который находится на жестком диске и не доступен напрямую процессору, является для процессора событием вызывающем в нем внутреннее прерывание. Через прерывание процессор переходит на выполнение системной программы, которая выполняет «подкачку» нужного сегмента виртуальной памяти с жесткого диска в динамическую оперативную память, и «выгрузку» ненужного сегмента на жесткий диск.

Наиболее полно возможности микропроцессоров реализуются при работе в защищенном режиме. Это основной режим работы процессоров (64 Гбайт ОЗУ, 64 Тбайт виртуальной ОЗУ, память доступна сегментами, размер которых задается программно до 4 Гбайт, реализованы мощные средства защиты для эффективной реализации мультипрограммных режимов операционных систем). Обеспечивается защита пользовательских программ друг от друга и от операционной системы, предотвращающая несанкционированное вмешательство в их работу. В защищенном режиме запрещено:

- программе обращаться за пределы своего сегмента;

- использовать в прикладных программах команды IN, OUT, HLT;

- процессору обращаться в сегмент у которого уровень привилегий более высокий чем у процессора;

- и т. д..

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

Переключение процессора в защищенный режим осуществляется программным путем записью единицы в бит PE (0-й разряд регистра процессора CR0 (MSW) с помощью команды MOV или LMSW. Обратный переход в реальный режим возможен только с помощью команды MOV записью в бит PE нуля. Перед переключением процессора в защищенный режим необходимо, в реальном режиме, в оперативной памяти создать глобальную дискрипторную таблицу GDT, локальную дискрипторную таблицу LDT, и дискрипторную таблицу области векторов IDT, загрузить в регистры процессора необходимую для работы в защищенном режиме управляющую информацию, так как без этого переключение процессора в защищенный режим не имеет смысла.

При работе микропроцессора в защищенном режиме каждый из сегментов — сегмент команд, данных, стека - характеризуется соответствующими атрибутами, которые определяют локализацию данного сегмента в общем пространстве адресуемой памяти и правила обращения к нему. Атрибуты сегмента представлены в виде 8-байтной структуры данных, называемой дескриптором. Дескрипторы сегментов хранятся в памяти в виде массивов данных, в форме таблиц. Микропроцессоры использует три типа таблиц дескрипторов: GDT - глобальная таблица дескрипторов; LDT - локальная таблица дескрипторов; IDT - таблица дескрипторов прерываний.

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

Дескрипторы LDT определяют сегменты прикладной области виртуальной памяти в которых располагаются прикладные программы и их данные. Обычно в дескрипторе содержится базовый (начальный) адрес сегмента, размер сегмента и байт, содержащий «права доступа» к данному сегменту.

Процессор, инициируя на системном интерфейсе операцию обращения в сегмент виртуальной памяти, находит дескриптор, определяющий этот сегмент, с помощью «селектора» содержащегося в соответствующем сегментном регистре CS, DS, SS, ES, FS, GS, или в регистрах TR, LDTR (при обращении за командой находит дескриптор в регистре CS, при чтении данных в регистре DS ...). Селектор представляет собой 16-разрядный указатель, который имеет три поля (рис. 1).

  

Рис. 1.

Поле RPL (биты 0-1) определяет уровень привилегий запроса (requestprivilegelevel). Это двухразрядный код, указывающий допустимый уровень защиты сегмента, который может быть выбран с помощью данного селектора. Поле TI (бит 2) служит индикатором таблицы. Его значение указывает выбираемую таблицу: GDT при ТI=0, LDT при TI-1, то есть указывает на обращение в сегменты системной области виртуальной памяти, или в сегменты прикладной области виртуальной памяти. Поле INDEX (биты 3-15) служит индексом для выбора одного из 8192 дескрипторов, содержащихся в таблице. Физический адрес для чтения дескриптора формируется на сумматоре адреса процессора путем сложения базового адреса сегмента соответствующей дескрипторной таблицы и индекса, взятого из разрядов с 3-15 соответствующего селектора.

Рассмотрим общую схему работы процессора с виртуальной памятью (в защищенном режиме) в двух ситуациях (см. рис. 1):

- выборка первой команды (N) сразу после переключения в защищенный режим;

- выборка команды (K) после переключения на прикладную программу.

В первом случаесчитаем, что в реальном режиме процессор создал таблицы GDT, LDT, IDT, записал 16-ти разрядные селекторы в сегментные регистры, регистр LDTR, записал в регистры GDTR, IDTR базовые адреса и размер сегментов содержащих GDT, IDT. В регистр EIP поместил адрес (смещение – IP1) первой исполняемой команды, которая будет выбрана и выполнена уже в защищенном режиме. Таким образом в сегментном регистре CS находится селектор, у которого разряд 2 = 0, а в разрядах с 3 по 15 содержится адрес (индекс – Инд1) дескриптора «B» (в GDT), который определяет сегмент (БА1 – базовый адрес, PС1 - размер, БПД1- байт с правами доступа к сегменту) c программой, которая будет исполняться в защищенном режиме.

Процессор программным путем (запись 1 в бит «PE» регистра PC0) переключен в защищенный режим, и так как 2-й разряд селектора в регистре CS равен «0», переходит к формированию физического адреса для выбора (из GDT) дескриптора «В». Процессор берет базовый адрес сегмента GDT из регистра GDTR (БА GDT), а смещение (Инд1) из разрядов с 3 по 15 селектора в регистре CS, складывает их на сумматоре адреса, и по полученному, таким образом физическому адресу, инициирует на системном интерфейсе операцию «чтение дескриптора». Считывает из GDT содержимое дескриптора «В» и принимает эту информацию (БА1, PС1, БПД1) в аппаратный регистр соответствующий регистру CS. Процессор проверяет, сравнивая значения IP1 и PC1, не обращается ли он за командой за границу сегмента, сравнивает уровни привилегий взятые из 0-1 разрядов селектора в регистре CS и из байта БПД1, и проверяет значение бита присутствия Р (бит 7 БПД1) и определяет наличие соответствующего сегмента в памяти (если Р=0, то сегмент отсутствует в DRAM). Если все три проверки завершились положительно (уровни привилегий соответствуют, обращение за командой в пределах границы сегмента, и сегмент памяти присутствует в DRAM), то процессор переходит к формированию физического адреса для чтения команды (N) из сегмента памяти, содержащего программу. Процессор берет базовый адрес сегмента (БА1) из аппаратного регистра в котором находится, прочитанное из GDT, содержимое дескриптора «В», а из регистра EIP берет адрес (смещение – IP1) команды (N), складывает их на сумматоре адреса, и по полученному, таким образом физическому адресу, инициирует на системном интерфейсе операцию «чтение команды». Принимает, прочитанную из памяти команду, отрабатывает ее, прибавляет к содержимому регистра EIP длину выполненной команды, формируя адрес (новое смещение IP1) для выборки следующей команды (N+1). Затем опять проверяет, сравнивая новое значение IP1 и PC1, не обращается ли он за командой за границу сегмента, сравнивает уровни привилегий взятые из 0-1 разрядов селектора в регистре CS и из байта БПД1, и проверяет значение бита присутствия Р (бит 7 БПД1) и определяет наличие соответствующего сегмента в памяти (если Р=0, то сегмент отсутствует в DRAM). Если все три проверки завершились положительно (уровни привилегий соответствуют, обращение за командой в пределах границы сегмента, и сегмент памяти присутствует в DRAM), то процессор переходит к формированию физического адреса для чтения команды (N+1) из сегмента памяти, содержащего программу. Процессор берет базовый адрес сегмента (БА1) из аппаратного регистра в котором находится, прочитанное из GDT, содержимое дескриптора «В», а из регистра EIP берет адрес (новое значение смещения – IP1) команды (N+1), складывает их на сумматоре адреса, и по полученному, таким образом физическому адресу, инициирует на системном интерфейсе операцию «чтение команды» и т. д..

Если при выполнении сравнения уровней привилегий, обнаружится, что уровень привилегий сегмента (в БПД1) выше уровня привилегий, указанного в разрядах 0-1 селектора в регистре CS, то в процессоре генерируется внутреннее прерывание по «ошибке прав доступа» к сегменту, и процессор через прерывание перейдет на выполнение программы обслуживания этой ошибки, а обращение в сегмент памяти будет, таким образом, заблокировано.

Если при выполнении проверки обнаружится, что обращение за командой будет за границу данного сегмента, то в процессоре генерируется внутреннее прерывание по «ошибке границы сегмента», и процессор через прерывание перейдет на выполнение программы обслуживания этой ошибки, а обращение в сегмент памяти будет, таким образом, заблокировано.

Если при проверке значения бита присутствия Р (в БПД1) будет обнаружено, что Р=0, то есть сегмент отсутствует в DRAM, в процессоре это событие вызовет внутреннее прерывание, и процессор через прерывание перейдет на выполнение программы обслуживания этого события, а обращение в сегмент памяти будет, таким образом, временно заблокировано. Программа обслуживания осуществит «подкачку» нужного сегмента с жесткого диска в DRAM, по базовому адресу (БА1), а «ненужный» сегмент выгрузит на диск, и после этого установит значение бита присутствия Р = 1 (в БПД1). После этого будет возможно обращение процессора в данный сегмент памяти за командой.

При рассмотрении второго варианта, будем считать, что операционная система переключила процессор на выполнение одной из прикладных программ, записав в сегментные регистры и регистр LDTR новые 16-ти разрядные селекторы, определяющие обращение к сегментам программы, данных, LDT этой прикладной программы. В регистр EIP поместила адрес (смещение – IP3) первой исполняемой команды, которая будет выбрана и выполнена в защищенном режиме. Таким образом в сегментном регистре CS находится селектор, у которого разряд 2 = 1, а в разрядах с 3 по 15 содержится адрес (индекс – Инд2) дескриптора «D» (в LDT), который определяет сегмент (БА3 – базовый адрес, PС3 - размер, БПД3- байт с правами доступа к сегменту) c прикладной программой , которая будет исполняться в защищенном режиме. Процессор, так как 2-й разряд селектора в регистре CS равен «1», переходит к формированию физического адреса для выбора из GDT дескриптора «A», который определяет сегмент LDT. Процессор берет базовый адрес сегмента GDT из регистра GDTR (БА GDT), а смещение (Инд.L) из разрядов с 3 по 15 селектора в регистре LDTR, складывает их на сумматоре адреса, и по полученному, таким образом физическому адресу, инициирует на системном интерфейсе операцию «чтение дескриптора». Считывает из GDT содержимое дескриптора «А» и принимает эту информацию (БА LDT, PС DT, БПД) в аппаратный регистр соответствующий регистру LDTR. Затем процессор осуществляет стандартные проверки, и если все проверки завершились успешно, то процессор переходит к формированию физического адреса для чтения дескриптора «D» из LDT, содержимое которого определяет сегмент памяти, содержащий прикладную программу. Процессор берет принятый адрес сегмента LDT из аппаратного регистра (БА LDT), а смещение (Инд2) из разрядов с 3 по 15 селектора в регистре CS, складывает их на сумматоре адреса, и по полученному, таким образом физическому адресу, инициирует на системном интерфейсе операцию «чтение дескриптора». Считывает из LDT содержимое дескриптора «D» и принимает эту информацию (БА3, PС3, БПД3) в аппаратный регистр соответствующий регистру CS. Процессор проверяет, сравнивая значения IP3 и PC3, не обращается ли он за командой за границу сегмента, сравнивает уровни привилегий взятые из 0-1 разрядов селектора в регистре CS и из байта БПД3, и проверяет значение бита присутствия Р (бит 7 БПД3) и определяет наличие соответствующего сегмента в памяти (если Р=0, то сегмент отсутствует в DRAM). Если все три проверки завершились положительно (уровни привилегий соответствуют, обращение за командой в пределах границы сегмента, и сегмент памяти присутствует в DRAM), то процессор переходит к формированию физического адреса для чтения команды (K) из сегмента памяти, содержащего прикладную программу. Процессор берет базовый адрес сегмента (БА3) из аппаратного регистра в котором находится, прочитанное из LDT, содержимое дескриптора «D», а из регистра EIP берет адрес (смещение – IP3) команды (K), складывает их на сумматоре адреса, и по полученному, таким образом физическому адресу, инициирует на системном интерфейсе операцию «чтение команды». Принимает, прочитанную из памяти команду, отрабатывает ее, прибавляет к содержимому регистра EIP длину выполненной команды, формируя адрес (новое смещение IP3) для выборки следующей команды (K+1). Затем опять проверяет, сравнивая новое значение IP3 и PC3, не обращается ли он за командой за границу сегмента, сравнивает уровни привилегий взятые из 0-1 разрядов селектора в регистре CS и из байта БПД3, и проверяет значение бита присутствия Р (бит 7 БПД3) и определяет наличие соответствующего сегмента в памяти (если Р=0, то сегмент отсутствует в DRAM). Если все три проверки завершились положительно (уровни привилегий соответствуют, обращение за командой в пределах границы сегмента, и сегмент памяти присутствует в DRAM), то процессор переходит к формированию физического адреса для чтения команды (K+1) из сегмента памяти, содержащего прикладную программу. Процессор берет базовый адрес сегмента (БА3) из аппаратного регистра в котором находится, прочитанное из LDT, содержимое дескриптора «D», а из регистра EIP берет адрес (новое значение смещения – IP3) команды (K+1), складывает их на сумматоре адреса, и по полученному, таким образом физическому адресу, инициирует на системном интерфейсе операцию «чтение команды» и т. д..

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




Лицензия