48214 (Програма модифікуюча команди, які використовуються в захищеному режимі), страница 2

2016-07-30СтудИзба

Описание файла

Документ из архива "Програма модифікуюча команди, які використовуються в захищеному режимі", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "48214"

Текст 2 страницы из документа "48214"

Старший біт (біт 31) кожного регістра показує, чи містить даний регістр достовірну інформацію (біт дорівнює 0) чи є зарезервованим (біт дорівнює 1). Якщо регістр містить достовірну інформацію, то вона представляється у виді однобайтних дескрипторів.

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

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

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

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

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

У реальному режимі для опису атрибутів сегмента дескриптор

не потрібно, тому що базова адреса сегмента (зменшений у 16 разів) зберігається в сегментному регістрі, границя сегмента (64 Кб - 1) фіксована і завжди може бути зроблений доступ (запис і читання)

до сегмента.

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

Формат дескриптора сегмента для МП починаючи з 80386, що має наступні полючи :

Границя сегмента, рівна розміру сегмента, зменшеному на 1, і його базову адресу займають у дескрипторі по двох полючи : границя - байти 0,1 і молодші 4 розряди байта 6, базовий адреса – байти 2-4 і 7 дескриптора сегмента.

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

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

G (Granularity) - біт дрібності вказує, у яких одиницях задана границя сегмента: при G=0 - у байтах, при G=1 - у сторінках обсягом по 4 Кбайт. Таким чином, сегмент може мати розмір до 1 Мбайт (2^20) при G=0 і до 4 Гбайт (2^32) при G=1. Коли границя задана в 4 Кб одиницях, те молодші 12 розрядів зсуву не беруть участь у порівнянні при перевірці виходу зсуву за зазначену границю сегмента.

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

Для сегмента стека цей біт називається B і визначає наступне:

• якщо сегмент стека визначена як сегмент даних, тобто ED=0, то при B=1 розміри слова стека і регістра ESP рівні 32 розрядам;

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

Біт X може бути використаний чи системою користувачем за своїм розсудом (цей біт мікропроцесором не обробляється).

Байт доступу дескриптора визначає права доступу до обираного сегмента і, у залежності від типу сегмента, має кілька форматів.

Біти і полючи байта доступу мають наступне призначення:

P(Present) - біт присутності визначає наявність відповідного

сегмента (P=1) чи його відсутність (P=0) у пам'яті. Якщо в регістр сегмента занесений селектор дескриптора, що має Р=0, то при зверненні до цього сегмента виникає переривання 11;

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

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

E (Execute) - біт “выполняемости” визначає, чи можна сегмент виконати: E=1 означає, що це сегмент коду, E=0 означає, що це чи сегмент даних, чи стека;

А (Accessed) - біт доступу встановлюється апаратно при доступі до сегмента, т.ч. при завантаженні відповідного селектора в сегментний регістр;

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

C (Conforming) - біт підпорядкування визначає додаткові правила звертання із сегментом коду (див. роздягнув 12 “ Захист пам'яті”;

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

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

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

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

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

Сегментні регістри містять значення селекторів сегментів, що

указують на поточні адресуємі сегменти пам'яті. З кожним із сегментних регістрів зв'язаний недоступний програмно (“тіньовий”) дескрипторний регістр сегмента.

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

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

- поле TI (Table Indicator) служить індикатором вибору дескриптор уторованої таблиці: TI = 0: вибирається GDT; TI = 1: вибирається LDT.

- поле ІНДЕКС служить номером для вибору одного з дескрипторів, що містяться в таблиці. Першим дескриптором у таблиці завжди указується дескриптор, називаний нуль-дескриптор (він містить нулі у всіх полях). Завантаження нуль-дескриптора в сегментні регістри коду і стека відразу викликає переривання 13 (“Порушення загальної захисту”). При завантаженні нуль-дескриптора в сегментні регістри даних це переривання не виникає. Однак воно виробляється при спробі програми звернутися до цих сегментів. Це може бути використане для запобігання доступу до тих чи іншим сегментної регістрам.

Максимальне число дескрипторів таблиці визначається форматом селектора і дорівнює 8192 .

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

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

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

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

    1. Формування дескрипторів сегментів.

Структура дескриптора таблиці GDT відповідно до формату дескриптора сегмента. Для сегмента коду байт доступу буде дорівнює:

acc_code:=present OR nosys OR exe OR read, тобто він знаходитися в пам'яті (P=1), не є системним (S=1), його можна виконувати (E=1) і його можна читати (R=1).

Формування дескрипторів таблиці GDT здійснюється за допомогою

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

i - номер дескриптора сегмента в GDT;

limit - границя сегмента;

base - базова адреса сегмента;

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

d, g - біти D і G байта 6 дескриптора сегмента.

    1. Завдання адреси і розміру GDT.

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

Це робиться за допомогою регістра GDTR, що містить 32-розрядний базова адреса таблиці і її 16-розрядну границю.

Для формування даних регістра GDTR і його завантаження використовується базова адреса і розмір перемінної gdt і за допомогою команди LGDT завантажує ці значення в регістр GDTR.

    1. Підготовка до скидання мікропроцесора.

Для МП 80286 повернення в реальний режим із захищеного здійснюється тільки шляхом скидання мікропроцесора, ініційованого командою контролера клавіатури.

Для МП наступних моделей можливі два варіанти повернення в реальний режим: за допомогою команди MOV чи також через скидання МП. У випадку повернення через скидання мікропроцесора необхідно в реальному режимі підготувати структури даних для здійснення повернення в задану крапку програми після скидання МП.

Після виконання скидання процесор переходить у реальний режим і керування передається BIOS. BIOS аналізує вміст осередку CMOS-пам'яті з адресою 0Fh - байта стану відключення. Подальші дії визначаються вмістом цього осередку.

Значення байта стану відключення

Таблиця 3.

Значення

Причина відключення

0

1

2

3

4

5

6,7,8

9

0Ah

Програмне скидання при натисканні комбінації клавіш

CTRL-ALT-DEL чи несподіване скидання. Виконується звичайний перезапуск системи, але процедури тестування, що працюють при включенні харчування, не виконуються.

Скидання після визначення обсягу пам'яті.

Скидання після тестування пам'яті.

Скидання після виявлення помилки в пам'яті (контроль

парності).

Скидання з запитом перезавантаження.

Після скидання перезавантажується контролер переривань,

потім керування передається за адресою, що знаходиться в області даних BIOS 0040h:0067h.

Скидання після виконання тесту роботи процесора в

захищеному режимі.

Скидання після виконання пересилання блоку пам'яті з

основної пам'яті в розширену.

Після скидання керування негайно передається по

адресі в 0040h:0067h області даних BIOS.

Якщо в захищеному режимі не використовуються переривання і, відповідно, не перепрограмується контролер переривань, є зміст застосувати значення 0Ah. При цьому послу скидання МП керування буде відразу передано за адресою, узятому з області даних BIOS 0040h:0067h. У цьому випадку час, витрачений на повернення в реальний режим, буде менше.

Для запису байта даних в осередок CMOS-пам'яті необхідно спочатку в порт з адресою 70h записати номер потрібного осередку, а потім у порт 71h - занести дані.

    1. Заборона маскуємих і немаскуємих переривань.

Перед переходом у захищений режим необхідно заборонити всі зовнішні апаратні як маскуємі, так і немаскуємі. Обробка маскуємих переривань мікропроцесором не виконується, якщо скинутий прапор IF регістра FLAFS/EFLAFS. Скидання прапора IF виконує команда CLI. Для заборони немаскуємих переривань необхідно в порт 70h занести байт даних, що містить у старшому розряді одиницю.

    1. Збереження в пам'яті регістрів мікропроцесора.

Оскільки при скиданні МП значення його регістрів губляться, те необхідно попередньо здійснити запис значень сегментних регістрів і регістра покажчика стека в пам'ять.

    1. Переклад мікропроцесора в захищений режим.

Для того щоб перевести МП у захищений режим, необхідно установити 0-й біт регістра керування CR0 (Control Register) в одиницю.

Регістр CR0 включає 10 розрядів для керування роботою мікропроцесора і визначення його стану (біти CD, NW, AM, WP і NE з'явилися в МП починаючи з i486):

PE (Protection Enable) - біт дозволу захисту встановлюється в “1” для переключення МП у захищений режим. Якщо РЕ скинутий - МП працює в реальному режимі; МР (Monitor coProcessor) - біт керування співпроцесором - блоком FPU (Floating Point Unit) використовується разом з битому TS для генерації переривання 7 (“FPU недоступний”) при обробці команди WAIT : якщо MP=1 і TS=1, то команда WAIT викликає переривання;

EM (Emulation) - біт емуляції співпроцесора: коли він установлений викликається переривання 7 при виконанні команд FPU чи переривання 6 при виконанні команд MMX (для МП, що виконує набір команд MMX). Значення EM не впливає на команду WAIT;

TS (Task Swiched) - біт переключення задач: біт TS установлюється при переключенні задач. Якщо TS=1 і виконується команда FPU чи MMX (якщо MP=1, то і команда WAIT), те викликається переривання 7;

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Нет! Мы не выполняем работы на заказ, однако Вы можете попросить что-то выложить в наших социальных сетях.
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
4144
Авторов
на СтудИзбе
666
Средний доход
с одного платного файла
Обучение Подробнее