Студопедия

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

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

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






Управление задачами микропроцессорами семейства 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 Z   AC   P   C

 

S (Sign) – признак знака, устанавливается в 1, если результат выполнения команды отрицателен. Единица в старшем разряде соответствует отрицательному числу в дополнительном коде.

Z (Zero) – признак нуля, устанавливается в 1, если результат выполнения операции нулевой.

AC (Auxiliary Carry) – признак вспомогательного переноса, устанавливается в 1, если происходит перенос из младшей тетрады в старшую.

P (Parity) – признак четности, устанавливается в 1, если число единиц в двоичном коде четное.

C (Carry) – признак переноса, устанавливается в 1, если в результате выполнения операции с двумя 8-разрядными двоичными числами результат не помещается в разрядной сетке.

Влияние выполнения машинных команд на состояние регистра флагов отображено в таблице П2.

 

Таблица П2

Влияние выполнения машинных команд на состояние

регистра флагов КР580

Команда Регистр флагов Команда Регистр флагов
S Z AC P C S Z AC P C
ACI D8 + + + + + MVI R, D8 - - - - -
ADC D8 + + + + + NOP - - - - -
ADD R + + + + + ORA R + +   +  
ADI R + + + + + ORI D8 + +   +  
ANA R + + U + + OUT N - - - - -
ANI D8 + + U + + PCHL - - - - -
C_CON A16* - - - - - POP PSW + + + + +
CALL A16 - - - - - PUSH PSW - - - - -
CMA - - - - - PUSH YZ* - - - - -
CMC - - - - + R_CON - - - - -
CMP R + + + + + RAL - - - - +
CPI D8 + + + + + RAR - - - - +
DAA + + + + + RET - - - - -
DAD YZ - - - - + RLC - - - - +
DCR R + + + + - RRC - - - - +
DCX YZ - - - - - RST NUM - - - - -
DI - - - - - SBB R + + + + +
EI - - - - - SBI D8 + + + + +
HLT - - - - - SHLD A16 + + + + +
IN N - - - - - SPHL - - - - -
INR R + + + + + STA A16 - - - - -
INX YZ - - - - - STAX R - - - - -
J_CON A16 - - - - - STC - - - -  
JMP A16 - - - - - SUB R + + + + +
LDA A16 - - - - - SUI D8 + + + + +
LDAX R - - - - - XCHG - - - - -
LHLD A16 - - - - - XRA R + +   +  
LXI YZ, D16 - - - - - XRI D8 + +   +  
MOV R, RI - - - - - XTHL - - - - -

 

 

В таблице П2 знак «+» означает, что выполнение данной команды оказывает влияние на состояние соответствующего флага, знак «-» – состояние флага остается неизменным, «1» – данный флаг устанавливается в единицу, «0» – данный флаг сбрасывается в «0», «U» – состояние данного флага не определено. Мнемоники машинных команд (их условное обозначение) и описание выполняемых ими действий приведены в таблице П3.

 

Таблица П3






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