Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Orgevm_Ekzamen.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
998.59 Кб
Скачать

Механизм перехода в защищенном режиме

Защищенный режим. В этом режиме раскрываются все возможности МП. В этом режиме используются все 32 адресных линии и следовательно может адресоваться память объемом до 4 Гбайт. Сегменты в защищенном режиме имеют переменный объем (от 1 байта до 4 Гбайт). Одновременно МП может работать с 214 таких сегментов. Очевидно, что все эти сегменты могут не поместиться в реально существующей оперативной памяти (ОП), поэтому часть из них (а скорее всего большинство) находится на диске. Когда процессор обращается к сегменту, которого нет в ОП происходит прерывание. Обработчик этого прерывания должен подкачать с диска в ОП нужный сегмент, после чего происходит рестарт «виноватой» команды. От пользователя этот процесс скрыт и у него создается впечатление что в его распоряжении находится виртуальная память объемом 64 Тбайта (214 сегментов по 4 Гбайта каждый, то есть 246 байт).

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

  • как переключаться с задачи на задачу;

  • как защитить задачи друг от друга.

Для решения первой проблемы для каждой задачи в системе создается так называемый «сегмент состояния задачи» (TSS task state segment). Размер этого сегмента должен быть не менее 104-х байт. Когда МП переключается с задачи А на задачу В он автоматически запоминает контекст задачи А (содержимое почти всех своих внутренних регистров) в TSS задачи А, а затем также автоматически загружает в свои регистры контекст задачи В (из TSS задачи В). Тем самым обеспечивается переключение на задачу В и в то же время возможность возврата и продолжения выполнения задачи А. Вообще под задачей понимается любой программный код, для которого в системе создан свой TSS. Создание TSS -это функция операционной системы.

Для решения проблемы защиты задач друг от друга всем создаваемым в системе сегментам присваивается уровень привилегий. Всего возможно четыре уровня привилегий: 0,1,2 и 3, причем 0-й уровень самый старший. Уровень 3 (самый низкий) присваивается обычно сегментам пользователя, уровень 0 - сегментам ОС, а уровни 1 и 2 предназначены для расширения ОС и на практике зачастую не используются .

Когда программа с уровнем привилегий А обращается к сегменту с уровнем привилегий В процессор проверяет условие А <= В. Если это условие выполняется доступ к сегменту будет предоставлен, если же условие не выполняется будет прерывание (нарушены права доступа к сегменту).

Механизм формирования физического адреса в защищенном режиме радикально отличается от механизма i8086. Для каждого создаваемого в системе сегмента создается (как правило ОС) специальная структура, называемая дескриптором этого сегмента. Дескриптор занимает в памяти 8 байт и содержит все необходимые сведения о сегменте: начальный адрес сегмента, размер сегмента, уровень привилегий, атрибуты сегмента и.т.д. МП вычисляет физический адрес по формуле:

Аф = начальный адрес сегмента + Аэф.

При этом, в отличие от i8086, начальный адрес сегмента не вычисляется, а берется готовым из дескриптора.

Все созданные в системы дескрипторы сводятся в дескрипторные таблицы. Любая задача может одновременно работать с двумя такими таблицами. Одна из них называется глобальной (GDT (global descriptor table)), а другая - локальной (LDT (local descriptor table)). В GDT собраны дескрипторы сегментов, разделяемых всеми задачами в системе, а в LDT располагаются дескрипторы сегментов, с которыми работает только данная задача. GDT в системе одна и всегда должна находиться в ОП, а LDT может быть столько же сколько и задач (для любой задачи LDT может быть создана, а может и не создаваться) и располагаться эти таблицы могут как в ОП, так и на диске.

Для того чтобы перейти к новому сегменту, надо обратиться к его дескриптору, то есть надо найти этот дескриптор в дескрипторной таблице. Для этого необходимо знать начальный адрес таблицы и внутритабличное смещение. Это смещение принято называть селектором дескриптора. Практически селектор представляет собой номер дескриптора в таблице. Начальные адреса таблиц процессору известны, они хранятся в специальных внутренних регистрах МП (gdtr и ldtr), а смещение берется из сегментного регистра. При этом любой сегментный регистр в МП имеет формат, приведенный на рис. 2.1 .

Видимая часть

Теневая часть

16 бит

64 бита

Рис. 2.1

Видимая часть доступна программисту, а с теневой частью работает сам МП. Видимая часть имеет формат, приведенный на рис. 2.2.

15 3

2

1 0

селектор

TI

RPL

Рис. 2.2

Здесь старшие 13 разрядов (биты 15 - 3) занимает селектор, определяющий местоположение дескриптора в одной из двух дескрипторных таблиц ( в какой именно задает бит TI (table indicator)). Биты 1 и 0 задают запрашиваемый уровень привилегий (RPL(requested privilege level)). Нетрудно видеть, что максимальное число дескрипторов в любой дескрипторной таблице 213 (поскольку селектор 13-ти разрядный), а максимальный размер таблицы равен 8×213 = 64К. А так как одновременно процессору доступны две такие таблицы то, как уже отмечалось выше, МП одновременно доступны 214 сегментов.

При обращению к новому сегменту в видимую часть сегментного регистра загружается новый селектор. По этому селектору в дескрипторной таблице МП находит дескриптор нового сегмента. Проверяются права доступа (и не только они) и, если они не нарушены, найденный дескриптор копируется (кэшируется) в теневую часть сегментного регистра (с тем чтобы в дальнейшем он был у МП «под рукой» и не требовалось каждый раз обращаться за ним в память). Например. Выполняется команда jmp 0008 : 00000002h. При этом 00000002h –это смещение в новом кодовом сегменте и эта величина будет загружена (если не нарушены права доступа и другие условия) в регистр eip. Величина 0008h представляет собой селектор, ссылающийся на 1-й дескриптор в GDT (TI = 0, RPL = 0).

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]