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

Назначение входов/выходов вм86 в максимальном режиме.

В максимальном режиме МП не вырабатывает сигналы WR, M/IO, DT/R, DEN, INTA и ALE. Вместо них МП вырабатывает соответственно сигналы LOCK, ST2, ST1, ST0, QS1 и QS0. Кроме того вход HOLD и выход HLDA становятся двунаправленными линиями, соответственно, RQ/GT0 и RQ/GT1.

LOCK – выход блокировки. Активный сигнал на этом выходе вырабатывается, если МП вы-полняет команду, перед которой программист поставил префикс lock. Этот префикс означает, что программист не хочет, что бы какое-либо событие прерывало выполнение данной команды. К тако-вым событиям относится, например, отключение МП от системной шины при прямом доступе к па-мяти или при захвате системной шины микропроцессором с более высоким приоритетом. В послед-нем случае сигнал с выхода LOCK должен быть заведен на внешние схемы арбитража, которые и обеспечивают удержание шины до конца блокированной команды. В минимальном режиме префикс lock блокирует восприятие запроса на входе HOLD.

S2, S1, S0 – сигналы состояния. Как уже говорилось выше, в максимальном режиме МП не вы-рабатывает ряд управляющих сигналов. В то же время эти сигналы необходимы системе для правильного функционирования. Поэтому в максимальном режиме в систему всегда вводится специальная микросхема системного контроллера К1810ВГ88 (i8288), которая и формирует недостающие сигналы. Сигналы на выходах S2-S0 характеризуют цикл шины, который в данный момент выполняет МП (смотри таблицу 2). Эти сигналы подаются на системный контроллер, и именно на основании этих сигналов последний формирует необходимые на данный момент системные управляющие сигналы.

RQ/GT0 и RQ/GT1 (request/grant-запрос/предоставление шины) – двунаправленные линии. Каждая из этих линий заменяет собой пару линий (HOLD, HLDA) минимального режима. Обычно используются при стандартном подключении арифметического сопроцессора и при организации пря-мого доступа к памяти. Если устройству, подключенному к линии RQ/GT, требуется системная шина, оно выставляет сигнал на эту линию, Получив этот сигнал МП прекращает выполнение текущей ко-манды (если перед ней не стоит префикс lock), отключается от шин и подтверждает захват, выставляя сигнал на ту же линию RQ/GT. Когда устройство освобождает системную шину оно формирует еще один сигнал на этой же линии, подключая тем самым МП к системной шине. Отличие RQ/GT0 от RQ/GT1 заключается в том, что последняя линия имеет более низкий приоритет. То есть при одно-временном приходе запросов на обеих линиях, будет обслужен запрос на линии RQ/GT0.

QS1, QS2 (queue state) – сигналы на этих линиях характеризуют состояние очереди команд МП. Эти две линии используются при стандартном подключении арифметического сопроцессора ВМ87, который анализирует состояние очереди, отслеживая момент начала выполнения «своей» ко-манды.

Общие сведения о механизмах адресации в защищенном режиме.

Защищенный режим. В этом режиме раскрываются все возможности МП. В этом режиме используются все 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.2.

15 3

2

1 0

селектор

TI

RPL

Здесь старшие 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). В данной лабораторной работе шлюзы не рассматриваются.

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