Видавництво пітер електронний каталог
Видання: Системне програмне забезпечення: Підручник для вузів
В рамках даного навчального посібника ми, природно, не будемо розглядати все різноманіття сучасних 32-розрядних мікропроцесорів, які використовуються в ПК і інших обчислювальних системах. Тут ми обмежимося розглядом тільки архітектурних, а не технічних характеристик мікропроцесорів. Під позначенням i80x86 будемо розуміти будь-які 32-бітові мікропроцесори, які мають такий же основний набір команд, як і в першому 32-бітове микропроцессоре Intel 80386, і ті ж архітектурні рішення, що і в мікропроцесорах фірми Intel.
Реальний і захищений режими роботи процесора
Нові системні регістри мікропроцесорів i80x86
Основні регістри мікропроцесора i80x86, знання яких необхідно для розуміння захищеного режиму роботи, наведені на рис. 3.2. Слід звернути увагу на наступне:
Підтримка сегментного способу організації віртуальної пам'яті
Мал. 3.3. дескриптор сегмента
Мал. 3.5. Сегмент стану завдання (TSS)
Підтримка сторінкового способу організації віртуальної пам'яті
Мал. 3.7. дескриптор сторінки
Режим віртуальних машин для виконання додатків реального режиму
Механізм шлюзів для передачі управління на сегменти коду з іншими рівнями привілеїв
Оскільки міжсегментні переходи контролюються з використанням рівнів привілеїв і існує потреба в передачі управління з одного рівня привілеїв на інший рівень, в мікропроцесорах i80x86 реалізований механізм шлюзів. який ми пояснимо за допомогою рис. 3.9. Шлюзування дозволяє організувати звернення до так званим підлеглим сегментам коду, які виконують часто зустрічаються функції і повинні бути доступні багатьом завданням, розташованим на тому ж або більш низькому рівні привілеї.
Мал. 3.9. Механізм шлюзів для переходу на інший рівень привілеїв
Мал. 3.10. Перехід на сегмент більш привілейованого коду
Мал. 3.11. Формат дескриптора шлюзу
Введено наступні правила використання шлюзів:
- значення DPL шлюзу виклику повинно бути більше або дорівнює значенню поточного рівня привілеїв CPL;
- значення DPL шлюзу виклику повинно бути більше або дорівнює значенню поля RPL селектора шлюзу;
- значення DPL шлюзу виклику повинно бути більше або дорівнює значенню DPL цільового сегмента коду;
- значення DPL цільового сегмента коду має бути менше або дорівнює значенню поточного рівня привілеїв CPL.
Вимога наявності і доступності шлюзу виклику для переходу на більш привілейований код обмежує менш привілейований код заданим набором точок входу в код з більшою привілеєм. Так як шлюзи виклику є елементами в дескрипторних таблицях (а ми говорили, що їх не тільки можна, а й бажано там розташовувати), то менш привілейована програма не може створити додаткові (а значить, і неконтрольованих) шлюзів. Таким чином, розглянутий механізм шлюзів дає наступні переваги в організації середовища для виконання надійних обчислень:
Викладений коротко апаратний механізм захисту з привілеїв виявляється досить складним і жорстким. Однак оскільки всі практичні ситуації врахувати в схемах мікропроцесора неможливо, то при розробці процедур операційних систем та іншого високо привілейованого коду слід дотримуватися наведених нижче рекомендацій, запозичених з книги [22].
Основний ризик пов'язаний з передачею керування через шлюз виклику більш привілейованої процедурі. Не можна надавати викликає програмі ніяких переваг, що випливають з-за тимчасового підвищення привілеїв. Це зауваження особливо важливо для процедур нульового рівня привілеїв (PL0-процедур).
Зухвала програма може порушити роботу процедури, передаючи їй "погані" параметри. Тому доцільно якомога раніше проконтролювати передаються процедурі параметри. Шлюз виклику сам по собі не перевіряє значень параметрів, які копіюються в новий стек, тому достовірність кожного переданого параметра повинна контролювати викликана процедура. Ось деякі способи контролю переданих параметрів.
Система переривань 32-розрядних мікропроцесорів i80x86
У мікропроцесорах сімейства i80x86 система переривань побудована таким чином, щоб, з одного боку, забезпечити можливість створювати ефективні та надійні мультипрограмному операційні системи, які повинні функціонувати в захищеному режимі, а з іншого боку - забезпечити можливість виконувати програми, розроблені для реального режиму. Розглянемо коротко обидва режими.
Робота системи переривань в реальному режимі роботи процесора
- переривання при розподілі на нуль; номер переривання - 0;
- переривання по прапору TF (trap flag). В цьому випадку переривання зазвичай використовується спеціальними програмами налагодження типу DEBUG. Номер переривання - 1;
- інструкції INT (interrupt - виконати переривання з відповідним номером) і INTO (interrupt if overflow - переривання по переповнення). Ці переривання називаються програмними.
Як операнда команди INT вказується номер переривання, яке потрібно виконати, наприклад INT 10H. Програмні переривання як засіб переходу на відповідну процедуру були введені для того, щоб виконання цієї процедури здійснювалося в привілейованому режимі, а не в звичайному призначеному для користувача.
Зовнішні переривання виникають за сигналом якого-небудь зовнішнього пристрою. Існують два спеціальних зовнішніх сигналу серед вхідних сигналів процесора, за допомогою яких можна перервати виконання поточної програми і тим самим переключити роботу центрального процесора. Це сигнали NMI (no mask interrupt, немаскируемое переривання) і INTR (interrupt request, запит на переривання). Відповідно, зовнішні переривання поділяються на немасковані і маскуються.
Масковані переривання генеруються контролером переривань по заявці певних периферійних пристроїв. Контролер переривань (його позначення - i8259A) підтримує вісім рівнів (ліній) пріоритету; до кожного рівня "прив'язана" одне периферійний пристрій. Масковані переривання часто називають ще апаратними перериваннями. У ПК, починаючи з IBM PC AT, побудованих на базі мікропроцесора i80286, використовуються два контролера переривань i8259A; вони з'єднуються каскадним чином. Схема послідовного з'єднання цих контролерів зображена на рис. 3.12.
Таким чином, на IBM PC AT передбачено 15 ліній IRQ (Interrupt Request), частина яких використовується внутрішніми контролерами системної плати, а решта зайняті стандартними адаптерами або не використовуються. Нижче перераховані лінії запиту на переривання, які ми наводимо тому, що кожен фахівець з обчислювальної техніки повинен знати основні стандарти ПК. Отже, лінії IRQ:
- 0 - системний таймер;
- 1 - контролер клавіатури;
- 2 - сигнал повернення по кадру (EGA / VGA), на AT з'єднаний з IRQ 9;
- 3 - зазвичай COM2 / COM4;
- 4 - зазвичай COM1 / COM3;
- 5 - контролер HDD (на перших комп'ютерах IBM PC XT), звичайно вільний на IBM PC AT і використовується звуковою картою;
- 6 - контролер FDD;
- 7 - LPT1, багатьма LPT-контpоллеpами не використовується;
- 8 - годинник реального часу з автономним живленням (RTC - real time clock);
- 9 - паралельна IRQ 2;
- 10 - не використовується, тобто вільно;
- 11 - вільно;
- 12 - звичайно контролер миші типу PS / 2;
- 13 - математичний співпроцесор;
- 14 - звичайно контролер IDE0 (перший канал);
- 15 - звичайно контролер IDE1 (другий канал).
Мал. 3.12. Каскадування контролерів переривання
Як відомо, переривання можуть бути ініційовані зовнішнім пристроєм ПК або спеціальною командою переривання з програми. У будь-якому випадку, якщо переривання дозволені, то виконується наступна процедура:
Коли системна підпрограма приймає управління, вона може знову дозволити маскіруемие переривання командою STI (set interrupt flag, встановити прапор переривань), яка переводить прапор IF в стан 1, що дозволяє процесору знову реагувати на переривання, що ініціюються зовнішніми пристроями, оскільки стековая організація дозволяє вкладення переривань один в одного.
Закінчивши роботу, підпрограма обробки переривання повинна виконати інструкцію IRET (interrupt return), яка витягує із стека три 16-бітових значення і завантажує їх в покажчик команд IP, регістр сегмента команд CS і регістр PSW відповідно. Таким чином, процесор зможе продовжити роботу з того місця, де він був перерваний.
У разі зовнішніх переривань процедура переходу на підпрограму обробки переривання доповнюється такими кроками:
- Контролер переривань отримує заявку від певного периферійного пристрою і, дотримуючись схему пріоритетів, генерує сигнал INTR (interrupt request), який є вхідним для мікропроцесора.
- Мікропроцесор перевіряє прапор IF в регістрі PSW. Якщо він встановлений в 1, то переходимо до кроку 3. В іншому випадку робота процесора не переривається. Часто кажуть, що переривання замасковані, хоча правильніше говорити, що вони відключені. Маскуються (забороняються) окремі лінії запиту на переривання за допомогою програмування контролера переривань.
- Мікропроцесор генерує сигнал INTA (підтвердження переривання). У відповідь на цей сигнал контролер переривання посилає по шині даних номер переривання. Після цього виконується описана нами раніше процедура передачі управління відповідною програмою обробки переривання.
Номер переривання і його пріоритет встановлюються на етапі ініціалізації системи. Після запуску ОС користувач, як ми вже відзначали, може змінити таблицю векторів переривання, оскільки вона йому доступна.
Робота системи переривань в захищеному режимі роботи процесора
- комутатор переривання (interrupt gate);
- комутатор перехоплення (trap gate);
- комутатор завдання (task gate).
Обробка переривань в контексті поточної завдання
- В стек на рівні привілеїв поточного сегмента коду поміщаються:
- значення SS і SP, якщо рівень привілеїв в комутаторі вище рівня привілеїв раніше виконувався коду;
- регістр прапорів EFLAGS;
- регістри CS і IP.
- Якщо він розглядався переривання відповідав комутатор interrupt gate, то забороняються переривання (прапор IF: = 0 в регістрі EFLAGS). У разі комутатора trap gate прапор переривань не скидається і обробка нових переривань на період обробки поточного переривання тим самим не забороняється.
- Поле селектора з дескриптора переривань використовується для індексування таблиці дескрипторів завдання. Дескриптор сегмента заноситься в тіньовий регістр, а зміщення відносно початку нового сегмента коду визначається полем зміщення з дескриптора переривання.
Мал. 3.13. Схема передачі управління при перериванні в контексті поточної завдання
Обробка переривань з перемиканням на нове завдання
Мал. 3.14. Схема передачі управління при перериванні з перемиканням на нове завдання
При цьому відбувається повне переключення на нову задачу з вкладенням, тобто діє таким чином: