Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Средства вызова подпрограмм и задач






Вызов подпрограмм отличается от вызова задач тем, что адресное пространство остается тем же (LDT прежняя). Во втором случае (при вызове задачи) адресное пространство полностью меняется.

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

Суть непосредственного вызова в том, что в поле команды CALLселектора сегмента непосредственно указывается адрес, содержащий код вызываемой программы. В смещении указывается адрес начала программы.

На рисунке показан только этап получения линейного адреса в виртуальном адресном пространстве. Следующий этап – этап преобразования адреса в номер физической страницы – рассматриваться не будет.

Разрешение вызова происходит в зависимости от значения в поле С. При С = 0 сегмент является неподчиненным и доступ возможен при CPL< =DPL. При С=1 сегмент подчиненный, доступ возможен всегда, но поле CPL замещает DPL при вызове программы.

Данный способ не пригоден для вызова функций ОС, которые имеют уровень прав доступа 0, из пользовательской программы. Есть другой способ, и процессор i386 предлагает именно его.

Суть: заранее определяется набор точек входа в привилегированные кодовые сегменты. Точки входа описываются с помощью специальных дескрипторов. Дескриптор относится к системным, его структура отличается от обычных дескрипторов. Формат шлюза вызова:

С електор 0-15 Смещение 0-15
Смещение 16-31 P DPL S=0 C(386) или 4(286) 0-4 WC Счетчик слов

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

Сегмент состояния задачи: при вызове кодов, обладающими различными уровнями привилегиями, возникает проблема передачи параметров между различными стеками, поскольку задачи разных уровней привилегий разными стековыми сегментами. Селекторы этих сегментов сохраняются в контексте задачи TSS – Task State Segment.

Контекст задачи содержит значение всех регистров процессора, указатели на открытые файлы, переменные, зависящие от ОС, селектор TSS возврата и так далее.

Скорость переключения контекста в значительной степени влияет на скоростные качества многозадачной системы. Процессор i386 осуществляет аппаратное переключение контекста задач, хранящегося в TSS. Формат дескриптора сегмента TSS аналогичен формату дескриптора сегмента данных.

Как и в случае вызова подпрограмм существует две возможности вызова задач: непосредственный вызов и косвенный (через шлюз вызова задач).






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.