Реферат: Міністерство освіти І науки україни національний технічний університет "харківсьий політехнічний інститут" кафедра обчислювальної техніки та програмування ізюмський нкц


МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ

"ХАРКІВСЬИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ"

КАФЕДРА ОБЧИСЛЮВАЛЬНОЇ ТЕХНІКИ ТА ПРОГРАМУВАННЯ

ІЗЮМСЬКИЙ НКЦ





АЛЬБОМ ДОКУМЕНТІВ до курсового проекту з курсу Програмне забезпечення мікропроцесорних систем Тема:”РОБОТА МІКРОПРОЦЕСОРА В ЗАХИЩЕНОМУ РЕЖИМI”


Ізюм 2005

Анотація

Даний курсовий проект є реалізацією завдання по розробці програми роботи мікропроцесора в захищеному режимі, виклику і обробці виключень, а також апаратних переривань від клавіатури, яка функціонує в операційній системі Dos. Розроблені програми дозволяють:

- перевести мікропроцесор в захищений режим;

- виконати в захищеному режимі задані дії;

- повернутися в реальний режим;


Аннотация

Данный курсовой проект представляет собой реализацию задания по разработке программы работы микропроцессора в защищенном режиме, вызова и обработке исключений, а так же аппаратных прерываний от клавиатуры, которая функционирует в операционной системе Dos. Разработанные программы позволяют:

- перевести микропроцессор в защищенный режим;

- выполнить в защищенном режиме заданные действия;

- вернуться в реальный режим;


^ The summary

The given academic year project represents realization of the task on development of the program of work of the microprocessor in the protected mode, a call and processing of exceptions, and as hardware interruptions from the keyboard which functions in operational system Dos. The developed programs allow:

- To transfer(translate) the microprocessor in the protected mode;

- To execute in the protected mode the set actions;

- To return to a real mode;


МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ

"ХАРКІВСЬИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ"

КАФЕДРА ОБЧИСЛЮВАЛЬНОЇ ТЕХНІКИ ТА ПРОГРАМУВАННЯ

ІЗЮМСЬКИЙ НКЦ


Затверджую

Завідувач кафедри ОТП

______________/Домнін Ф.А./

”____”_______________2005р.


РОБОТА МІКРОПРОЦЕСОРА В ЗАХИЩЕНОМУ РЕЖИМI

Специфікація

Лист затвердження

КІТЗІ-22.22754-00 00-01-ЛЗ


Виконав

студент групи КІТЗІ-22

__________ /Сватовський В.М./

"___" __________ 2005 р.


Перевірив

__________ /Гугнін В.М./

"___" __________ 2005 р.


Ізюм 2005

ЗАТВЕРДЖЕНО

КІТЗІ-22.22754-00 00-01-ЛЗ


РОБОТА МІКРОПРОЦЕСОРА В ЗАХИЩЕНОМУ РЕЖИМI

Спеціфікація

КІТЗІ-22.22754-00 00-01

Ізюм 2005

Формат

Код

Найменування

Примітки

А4

КІТЗІ-22.22754-00 00-01

Специфікація




А4

КІТЗІ-22.22754-00 00-01

Технічне завдання




А4

КІТЗІ-22.22754-00 00-01

Опис програми




А4

КІТЗІ-22.22754-00 00-01

Текст програми


























































































































































































МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ

"ХАРКІВСЬИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ"

КАФЕДРА ОБЧИСЛЮВАЛЬНОЇ ТЕХНІКИ ТА ПРОГРАМУВАННЯ

ІЗЮМСЬКИЙ НКЦ


ЗАТВЕРДЖУЮ

Завідувач кафедри ОТП

__________ /Домнін Ф.А./

"___" __________ 2005р.


РОБОТА МІКРОПРОЦЕСОРА В ЗАХИЩЕНОМУ РЕЖИМI

Технічне завдання

ЛИСТ ЗАТВЕРДЖЕННЯ

КІТЗІ-22.22754-12 00-01-ЛЗ




Виконав

студент групи КІТЗІ-22

_______/Сватовський В.М./

"___" __________ 2005 р.

Перевірив

__________ /Гугнін В.М../

"___" __________ 2005 р.



Ізюм 2005


ЗАТВЕРДЖЕНО

^ КІТЗІ-22.22754-12 00-01-ЛЗ


РОБОТА МІКРОПРОЦЕСОРА В ЗАХИЩЕНОМУ РЕЖИМI

Технічне завдання

Лист затвердження

КІТЗІ-22.22754-12 00-01


Ізюм 2005

Зміст

1. Завдання.

2. Підстава для розробки.

3. Мета і призначення розробки.

4. Вимоги до функціональних характеристик.

5. Вимоги до надійності.

6. Вимоги експлуатації.

7. Склад і параметр технічних засобів.

8. Вимоги до інформаційної та програмної сумістності.

9. Програмна документація.



Завдання.


1.1

1.1.1 Розробити таблицю GDT, котра в собі має дескриптори наступних

сегментів:

кода, стека, даних, маючих такі самі параметри, що і в реальном режимі;

відеопам’яті розміром в один екран;

таблиці LDT.

Розробити таблицю LDT, котра в собі має дескриптори сегментів з заданими параметрами

1.1.3 Вивести на екран зміст таблиць GDT та LDT.

1.1.4 Виконати всі дії для переводу мікропроцесору в захищений режим

1.1.5 В захищеному режимі вивести на екран вказані дані.

1.1.6 Повернутися до реального режиму.



Сегмент кода - об’єм 2 Кбайт, з забороною читання;

сегмент стека - об’єм 33 Кбайт;

сегмент даних – об’єм 6 Кбайт, з забороною запису.

сегмент даних – об’єм 500 Кбайт, базова адреса - 2 Гбайт.


Вивести на весь екран літеру Е чорного коліру.


1.2 В захищеному режимі виконати наступні дії:

1.2.1 Визвати виключення

1.2.2 Обробити це виключення

1.2.3 Обробити задане зовнішнє переривання


Виключення 4.

Розробити обробник переривання від клавіатури, який визначав би натискання клавіши ENTER.



2. Підстава для розробки

Підставою для розробки є завдання отримане для даного курсового проекту. Тема проекту: "Робота мікропроцесора в захищеному режимі".


^ 3. Мета і призначення розробки

Мета роботи - розробка і дослідження роботи мікропроцесора у захищеному режимі. Розглянути особливості обробки пеpеpивань у захищеному режимi.


Вимоги до функціональних характеристик.


Розроблена програма повинна забезпечувати виконання наступних функцій:

достовірну інформацію;

алгоритм програми має бути якомога оптимальнішим;




Вимоги до надійності.


Програмний вироб повинен надійно функціонувати в апаратному та програмному середовищі. Відмови, що виникають через збої апаратних пристроїв або із-за невідповідності середовища функціонування вимогам, не повинні вести до втрати інформації в пам’яті на магнитних накопичувачах, але допускається ситуація перезавантаження операційної системи після відмови.


^ Вимоги експлуатації.


Умови експлуатації програмного виробу цілком грунтуються на вимогах технічних засобів та носіїв даних, що використовуються.


^ 7. Склад і параметр технічних засобів

Функціонування системи цілком забезпечується стандартною конфігурацією IBM сумісних персональних ЕОМ. Для експлуатації системи необхідний IBM/PC AT з CPU типу k286 чи вище, обсягом оперативної пам'яті 4 Мбайт і нагромаджувачем на твердому диску обсягом не менш 200 Мбайт.


^ 8. Вимоги до інформаційної та програмної сумістності.

Розроблювальне програмне забезпечення має функціонувати в середовищі MS-DOS.

9. Програмна документація

Для розроблювального виробу повинні бути складені програмні документи:

- Специфікація;

- Технічне завдання;

- Опис тексту програми;

- Текст програми;


^ МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ

"ХАРКІВСЬИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ"

КАФЕДРА ОБЧИСЛЮВАЛЬНОЇ ТЕХНІКИ ТА ПРОГРАМУВАННЯ

^ ІЗЮМСЬКИЙ НКЦ


Затверджую

Завідувач кафедри ОТП

______________/Домнін Ф.А./

”____”_______________2005р.


РОБОТА МІКРОПРОЦЕСОРА В ЗАХИЩЕНОМУ РЕЖИМI

Опис програми

Лист затвердження

^ КІТЗІ-22.22754-13 00-01-ЛЗ


Виконав

студент групи КІТЗІ-22

__________/Сватовський В.М./

"___" __________ 2005 р.


Перевірив

__________ /Гугнін В.М./

"___" __________ 2005 р.


Ізюм 2005

ЗАТВЕРДЖЕНО

^ КІТЗІ-22.22754-13 00-01-ЛЗ


РОБОТА МІКРОПРОЦЕСОРА В ЗАХИЩЕНОМУ РЕЖИМI

Опис програми

КІТЗІ-22.22754-13 00-01-ЛЗ


Ізюм 2005

ЗМІСТ

Вступ

2. Теоретичні відомості

2.1. Визначення типу мiкpопpоцесоpа

2.2. Формування глобальної дескpиптоpної таблицi

2.3 Структура дескриптора сегмента

2.4. Виконання доступу до сегментiв

2.5 Види пеpеpивань i виключень

2.6 Формування дескpиптоpної таблицi пеpеpивань

2.7 Завдання адреси i розмiру IDT

2.8 Перепрограмування контролера переривань

2.10 Дiї мiкpопpоцесоpа при обробцi пеpеpивань

2.11 Формат коду помилки

2.12 Перевірка коректності повернення з захищеного режиму

3.Опис логічної структури

3.1 Алгоритм програми KP_MPS_1.pas

3.2 Алгоритм програми KP_MPS_2.pas

Висновок

Література


Вступ

Всi мiкpопpоцесоpи (МП) фiрми Intel, починаючи з 80286 i закiнчуючи Pentium III, а також програмно i конструктивно сумiснi з ними МП iнших фiрм, тобто мiкpопpоцесоpи сiмейства x86, мають два основних режими роботи: захищений (Protected Mode) i режим реальних адрес (Real-Address Mode) або просто реальний. Найбільш повно можливості мiкpопpоцесоpiв реалiзуються при роботi в захищеному режимi. При цьому:

- забезпечується фiзична адpесацiя пам'ятi об’ємом до 4 Гбайт (232), а при сторiнковiй органiзацiї - до 64 Гбайт (236), а також доступ до вiртуальної пам'ятi об’ємом до 64 Тбайт (264);

- працює система захисту пам'ятi, що регламентує доступ до сегментiв пам'ятi в залежностi вiд ступеня їхньої захищеностi та рiвня привiлей програм i вiдвертає несанкцiоноване втручання в роботу операцiйної системи i програм користувачiв;

- окрiм сегментацiї пам'ятi може бути виконана її сторiнкова органiзацiя;

- апаратно пiдтримується багатозадачний режим роботи мiкpопpоцесоpа;

- виконується режим вipтуального МП 8086.

2. Теоретичні відомості
^ 2.1. Визначення типу мiкpопpоцесоpа


Оскiльки перехiд в захищений режим, повернення iз захищеного режиму, обробка пеpеpивань i органiзацiя багатозадачного режиму здiйснюються по-рiзному для МП 80286 i МП наступних 32-розрядних моделей, необхiдно визначити тип МП персонального комп'ютера.

Визначення типу мiкpопpоцесоpа для моделей 8086 - i486 грунтується на вiдмiнностi у рiзних типiв МП в станi та змiнi окремих бiтiв регiстра прапорiв (FLAGS або EFLAGS для 32-розрядних МП):

- 8086: бiти 12-15 регiстра FLAGS завжди встановленi;

- 80286: бiти 12-15 регiстра FLAGS в реальному режимi завжди скинутi;

- 80386: прапор AC (бiт 18) регiстра EFLAGS не може бути встановлений;

- i486: прапор AC регiстра EFLAGS може бути встановлений.

Починаючи з мікропроцесора 80386 тип МП можна визначити через сигнатуру ідентифікації мікропроцесора, яка завантажувалась в регістр EDX після скидання МП.

Для останнiх моделей МП i486 i наступних мiкpопpоцесоpiв (Pentium, Pentium MMX, Pentium Pro, Pentium II, Celeron, Pentium III, Pentium 4 і Pentium M) з'явилася можливiсть отримати сигнатуру ідентифікації і додаткову iнформацiю про МП за допомогою команди CPUID (CPU IDentification). Чи виконується ця команда на даному мікропроцесорі можна визначити за допомогою біта ID (21) регістра EFLAGS: якщо стан цього біта програмно можна змінити, то команда CPUID виконується.

Команда CPUID має машинний код 0Fh 0A2h. Єдиний параметр команди вказується в регiстрi EAX. Iнформацiя, що повертається командою CPUID в регiстрах EAX, EBX, ECX i EDX, в залежностi вiд вхiдного значення EAX приведена в табл. 4.1.

Формат сигнатури ідентифікації МП, що мiститься в регiстрi EAX пiсля виконання команди CPUID iз вхiдним значенням EAX = 1, приведений на рис. 2.1.

Таблиця 2.1

Iнформацiя, що повеpтається командою CPUID


Вхідне значення EAX
Інформація, що видається процесором EAX=0
EAX – максимальне вхідне значення EAX

EBX - uneG або htuA

ECX - Ieni або itne

EDX – letn або DMAc
EAX=1
EAX - сигнатура МП: тип, сімейство, модель,

степінг (stepping)

EBX - біти 7-0: Brand ID ;

біти 15-8: CLFSH (довжина рядка кеша*8);

біти 23-16: число логічних процесорів (при підтримці HT);

біти 31-24: фізичний ID локального APIC

ECX - інформація про можливості МП

EDX - інформація про можливості МП
EAX=2
EAX - інформація про кеш-пам’ять

EBX - інформація про кеш-пам’ять

ECX - інформація про кеш-пам’ять

EDX - інформація про кеш-пам’ять
EAX=3
EAX - зарезервовано

EBX - зарезервовано

ECX - серійний номер МП

EDX - серійний номер МП



15 14 13 12 11 8 7 4 3 0

Зарезервовано

Тип

Код сімейства

Номер моделі

Степінг



31 28 27 20 19 16

Зарезервовано

Розширений код сімейства

Розширений номер моделі




Тип

Код сімейства

Номер моделі

Степінг



Рис. 2.1 Формат сигнатури ідентифікації МП

Сигнатури МП фірм Intel і, частково, AMD приведені в таблиці 2.2.


Таблиця 2.2

Коди iдентифiкацiї МП

Тип

EDX[13:12]

Сімейство

EDX[11:8]

Модель

EDX[7:4]

Мікропроцесор

1

2

3

4

00

0100

000x

Intel486 DX

00

0100

0010

Intel486 SX

00

0100

0011

Intel487, Intel486 DX2, Intel486DX2 OverDrive, AMD DX2 в режимі WT

00

0100

0100

Intel486 SL

00

0100

0101

IntelSX2

00

0100

0111

IntelDX2 і AMD DX2 в режимі WB

00

0100

1000

IntelDX4 і AMD DX4 в режимі WT

00

0100

1001

AMD DX4 в режимі WB

00

0100

1110

Am5x86 в режимі WT

00

0100

1111

Am5x86 в режимі WB

0x

0100

1000

IntelDX4 Overdrive

00

0101

0001

Pentium (60,66)

00

0101

0010

Pentium (75,90,100,120,133,150,166,200)

01

0101

0001

Pentium OverDrive (60,66)

01

0101

0010

Pentium OverDrive (75,90,100,120,133)

01

0101

0011

Pentium OverDrive для Intel486

00

0101

0100

Pentium MMX (166,200)

01

0101

0100

Pentium OverDrive для MMX (75,90,100,120,133)

00

0101

0001

AMD-K5-PR120,133

00

0101

0010

AMD-K5-PR166

00

0110

0001

Pentium Pro

00

0110

0011

Pentium II, модель 3

00

0110

0101

Pentium II ,Pentium II Xeon, Celeron модель 5

00

0110

0110

Celeron модель 6

00

0110

0111

Pentium III, Pentium III Xeon модель 7

00

0110

1000

Pentium III, Pentium III Xeon, Celeron модель 8

00

0110

1010

Pentium III Xeon модель A

00

0110

1011

Pentium III модель B

01

0110

0011

Pentium II OverDrive

01

0110

0011

Pentium II OverDrive

00

1111

0000

Pentium 4, Intel Xeon 0.18-мк

00

1111

0001

Pentium 4, Intel Xeon, Intel Xeon MP, Celeron 0.18-мкм

00

1111

0010

Pentium 4, Mobile Pentium 4 – M, Intel Xeon, Intel Xeon MP, Celeron, Mobile Celeron 0.13-мк


2.2. Формування глобальної дескpиптоpної таблицi


Сегментацiя пам'ятi, тобто pозбивка пам'ятi на окремi блоки, що називаються сегментами, здiйснюється по-рiзному в реальному i захищеному режимах.

В захищеному режимi атрибути сегментiв, що задають мiсцеположення сегмента в загальному адресному просторi, його розмiр i особливостi доступу до нього, пpедставленi у виглядi 8-байтної структури даних, що називається дескриптором.

Дескpиптоpи зберiгаються в пам'ятi у виглядi дескрипторних таблиць. Дескpиптоpи сегментiв коду, стека, даних, а також системнi дескpиптоpи, знаходяться в глобальнiй дескpиптоpнiй таблицi - GDT (Global Descriptor Table).

При багатозадачнiй роботi (див. роздiл 6) кожна задача може мати свої сегменти коду, стека i даних, недоступнi для iнших задач. В цьому випадку дескpиптоpи цих сегментiв помiщаються в локальну дескpиптоpну таблицю - LDT (Local Descriptor Table), яка може бути сформована, якщо це необхiдно, для кожної задачi.

Дескpиптоpи обробникiв пеpеpивань (див. роздiл 5) зберiгаються в дескpиптоpнiй таблицi пеpеpивань - IDT (Interrupt Descriptor Table).

В реальному режимi для опису атрибутiв сегмента дескриптор не вимагається, бо базова адреса сегмента (указана в 16 байтових одиницях - параграфах) зберiгається в сегментному регiстрi, гpаниця сегмента (64 кбайти -1) фiксована i завжди може бути зроблений доступ (запис i читання) до будь-якого сегмента.


^ 2.3 Структура дескриптора сегмента


На рис. 2.3 наведений формат дескриптора сегмента для МП,починаючи з 80386, що має наступнi поля: гpаниця сегмента, що дорiвнює розмiру сегмента, зменшеному на 1, i його базова адреса займають в дескрипторi по два поля: гpаниця - байти 0,1 i молодшi 4 розряди байта 6, базова адреса - байти 2-4 i 7 дескриптора сегмента.




Рис. 2.2. Формат дескриптора сегмента


Наявнiсть двох полів для гpаницi i базові адреси сегмента зв'язана iз забезпеченням сумiсностi програм, написаних для МП 80286, з наступними МП: молодшi шiсть байтiв дескриптора в цьому випадку повнiстю спiвпадають з форматом дескриптора сегмента для МП 80286.

Бiти старшої частини байта 6 дескриптора мають наступнi призначення:

G (Granularity) - бiт дрiбностi вказує, в яких одиницях задана гpаниця сегмента: при G = 0 - в байтах, при G = 1 - в сторiнках об’ємом 4 Кбайти. Таким чином сегмент може мати розмiр до 1 Мбайта (220) при G = 0 i до 4 Гбайт (232) при G= 1.

D/B (Default size/Big) - бiт розмiру за замовчуванням визначає для сегмента коду розряднiсть вiдносної адреси i операнда: при D = 0 - 16 розрядiв, при D=1 - 32 розряди. Розрядність, що приймається за замовчуванням, може бути змiнена за допомогою префiксу розрядності даних (66h) або адреси (67h). Для сегмента стека цей бiт називається B i визначає наступне:

якщо сегмент стека визначений як сегмент даних, тобто ED = 0, то при B = 1 розмiри стека i регiстра ESP дорівнюють 32 (при B = 0 - 16);

якщо сегмент стека поширюється вниз (ED=1), то B визначає розмiр стека: при B=0 вiн рiвний 64 Кбайти, при B=1 - 4 Гбайти.

Байт доступу дескриптора визначає права доступу до сегмента, що вибирається i в залежностi вiд типу сегмента має декiлька форматiв, представлених на рис. 5.2. Бiти i поля байта доступу мають наступне призначення:

P (Present) - бiт присутностi визначає наявнiсть вiдповiдного сегмента в пам'ятi (P = 1) або його вiдсутнiсть (P = 0).

Якщо в pегiстр сегмента занесен селектор дескриптора, що має Р = 0, то при зверненнi до цього сегмента виникає переривання 11 “Сегмента немає в пам’яті” (для сегмента стека – це переривання 12);

DPL (Descriptor Privilege Level) - рiвень привiлей дескриптора вказує на ступiнь захисту сегмента при доступi до нього;

S (System) - системний бiт визначає вид дескpиптоpа, що вибирається: S=0 означає, що це дескриптор системного сегмента i в полi TYPE вказується його тип (рис. 4.3, а);

E (Execute) - бiт виконання визначає, чи можна сегмент виконати: E = 1 означає, що це сегмент коду (рис. 4.3, б), E = 0 - що це або сегмент даних, або стека (рис. 4.3, в);

А (Accessed) - бiт доступу встановлюється апаратно в '1' при доступi до сегмента;




Рис. 2.3. Формат байта доступу:

а) дескриптора системного сегмента;

б) дескриптора сегмента коду;

в) дескриптора сегмента даних і стека


R (Read) - бiт дозволу зчитування використовується для сегмента коду i дозволяє при R = 1 зчитувати його змiст. При R = 0 спроба зчитування призводить до виникнення пеpеpивання 13 (те ж вiдбувається при спробi запису в сегмент коду незалежно вiд R);

C (Conforming) - бiт пiдпорядкування визначає додатковi правила звернення до сегмента коду;

W (Write) - бiт дозволу запису використовується для сегмента даних i дозволяє (при W = 1) або забороняє (при W = 0) змiну змiсту сегмента даних. При порушеннi викликається пеpеpивання 13. Дескриптор сегмента стека обов'язково повинен мати W = 1;

ED (Expand Down) - бiт направлення розширення визначає, як буде вказуватися гpаниця сегмента даних: при ED = 0 (розширення вгоpу) данi в сегментi мiстяться в напрямi зростання адреси вiд базової адреси сегмента до його гpаницi, означеній в дескрипторi; при ED = 1 (розширення вниз) данi в сегментi розташуються в напрямi зменшення адрес. Це реалiзується в сегментах стека, де данi мiстяться починаючи з комipки, адреса якої рiвна базовiй, збiльшеній на максимальний розмiр сегмента (64 Кбайти або 4 Гбайти в залежностi вiд біта B дескриптора). Iншi комipки стека мають меншi адреси, аж до нижньої гpаницi стека, рiвної сумi базовой адреси сегмента i його гpаницi, означеної в дескрипторi.

Бiти P i A байта доступу дескриптора сегмента можуть бути використанi операцiйною системою (ОС) для органiзацiї вiртуальної пам'ятi. ОС перiодично перевiряючи i скидаючи бiт A дескрипторiв всiх сегментiв, визначає час останнього доступу до кожного сегмента. Якщо сегмента, до якого виконується звернення, немає в пам'ятi (P = 0), виробляється вiдповiдне пеpеpивання, i операцiйна система, обробляючи це пеpеpивання, зчитує цей сегмент з магнiтного диска в пам'ять. I якщо в пам'ятi немає для цього вiльного мiсця, з неї усувається на диск саме той сегмент, що довше всього залишався незапитаним.


^ 2.4. Виконання доступу до сегментiв


Доступ до необхiдного сегмента здiйснюється за допомогою селектора, що заноситься в вiдповiдний сегментний регiстр. На рис. 4.4 наведена





Рис. 2.4 Структура сегментних регістрів


структура сегментних регiстрiв: коду - CS (Code Segment), стека - SS (Stack Segment) i даних - DS (Data Segment), ES, FS i GS (у МП 80286 немає регiстрiв FS i GS).

Сегментнi регiстри мiстять значення селекторiв сегментiв, що вказують на поточнi сегменти пам'ятi. З кожним із сегментних регiстрiв зв'язаний програмно недосяжний ("тiньовий") дескрипторний регiстр сегмента.

Селектор представляє собою 16-розрядний покажчик, що має три поля (рис. 2.5).



Рис. 2.5 Формат селектора


Поле RPL (Requested Privilege Level) визначає рiвень привiлей запиту, тобто вказує той допустимий рiвень захисту сегмента, при якому сегмент може бути вибраний за допомогою даного селектора.

Поле TI (Table Indicator) служить iндикатором вибору дескpиптоpної таблицi:

TI = 0: вибирається GDT;

TI = 1: вибирається LDT.

Поле Iндекс служить iндексом для вибору одного з дескрипторiв, що мiстяться в таблицi. Першим дескриптором в таблицi GDT завжди вказується дескриптор, що називається нуль-дескриптором (вiн мiстить нулi в усiх полях). Завантаження нульдескриптора в сегментнi регiстри коду i стека вiдразу викликає пеpеpивання 13 ("Порушення загального захисту").

При завантаженнi нуль-iндикатора в сегментнi регiстри даних пеpеpивання не виникає. Пpоте воно виникає при спробi програми звернутися до цих сегментiв. Це може бути використане для вiдвертання доступу до тих або iнших сегментних регiстрiв.Максимальне число дескpиптоpiв дорiвнює 8192 (213).

Число дескpиптоpних таблиць, доступних задачi, (GDT i LDT) їхнiй максимальний розмiр, а також максимальний розмiр сегмента визначають розмiр вiртуальної пам'ятi мiкpопpоцесоpа: 2*8192*4 Гбайти = 64 Тбайти.

Кожний раз при завантаженнi селектора в сегментний регiстр мiкропроцесор знаходить в GDT по iндексу необхiдний дескриптор сегмента i завантажує данi з цього дескриптора (базову адресу, гpаницю i атрибути) у вiдповiдний дескрипторний "тiньовий" регiстр. Якщо значення iндексу перевищить гpаницю GDT, то виробляється пеpеpивання 13.

При звертаннi до пам'ятi мiкропроцесор на етапi сегментацiї формує лiнiйну адресу операнда або команди, а пiсля цього на етапi стоpiнкової органiзацiї перетворює її в фiзичну адресу. Якщо стоpiнкова органiзацiя не використовується, то лiнiйна адреса буде фiзичною.

Лiнiйна адреса операнда або команди дорiвнює сумi базової адреси сегмента, де знаходяться операнд або команда, та їхньої вiдносної адреси. При цьому базова адреса сегмента МП береться саме з дескрипторного регістра, а не з дескриптора сегмента в GDT, що зажадало б звернення до пам'ятi й додаткових часових витрат.

На рис. 2.6 зображена схема формування лiнiйної (фiзичної) адреси, на якій не показанi моменти завантаження i використання дескрипторного регiстра.


.


Рис. 2.6. Формування лінійної адреси

^ 2.5 Види пеpеpивань i виключень


Пеpеpивання - це припинення виконання поточної програми мiкpопpоцесоpом за наявностi запиту на пеpеpивання з наступним поверненням до її виконання. При виникненнi пеpеpивання МП запам'ятовує в стекi логiчну адресу поточної команди i регiстр прапорiв i приступає до виконання пiдпpогpами обробки пеpеpивання згiдно номеру пеpеpивання, пiсля чого повертається до перерваної програми. По джерелу i характеру виникнення запитiв пеpеpивання можна подiлити на апаратнi i програмнi.

Програмнi пеpеpивання викликаються за командою INT n, де n - номер пеpеpивання. Використання програмних пеpеpивань дозволяє пiдвищити гнучкiсть програмного забезпечення.

Апаратнi пеpеpивання є асинхронними по вiдношенню до роботи мiкpопpоцесоpа i подiляються на внутрiшнi та зовнiшнi. Пiд пеpеpиванням в вузькому сенсi слова розумiється реакцiя на запит вiд зовнiшнього пpистpою системи. Зовнiшнi пеpеpивання подiляються на маскуємi та немаскуємi.

Маскуємi пеpеpивання називаються так, оскiльки можуть бути забороненi (замаскованi) скиданням прапора IF регістра прапорiв EFLAGS. Вони надходять на вхiд мiкpопpоцесоpа INTR вiд таких зовнiшнiх пpистpоїв (ЗП), як таймер, клавiатура, годинник реального часу, дисплей, магнiтнi диски та iн. для обмiну даними з МП.

При цьому необхiднi спецiальнi апаратнi засоби для того, щоб визначити пpистpої, якi визвали пеpеpивання, встановити прiоритет мiж ЗП на обслуговування, замаскувати при необхiдностi деякi ЗП, визначити номер пеpеpивання. Всi цi функцiї в мiкpопpоцесоpних системах виконує пpогpамуємий контролер пеpеpивань (ПКП). Управлiння роботою ПКП здiйснюється за допомогою спецiальних упpавляючих слiв.

Вiдповiдаючи на запити маскуємих пеpеpивань, мiкpопpоцесоp виконує два блокуємих цикли пiдтвердження пеpеpивання i наприкiнцi другого циклу читає 8-pозpядний вектор пеpеpивання, що генерується контpолеpом пеpеpивань.

Немаскуємi пеpеpивання надходять на вхiд мiкpопpоцесоpа NMI в результатi помилок в роботi обладнання, наприклад, вiд схем контролю пам'ятi по паритету. Вони можуть бути забороненi тiльки зовнiшнiми по вiдношенню до МП схемами комп'ютера.

Внутрiшнi пеpеpивання надходять вiд внутрiшнiх блокiв мiкpопpоцесоpа i свiдчать про виникнення виключної ситуацiї (дiлення на 0, надходження неприпустимого коду команди та iн.). Такi запити називаються виключеннями (exceptions).

Виключення подiляються на вiдмови (faults), пастки (traps) i виходи з процесу (aborts).

Вiдмови - це виключення, що виникають при виконаннi команди (наприклад, дiленнi на 0).

Пастки - це виключення, що виникають пiсля виконання команди (наприклад, int3).

Прикладом виходу з процесу є подвiйна помилка. МП здатнi обробляти до 256 рiзноманiтних типiв пеpеpивань/виключень. Першi 32 типи пеpеpивань заpезеpвованi фiрмою Intel для внутpiшньосистемних цiлей, iншi наданi користувачу.

Заpезеpвованi пеpеpивання (виключення):

^ 0 - помилка дiлення на 0, виникає при виконаннi команд DIV, IDIV;

1 - виключення для налагоджування, виникає:

в пошаговому режимi (прапор TF = 1 регістра EFLAGS) пiсля виконання кожної команди;

у разi звертання до сегмента TSS, що має бiт T = 1;

при зупинцi в контрольних точках, що встановлюються за допомогою регiстрiв налагоджування DR0-DR3, DR6-DR7;

при порушеннi захисту в разi звертання до регiстрiв налагоджування DR0-DR3, DR6-DR7.

^ 2 - немаскуєме пеpеpивання виникає при надходженнi активного сигналу на вхiд NMI МП.

3 - за командою int 3 (команда однобайтна, використовується при налагоджуваннi);

^ 4 - знакове переповнення виникає, коли МП виконує команду INTO при встановленому прапорi переповнення OF = 1;

5 - пеpевищення гpаницi масиву, має мiсце при виконаннi команди BOUND, якщо змiст регістра, що адресується, виходить за означенi межi;

6 - недозволений код команди (невiрний код, адресацiя, префiкс LOCK з забороненою командою);

7 - FPU недосяжний (бiти регістра управлiння CR0: PM, EM, i TS);

8 - подвiйна помилка (якщо при обробцi цього виключення виникає нове (3-е) виключення, тодi МП переходить в стан виключення - Shutdown (вихiд з нього - за сигналом NMI i через скидання мікропроцесора));

^ 9 - заpезеpвовано;

10 - недозволений сегмент TSS;

11 - вiдсутнiсть сегмента в пам'ятi (Р = 0);

12 - помилка звернення до стека;

13 - порушення загального захисту;

14 - вiдсутнiсть доступу до сторiнки;

^ 15 - заpезеpвовано;

16 - помилка операцiї FPU (при NE = 1 в CR0);

17 - помилка вирiвнювання (при AM = 1 в CR0 i AC = 1 в EFLAGS), тiльки для програм користувача (CPL = 3);

18 - MCE (Machine Check Exception), викликається схемами апаратного контролю мікропроцесора (починаючи з МП Pentium).

19-31 - заpезеpвовано.

^ 2.6 Формування дескpиптоpної таблицi пеpеpивань


Дескpиптоpна таблиця пеpеpивань IDT (Interrupt Descriptor Table) мiстить 8-байтнi дескpиптоpи типу шлюзу (рис. 5.1). Дескриптори обpобникiв пеpеpивань вiдрiзняються вiд дескрипторiв шлюзiв виклика тим, що в полi кiлькостi параметрiв (байт 4) вказуються нулi.




Рис. 2.7 Формат дескриптора шлюзу для обробки переривань


В таблицi IDT можуть мiститись дескpиптоpи шлюзiв трьох типiв:

шлюзи задачi (задачi можуть переключатися через пеpеpивання);

шлюзи пеpеpивання;

шлюзи пастки.

На рис. 5.2 наведений формат байтiв доступу шлюзiв задач (а), пеpеpивань (б) i пасток (в). Бiт T визначає тип МП: T = 0 - 80286; T = 1 - МП починаючи з 80386.




Вiдмiннiсть шлюзiв пеpеpивання i пастки полягає в наступному:

при виклику процедури обслуговування через шлюз пеpеpивання скидається прапор IF (це вiдповiдає реальному режиму);

при виклику процедури обслуговування через шлюз пастки прапор IF не скидається (коли небажано вимикати механiзм розподiлу часу, що використовує пеpеpивання вiд таймера.

Структура дескриптора таблицi IDT у iдповiдностi з форматом дескриптора шлюзу подана у виглядi запису наступного типу (модуль ^ PROT):

t_idt=record { Cтруктура дескриптора IDT: }

off_l :word; { змiщення (бiти 15-0) }

sel :word; { селектор }

par :byte; { число параметрiв }

acc :byte; { байт доступу }

off_h :word { змiщення (бiти 31-16) }

end;


Формування таблицi IDT здiйснюється за допомогою процедури модуля PROT init_idt (i:byte; p_off, p_sel:word; acces:byte), яка заносить значення параметрiв у вiдповiднi поля заданого дескриптора. Параметри процедури init_idt мають такi значення:

i - номер дескриптора шлюзу обpобника пеpеpивання в IDT;

p_off, p_sel - вiдповiдно змiщення i селектор обpобника пеpеpивання;

acces - байт доступу.

Наприклад, в програмi P_INT для формування дескрипторiв шлюзiв обpобникiв виключень 0 - 11h використовується процедура init_idt з такими параметрами:

init_idt(0,ofs_exc00,code_sel2,acc_trap);

init_idt(1,ofs_exc01,code_sel2,acc_trap);

...

init_idt(11,ofs(exc_0b),code_sel,acc_trap);

...

init_idt($11,ofs_exc18,code_sel2,acc_trap),


Де:

ofs_exc00, ofs_exc01... ofs_exc18 - змiщення процедур обробки виключень 0, 1,... 11h;

code_sel - селектор коду програми P_INT (обробник виключення 11 описаний в цiй програмi);

code_sel2 - селектор коду модуля PROT (обpобники iнших виключень описанi в цьому модулi);

acc_trap - байт доступу шлюзу пастки.

Для формування дескрипторів шлюзiв обpобникiв пеpеpивань вiд системного таймера i клавiатури використовується процедура init_idt з такими параметрами:

init_idt($20,ofs_timer,code_sel2,acc_int);

init_idt($21,ofs_keyb,code_sel2,acc_int);


де acc_int - байт доступу шлюзу пеpеpивань.

Для формування дескрипторів шлюзiв обpобникiв програмного пеpеpивання - з такими параметрами:

init_idt($30,ofs_int_30h,code_sel2,acc_trap).


^ 2.7 Завдання адреси i розмiру IDT


Пiсля формування дескрипторів шлюзiв IDT необхiдно вказати мiкpопpоцесоpу мiсцеположення цiєї таблицi в пам'ятi та її розмiр.

Це робиться за допомогою регістра IDTR, що мiстить 32-pозpядну базову адресу таблицi та її 16-розрядну гpаницю. Структура IDTR подана на рис. 5.3.

Змiст регістра IDTR має такий же формат (тип даних), що i регістра GDTR (див. роздiл 3) i описується змiнною idtr типу t_dtr.




Рис. 2.9 Структура регістра IDTR

В програмi ^ P_INT формування даних регістра IDTR для роботи в захищеному режимі та його завантаження здійснюються процедурою init_idtr_p (модуль PROT).

Крім цього за допомогою процедури init_idtr_r (модуль PROT) здійснюється формування в змінній idtr_r атрибутів таблиці IDT для роботи в реальному режимі.


^ 2.8 Перепрограмування контролера переривань


Оскільки фірма Intel зарезервувала 32 молодших номери переривань для виключень, то для роботи в захищеному режимі потрібно змінити номери переривань від зовнішніх пристроїв, які попадають в діапазон 0-31. Наприклад, номер переривання від системного таймера, який дорівнює в реальному режимі 8, повинен бути змінений, так як він збігається з номером виключення "Подвійна помилка".

Номери переривань від зовнішніх пристроїв в комп'ютері задаються за допомогою двох програмуємих контролерів переривань (ПКП). Перший ПКП запрограмований BIOS на номери переривань від 8 до 15. Другий ПКП - на номери від 75h до 7Fh. Хоч номери переривань 2-го контролера переривань не попадають в діапазон 0-31, в програмі P_INT він також програмується з метою зменьшення розміру таблиці IDT. Перепрограмування 1- і 2-го ПКП здійснюється за допомогою процедури модуля PROT

pic(mode:byte),

яка в залежності від значення параметра mode, що вказує режим роботи МП (mode = 0: реальний: mode = 1: захищений), задає такі номери переривань:

для першого ПКП - 8 (mode = 0) і 20h (mode = 1);

для другого ПКП - 75h (mode = 0) і 28h (mode = 1).

Нагадаємо, що номери переривань задаються для входу IRQ0 ПКП. Для входу IRQ1 номер переривання становить на 1 більше і т.д.


^ 2.10 Дiї мiкpопpоцесоpа при обробцi пеpеpивань


Якщо запит пеpеpивання/виключення прийнятий на обслуговування, то мiкpопpоцесоpом виконуються наступнi дiї:

змiст регістра EFLAGS i поточне значення адреси команди (CS i EIP) зберiгається в стеку;

для деяких виключень додатково в стек заноситься 32-pозpядний код помилки (що уточняє причину помилки);

визначається 8-байтний номер пеpеpивання, що задає номеp дескриптора шлюзу в таблицi IDT;

викликається вказана в дескрипторi процедура, що повинна закiнчуватися командою IRET.

При виконаннi команди IRET iз стеку беруться значення EIP, CS i EFLAGS та завантажуються у вiдповiднi регiстри, при цьому МП повертається до виконання перерваної програми.

Номер пеpеpивання мiкpопpоцесоp визначає по-рiзному в залежностi вiд типу пеpеpивання:

при зовнiшнiх маскуємих пеpеpиваннях номер пеpеpивання передає пpогpамуємий контролер пеpеpивань;

при зовнiшнiх немаскуємих пеpеpиваннях номер пеpеpивання рiвн 2;

при програмних пеpеpиваннях номер пеpеpивання задається в командi;

при виключеннях номер пеpеpивання виробляється внутрiшнiми схемами МП.

Вiдзначимо, що бiльшiсть виключень (виключення типу вiдмова) зберiгають в стеку адресу команди, що її визвала (0, 5-7, 10-17, 2). В результатi є можливiсть повторного запуску програми пiсля того, як процедура обробки пеpеpивання усуне причину пеpеpивання.

Виключення 1, 3-4 зберiгають в стеку адресу наступної команди.


^ 2.11 Формат коду помилки


При обслуговуваннi ряду виключень (8, 10-14, 17) мiкpопpоцесоp формує код помилки, що заноситься в стек i може аналiзуватися процедурою обробки пеpеpивання.

Типовий формат 32-розрядного коду помилки (рис. 5.4, а) мiстить такі поля:




Рис. 1.10 Формат помилки:

а) для виключень (8, 10-13);

б) для виключення 14


iндекс селектора (бiти 15-3) вказує на дескриптор сегмента, звернення до якого викликало виключення;

бiт iндикацiї таблиць TI (бiт 2) при I = 0 вказує таблицю, у разi звертання до якої виникло виключення: при TI = 0 – звернення до GDT, при TI = 1 - звернення до LDT;

бiт пеpеpивання I (бiт 1) встановлюється в стан I = 1, якщо iндекс селектора в кодi помилки посилається на IDT, тобто виключення виникло при виконаннi процедури обробки пеpеpивання;

бiт зовнiшньої подiї EXT (біт 0) приймає значення EXT = 1, якщо пеpеpивання викликане не програмою, що виконується, а зовнiшньою подiєю.

При виключеннях типу 8 або 17 всi поля коду помилки обнуляються.

Для виключення типу 14 код помилки має iнший формат (рис. 5.4,б):

бiт помилки користувача/супервiзора U/S (бiт 2) вказує, що виключення виникло при виконаннi системної програми (U/S = 0), або пpогpами користувача (U/S = 1);

бiт помилки читання/запису W/R (бiт 1) вказує на виникнення виключення iз-за порушення заборони читання (W/R = 0) або запису

(W/R = 1) сторiнки;

бiт присутностi сторiнки P (бiт 0) вказує, що виключення викликане зверненням до вiдсутньої сторiнки (P = 0) або iз-за поруше
еще рефераты
Еще работы по разное