русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Переключение задачи


Дата добавления: 2015-06-12; просмотров: 674; Нарушение авторских прав


Процессор i486 передает управление другой задаче в одном из следующих четырех случаев:

  1. Текущая задача выполняет команду JMP или CALL для дескриптора TSS.
  2. Текущая задача выполняет команду JMP или CALL для шлюза задачи.
  3. Прерывание или исключение индексирует шлюз задачи в IDT.
  4. Текущая задача выполняет команду IRET при установленном флаге NT.

Команды JMP, CALL и RET, равно как прерывания и исключения, представляют собой обычные механизмы процессора i486, которые могут быть использованы и при обстоятельствах, не приводящих к переключению задачи. Тип дескриптора (при вызове задачи) или флаг NT (при возврате из задачи) определяют разницу между стандартным механизмом и его формой, вызывающей переключение задачи. Для того, чтобы произошло переключение задачи, команда JMP или CALL может передать управление либо дескриптору TSS, либо шлюзу задачи. Эффект в обоих случаях одинаковый: процессор i486 передает управление требуемой задаче. Исключение или прерывание вызывают переключение задачи, индексируя шлюз задачи в IDT. Если они индексируют в IDT шлюз прерывания или шлюз ловушки, то переключения задачи не происходит. Более подробную информацию о механизме прерываний см. в Главе 9.

Сегмент состояния задачи -----------------Локальная Глобальная | |таблица дескрипторов таблица дескрипторов | |----------------- ----------------- | || | | | | | | ||---------------| |---------------| | || | | | | ||---------------| |---------------| | || | | | | | | ||---------------| |---------------| | || | | | | ||---------------| |---------------| | || | |------->| | | | ||- Шлюз задачи -| ->|Дескриптор TSS |---->-----------------|---------------| | |---------------|| | | | | | ||---------------| | |---------------|| | | | ||---------------| | |---------------|| | | | | | ||---------------| | |---------------|| | | | ||---------------| | |---------------|| | | | | | ||---------------| | |---------------|| | | | |----------------- | ----------------- | | | |Таблица дескрипторов |прерываний |----------------- || | | ||---------------| || | ||---------------| || | | ||---------------| || | ||---------------| || | | ||-Шлюз задачи --|-----|---------------|| | ||---------------|| ||---------------|| | ||---------------|| ||---------------|| | ||---------------|| |----------------- Рисунок 7-5. Задачи со ссылками на шлюзы задачи

Подпрограмма обслуживания прерывания всегда возвращает выполнение в прерванную процедуру, которая может находиться в другой задаче. Если флаг NT очищен, происходит нормальный возврат. Если флаг NT установлен, происходит переключение задачи. Задача, принимающая переключение, задается селектором TSS в TSS подпрограммы обслуживания прерывания.



Переключение задачи имеет следующие этапы:

  1. Проверка того, что текущей задаче разрешено выполнить переключение на другую задачу. К командам JMP и CALL применимы правила привилегированности доступа к данным. DPL дескриптора TSS и шлюза задачи должен быть больше чем или равен одновременно CPL и RPL селектора шлюза. исключения, прерывания и команды IRET имеют право переключать задачу независимо от DPL шлюза задачи или дескриптора TSS назначения.
  2. Проверка того, что дескриптор TSS новой задачи помечен как присутствующий и имеет допустимую границу (превышающую или равную 67H). Любые случившиеся до этой точки ошибки принадлежат контексту текущей задачи. При попытке выполнить приводящую к ошибке команду эти ошибки восстанавливают любые изменения состояния процессора. Благодаря этому адрес возврата для обработчика прерываний указывает на команду, вызвавшую ошибку, а не на команду, следующую за ней. Обработчик исключений может зафиксировать условие, вызвавшее ошибку, и выполнить рестарт задачи. Вмешательство обработчика исключений может быть полностью прозрачно для прикладной программы.
  3. Сохранение состояния текущей задачи. Процессор находит базовый адрес текущего TSS в регистре задачи. Регистры процессора копируются в текущий TSS (регистры EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI, ES, CS, SS, DS, FS, GS и EFLAGS).
  4. Загрузка в регистр TR селектора для дескриптора TSS новой задачи, установка бита Занятости новой задачи и установка бита TS в регистре CR0. Селектор либо является операндом команды JMP или CALL, либо берется из шлюза задачи.
  5. Загрузка состояния новой задачи из ее TSS и продолжение ее выполнения. При этом загружаются регистры LDTR, EFLAGS, регистры общего назначения EIP, EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI, а также сегментные регистры Es, CS, SS, DS, FS и GS. Любые ошибки, обнаруживаемые на этом шаге, принадлежат к контексту новой задачи. С точки зрения обработчика исключений первая команда новой задачи не является выполненной.

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

Каждое переключение задачи устанавливает бит TS (Задача Переключена) регистра CR0. Бит TS полезен системным программам для координации работы целочисленного блока и блока операций с плавающей точкой или сопроцессора. Бит TS указывает на то, что содержимое блока операций с плавающей точкой или сопроцессора может отличиться от соответствующего содержимого для текущей задачи. В главе 10 бит TS и сопроцессоры рассматриваются более подробно.

Подпрограммы обслуживания исключений, вызванных переключением задачи (исключения вследствие шагов 5 - 17 в таблице 7-1) могут начать вызываться рекурсивно в случае попытки перезагрузить селектор сегмента, сгенерировавшего данное исключение. Причина исключения (или одна из нескольких причин) до повторения загрузки сегмента должна быть зафиксирована.

Уровень привилегированности, с которым выполнялась старая задача, не имеет отношения к уровню привилегированности новой задачи. Поскольку задачи изолированы друг от друга благодаря отдельным адресным пространствам и сегментам состояния задачи, и поскольку доступ к TSS выполняется по правилам привилегированности, переключение задачи не требует никаких проверок привилегированности. Новая задача начинает выполняться с уровнем привилегированности, указанным в RPL нового содержимого регистра CS, загружаемого из TSS.

Проверки, выполняемые при переключении задачи

Таблица 7-1-----------------------------------------------------------------Шаг Проверяемое условие Особая 1) Ссылка ситуация на код ошибки----------------------------------------------------------------- 1 Дескриптор TSS присутствует NP TSS новой задачи в памяти 2 Дескриптор TSS не Занят GP TSS новой задачи 3 Граница сегмента TSS больше чем TS TSS новой задачи или равна 103----------------------------------------------------------------- 4 Загрузка регистров из значений, хранимых в TSS----------------------------------------------------------------- 5 Допустимость селектора LDT TS TSS новой задачи новой задачи 6 DPL кодового сегмента TS Новый сегмент кода соответствует RPL селектора 2) 7 Допустимость селектора SS GP Новый сегмент стека 8 Сегмент стека присутствует в памяти SF Новый сегмент стека 9 DPL сегмента стека SF Новый сегмент стека соответствует CPL 10 LDT новой задачи присутствует TS TSS новой задачи в памяти 2)11 Допустимость селектора CS TS Новый сегмент кода 12 Сегмент кода присутствует NP Новый сегмент кода в памяти 13 DPL сегмента стека GP Новый сегмент стека соответствует RPL селектора 14 Допустимость селекторов GP Новый сегмент данных DS,ES,FS и GS 2) 15 Сегменты DS,ES,FS и GS доступны GP Новый сегмент данных для чтения 16 Сегменты DS,ES,FS и GS NP Новый сегмент данных присутствуют в памяти 17 DPL сегментов DS,ES,FS и GS GP Новый сегмент данных больше или равен CPL (если эти сегменты не являются конформными)-----------------------------------------------------------------

Примечание: Следующие процессоры Intel могут использовать другой порядок проверок.

  1. NP = исключение "Сегмент не присутствует"; GP= исключение общей защиты; TS= исключение "Неверный TSS"; SF=исключение "Сбой в стеке".
  2. Селектор является допустимым, если он находится в таблице совместимого типа (например, селектор LDT не может находиться ни в одной таблице, кроме GDT), занимает адрес в пределах границы табличного сегмента и ссылается на совместимый тип дескриптора (например, селектор в регистре CS является допустимым только в том случае, если он индексирует дескриптор кодового сегмента; тип дескриптора задается в его поле Типа).


<== предыдущая лекция | следующая лекция ==>
Дескриптор шлюза задачи | Компоновка задач


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.173 сек.