Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Управление задачами микропроцессорами семейства x86 в защищенном режиме
8.1. Цель работы Ознакомление с механизмом многозадачности микропроцессора, функционирующего в защищенном режиме.
8.2. Теоретические сведения Для многозадачных и многопользовательских операционных систем важна способность процессора к быстрому переключению выполняемых задач. Операция переключения задачи (Task Switch Operation) сохраняет состояние процессора и связь с предыдущей задачей, загружает состояние новой задачи и начинает ее выполнение. Задача – это элемент работы, которую процессор может исполнять, запустить или отложить. Задачи используются для выполнения программ, процессов, обработчиков прерываний и исключений, ядра операционной системы и передачи управления из одной задачи в другую. Любая программа, выполняющаяся в защищенном режиме должна осуществляться как задача. Задача состоит из сегмента состояния задачи – TSS (Task Status Segment), сегмента кода, одного или нескольких (для разных уровней привилегий) сегментов стека и одного или нескольких сегментов данных. Она определяется селектором своего сегмента TSS. Когда задача выполняется, ее селектор TSS (вместе с дескриптором в скрытой части) загружен в регистр TR процессора. Запуск задачи осуществляется при помощи команды call или jmp на сегмент TSS или на шлюз задачи, а также при получении управления обработчиком прерывания или исключения, который описан как шлюз задачи. При этом автоматически осуществляется переключение задач. Состояние текущей задачи описывается в ее TSS, состояние вызываемой задачи считывается из ее TSS, и управление передается на новые cs: eip. Если задача не была запущена командой jmp, селектор сегмента TSS старой задачи сохраняется в TSS новой и устанавливается флаг nt, так что следующая команда iret выполнит обратное переключение задач. Задачи не могут вызываться рекурсивно. В дескрипторе TSS-задачи, которая была запущена, но не была завершена, тип изменяется на «занятый TSS» и переход на такой TSS невозможен. Задача может иметь собственную таблицу дескрипторов (LDT) и полный комплект собственных таблиц страниц, так как регистры LDTR и CR3 входят в состояние задачи. Сегмент состояния задачи (TSS) - это структура данных, в которой сохраняется вся информация о задаче, если ее выполнение временно прерывается. TSS имеет следующую структуру: +00h: 4 байта - селектор предыдущей задачи (старшее слово содержит нули - здесь и для всех остальных селекторов) +04h: 4 байта - ESP для CPL = 0 +08h: 4 байта - SS для CPL = 0 +0Ch: 4 байта - ESP для CPL = 1 +10h: 4 байта - SS для CPL = 1 +14h: 4 байта - ESP для CPL = 2 +18h: 4 байта - SS для CPL = 2 +lCh: 4 байта - CR3 +20h: 4 байта – EIP +24h: 4 байта – EFLAGS +28h: 4 байта – EAX +2Ch 4 байта – ECX +30h: 4 байта – EDX +34h: 4 байта – EBX +38h: 4 байта – ESP +3Ch: 4 байта – EBP +40h: 4 байта – ESI +44h: 4 байта – EDI +48h: 4 байта – ES +4Ch: 4 байта – CS +50h: 4 байта – SS +54h: 4 байта - DS +58h: 4 байта – FS +5Ch: 4 байта – GS +60h: 4 байта – LDTR +64h: 2 байта - слово флагов задачи бит 0 - флаг T: вызывает #DB при переключении на задачу остальные биты не определены и равны нулю +66h: 2 байта - адрес битой карты ввода-вывода. Это 16-битное смещение от начала TSS, по которому начинается битовая карта разрешения ввода-вывода и заканчивается битовая карта перенаправления прерываний главу данной задачи. TSS является полноценным сегментом и описывается сегментным дескриптором. Кроме того, лимит TSS не может быть меньше 67h - обращение к такому дескриптору приводит к исключению #TS. Размер TSS может быть больше, если в него входят битовые карты ввода-вывода и перенаправления прерываний и если операционная система хранит в нем дополнительную информацию. Дескриптор TSS способен находиться только в GDT - попытка загрузить его из LDT вызывает исключение #GP. Для передачи управления задачам удобнее использовать дескрипторы шлюза задачи, которые можно помещать как в GDT, так и в LDT или IDT. Переключение задач осуществляется, если: 1) текущая задача выполняет дальний jmp или call на шлюз задачи или прямо на TSS; 2) текущая задача выполняет iret, если флаг nt равен 1; 3) происходит прерывание или исключение, в качестве обработчика которого в IDT записан шлюз задачи. При переключении процессор выполняет следующие действия: 1) Для команд call и jmp проверяет привилегии (CPL текущей задачи и RPL селектора новой задачи не могут быть больше, чем DPL шлюза или TSS, на который передается управление). 2) Проверяется дескриптор TSS (его бит присутствия и лимит). 3) Проверяется, что новый TSS, старый TSS и все дескрипторы сегментов находятся в страницах, отмеченных как присутствующие. 4) Сохраняется состояние задачи. 5) Загружается регистр TR. Если на следующих шагах происходит исключение, его обработчику придется доделывать переключение задач, вместо того чтобы повторять ошибочную команду. 6) Тип новой задачи в дескрипторе изменяется на занятый и устанавливается флаг TS в CR0. 7) Загружается состояние задачи из нового TSS: LDTR, CR3, EFLAGS, EIP, регистры общего назначения и сегментные регистры. Если переключение задачи вызывается командами jmp, call или прерыванием, либо исключением, селектор TSS предыдущей задачи записывается в поле связи новой задачи и устанавливается флаг nt. Если флаг nt установлен, команда iret выполняет обратное переключение задач. При любом запуске задачи ее тип изменяется в дескрипторе на занятый. Попытка вызвать такую задачу приводит к #GP, сделать задачу снова свободной можно, только завершив ее командой iret или переключившись на другую задачу командой jmp. Более подробную информацию о переключении задач в защищенном режиме работы микропроцессора можно найти в [4, 5]. 8.3. Программа работы Написать программу, которая бы в защищенном режиме работы микропроцессора выполняла бы одновременно две задачи в зависимости от номера варианта: 1. 1 и 2 2. 1 и 3 3. 1 и 12 4. 2 и 12 5. 1 и 13 6. 2 и 13 7. 12 и 13 8. 1 и 10 9. 2 и 10 10. 1 и 11 11. 2 и 11 12. 10 и 11 13. 10 и 12 14. 1 и 12 15. 7 и 13
1.Вывести на экран последовательностью квадратов натуральных чисел. Заполнение прекратить, когда числа выйдут за пределы 8-разрядной сетки. 2. Вывести на экран последовательность чисел Фибоначчи 1, 1, 2, 3, 5, 8, 13, 21…. Заполнение прекратить, когда числа выйдут за пределы 8-разрядной сетки. 3. Вывести последовательность чисел 0, 1, 2, …, 255 на экран. 4. Дан массив A из 10 однобайтовых чисел. Вывести на экран со сдвигом на один разряд влево только числа, содержащие четное количество единиц. 5. Дан массив A из 10 однобайтовых чисел. Вывести на экран со сдвигом на один разряд вправо только числа, содержащие нечетное количество единиц. 6. Дан массив A из 10 однобайтных чисел. Вывести из массива А на экран все числа, большие 05h и меньшие 20h. 7. Вывести на экран последовательность степеней числа 2. Вывод прекратить, когда числа выйдут за пределы 16-разрядной сетки. 8. Дан массив A из 10 однобайтовых чисел. Проверить есть ли в нем число 10h, если оно есть, выполнить сложение всех чисел массива А и вывести сумму на экран. 9. Дан массив A из 10 однобайтовых чисел. Вывести на экран все числа большие 20h и подсчитать сумму таких чисел и также вывести ее на экран. 10. Вывести на экран последовательность степеней числа 3. Вывод прекратить, когда числа выйдут за пределы 8-разрядной сетки. 11. Вывести последовательность факториалов натуральных чисел. Заполнение прекратить, когда числа выйдут за пределы 8-разрядной сетки. 12. Вывести на экран последовательность a, b, c, d, e, f. 13. Вывести на экран последовательность 1, 2, 3, 4, 5, 6, 7.
Вопросы к защите Формат дескриптора системного объекта (TSS и LDT). Формат 16-разрядного сегмента TSS. Формат 32-разрядного сегмента TSS. Форматы шлюза задачи. Способы переключения задач. Проверка уровней привилегий при переключении задач.
ПРИЛОЖЕНИЕ
ОПИСАНИЕ СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРА КР580
При описании системы команд используются следующие сокращения: o () – означают содержимое регистра или ячейки памяти; o [] – содержимое регистровой пары или двух смежных ячеек памяти, используемых для указания адреса размещения операнда; o R, RI – регистры A, B, C, D, E, H, L, M (виртуальный регистр); o YZ – регистровые пары BC, DE, HL или указатель стека SP; o YZ* – регистровые пары BC, DE, HL; o M – ячейка памяти, адрес которой хранится в регистровой паре HL; o F (Flags register) – регистр флагов; o PC (program counter) – регистр счетчика команд; o SP (stack pointer) – регистр указателя стека; o PSW (program state word) – слово состояния программы (содержимое регистров A и F). o N – номер порта ввода-вывода; o D16 – двухбайтовый операнд данных; o D8 – однобайтовый операнд данных; o A16 – двухбайтовый операнд адреса. Для фиксирования определенных ситуаций, возникающих в процессе выполнения машинных команд, применяется содержимое регистра флагов F. Формат регистра флагов для процессора КР580ВМ80А приведен в таблице П1. Таблица П1 Формат регистра флагов F
S (Sign) – признак знака, устанавливается в 1, если результат выполнения команды отрицателен. Единица в старшем разряде соответствует отрицательному числу в дополнительном коде. Z (Zero) – признак нуля, устанавливается в 1, если результат выполнения операции нулевой. AC (Auxiliary Carry) – признак вспомогательного переноса, устанавливается в 1, если происходит перенос из младшей тетрады в старшую. P (Parity) – признак четности, устанавливается в 1, если число единиц в двоичном коде четное. C (Carry) – признак переноса, устанавливается в 1, если в результате выполнения операции с двумя 8-разрядными двоичными числами результат не помещается в разрядной сетке. Влияние выполнения машинных команд на состояние регистра флагов отображено в таблице П2.
Таблица П2 Влияние выполнения машинных команд на состояние регистра флагов КР580
В таблице П2 знак «+» означает, что выполнение данной команды оказывает влияние на состояние соответствующего флага, знак «-» – состояние флага остается неизменным, «1» – данный флаг устанавливается в единицу, «0» – данный флаг сбрасывается в «0», «U» – состояние данного флага не определено. Мнемоники машинных команд (их условное обозначение) и описание выполняемых ими действий приведены в таблице П3.
Таблица П3
|