Захищений режим вперше з'явився в процесорі 80286, але мав не всі можливості, доступні в 32-розрядних процесорах.
Основним ресурсом, що захищається, є пам'ять, у якій зберігаються коди, дані і різні системні таблиці (наприклад, таблиця переривань). Захист пам'яті заснований на сегментації.
Основною моделлю пам'яті, використовуваної в захищеному режимі, є сегментована захищена модель. При використанні цієї моделі кожній програмі в будь-який момент часу надаються кодовий сегмент, сегмент стека і до чотирьох сегментів даних. Сегменти спеціальним образом вибираються з таблиць, підготовлених операційною системою. У захищеному режимі процесор дозволяє адресувати до 4 ГБайт фізичної пам'яті (у процесорах шостого покоління - до 64 ГБайт), граничний розмір кожного сегмента також складає 4 Гбайт.
Як у реальному, так і в захищеному режимі сегменти пам'яті виділяються задачам операційною системою, але в реальному режимі будь-яка задача може перевизначити значення сегментних регістрів, що задають положення сегмента в пам'яті, і "залізти" у чужу область даних або коду. У захищеному режимі прикладна програма зможе використовувати тільки дозволені для неї сегменти пам'яті.
Крім сегментації, у захищеному режимі можлива розбивка логічної пам'яті на сторінки розміром 4 КБайт, кожна з яких може відображатися на будь-яку область фізичної пам'яті. Починаючи з п'ятого покоління з'явилася можливість збільшення розміру сторінки до 4 МБайт.
Сегментація пам'яті і розбивка її на сторінки можуть застосовуватися в будь-яких сполученнях і використовуються з різними цілями. Сегментація є засобом організації логічної пам'яті на прикладному рівні, а розбивка на сторінки застосовується на системному рівні для керування фізичною пам'яттю.Сегменти і сторінки можуть вивантажуватися з фізичної оперативної пам'яті на диск і в міру необхідності довантажуватися ("підкачуватися") з його назад у фізичну пам'ять. Цей процес називається підкачуванням або свопінгом. У такий спосіб реалізується так називана віртуальна пам'ять.
Віртуальна пам'ять складається з фізичної пам'яті (ОЗП) комп'ютера і файлу підкачування, створюваного операційною системою на жорсткому диску. Теоретично віртуальна пам'ять може досягати обсягу в 64 Тбайт, практично ж її розмір обмежений розміром вільного простору на том розділі жорсткого диска, на якому розташований файл підкачування (якщо на розмір файлу підкачування не накладене спеціальних обмежень).
Звичайно розмір файлу підкачування визначається операційною системою і змінюється динамічно в залежності від потреб виконуваних додатків. Однак є можливість вручну встановити його розміри, а також зовсім відмовитися від його використання (чого робити не рекомендується).
Механізми сегментації і сторінкової трансляції адрес підтримує вбудований блок керування пам'яттю. Тобто, через 4 ГБайт адресованої фізичної пам'яті при використанні сторінкової адресації можуть відображатися до 64 ТБайт віртуальної пам'яті для кожної задачі.
Формування адреси пам’яті МП архітектури IA-32 у захищеному режимі. Захист пам’яті і система привілеїв.
Стосовно до пам'яті розрізняють три адресних простори: логічний, лінійний і фізичний. У захищеному режимі працюють усі механізми перетворення адресних просторів. Формування адреси пам'яті 32-розрядних процесорів у захищеному режимі пояснюється рис.4.
Логічна адреса, також названа віртуальною, складається із селектора сегмента (у реальному режимі - просто адреси сегмента) і ефективної адреси, названої також зсувом.
Оскільки кожна задача може мати до 16 Кбайт селекторів (214), а зсув, обмежений розміром сегмента, може досягати 4 Гбайт, логічне адресний простір для кожної задачі може досягати 64 Тбайт. Весь цій простір, у принципі, доступний програмістові (за умови підтримки збоку операційної системи).
Селектор сегмента зберігається в старших 14 бітах сегментного регістра (CS, DS, ES, SS, FS, або GS), що беруть участь в адресації конкретного елемента пам'яті. За значенням селектора зі спеціальних таблиць дескрипторів сегментів, що зберігаються в пам'яті, витягається початкова адреса сегмента.
Процесор може звертатися тільки до тих сегментам пам'яті, для яких є дескриптори в таблицях. Дескриптори являють собою 8-байтные структури даних, що визначають положення елемента (сегмента) у пам'яті, розмір займаної їм області пам'яті (ліміт), його призначення і характеристики захисту.
Рис.4. Принцип формування адреси пам'яті в захищеному режимі.Блок сегментації транслює логічний адресний простір у 32-бітний простір лінійних адрес. Лінійна адреса утвориться додаванням базової адреси сегмента з ефективною адресою. Базова адреса сегмента в реальному режимі утвориться множенням використовуваного сегментного регістра на 16, у захищеному режимі базова адреса завантажується з дескриптора, що зберігається в таблиці, по селектору, завантаженому у використовуваний сегментний регістр.
32-бітна фізична адреса пам'яті утворюється після перетворення лінійної адреси блоком сторінкової переадресації. Вона виводиться на зовнішню шину адреси процесора. У найпростішому випадку (при відключеному блоці сторінкової переадресації) фізична адреса збігається з лінійною. Включений блок сторінкової переадресації здійснює трансляцію лінійної адреси у фізичний сторінками розміром 4 Кбайт, 2 або 4 Мбайт. Блок забезпечує розширення розрядності фізичної адреси процесорів шостого покоління до 36 біт. Блок переадресації може включатися тільки в захищеному режимі.
Захист пам'яті за допомогою сегментації не дозволяє:
- використовувати сегменти не за призначенням (наприклад, намагатися трактувати область даних як коди інструкцій);
- порушувати права доступу (намагатися модифікувати сегмент, призначений тільки для читання, звертатися до сегмента, не маючи достатніх привілеїв і т.п.);
- адресуватися до елементів, що виходять за ліміт сегмента;
- змінювати вміст таблиць дескрипторів (тобто параметри сегментів), не маючи достатніх привілеїв.
Чотирирівнева ієрархічна система привілеїв призначена для керування використанням привілейованих інструкцій і доступом до дескрипторів.Рівні привілеїв нумеруються від 0 до 3, нульовий рівень відповідає максимальним (необмеженим) можливостям доступу і приділяється для ядра операційної системи. Рівень 3 має самі обмежені права і звичайно приділяється прикладним задачам.
Систему захисту звичайно зображують у виді концентричних кілець, що відповідають рівням захисту (див. рис.5)
Рис.5. Рівні привілеїв.
Рівні привілеїв відносяться до дескрипторів, селекторів і задач.
Дескриптори і привілеї є основою системи захисту: дескриптори визначають структури програмних елементів, а привілеї визначають можливість доступу до дескрипторів і виконання привілейованих інструкцій. Будь-яке порушення захисту приводить до виникнення спеціальних виключень, оброблюваних ядром операційної системи.
Області пам’яті спеціального призначення. Організація простору введення-виведення та стеку.
Простори пам'яті і введення-виведення у всіх МП сімейства І80Х86 розділені, тобто порти введення-виведення адресуються окремо від комірок пам'яті, у власному адресному просторі. 32-розрядні процесори дозволяють адресувати до 64 Кбайт однобайтних регістрів, при цьому весь простір введення-виведення розглядається як лінійна послідовність байт.
Процесори можуть звертатися до портів розрядністю в байт або слово, причому розрядність слова (16 або 32 байт) визначається поточним режимом адресації. При операціях введення-виведення адресні лінії А[16:31] не використовуються, тобто адреси портів завжди шістнадцятирозрядні. Адреса пристрою задається або в команді (тільки молодший байт, старший - нульовий), або береться з регістра DX.
У захищеному режимі інструкції введення-виведення є привілейованими, тобто можуть виповнюватися задачами тільки з визначеним рівнем привілеїв. Несанкціонована спроба виконання цих інструкцій викликає виключення 13 (#GP) - порушення захисту.
Всі операції з портами введення-виведення виконуються без якого-небудь кешування і строго в порядку, запропонованому програмним кодом, оскільки ці порти використовують для керування різними апаратними засобами, отже, послідовність керуючих впливів і зчитування стану не повинна порушуватися.
Стек являє собою безперервну область пам'яті, особливість якої полягає в тім, що дані в нього заштовхуються і витягаються з нього за принципом "першим увійшов - останнім вийшов". Дані містяться в стек за допомогою інструкції PUSH (заштовхування), а витягаються по інструкції POP (витаскування).
Положення стека в ОЗП, як говорилося раніше, визначається вмістом регістрів SS (селектор сегмента стека) і еSP (покажчик стека). Регістр SS зберігає базову адресу поточного сегмента стека, а регістр еSP указує на вершину стека, тобто містить зсув вершини стека в стековом сегменті. При кожнім звертанні до стеку пересилається (витягається або записується) одне слово - звичайне або подвійне. При цьому вміст еSP модифікується автоматично: при записі (включенні) у стек воно зменшується (декрементуеться) на 2 або 4, після чого дані записуються в сегмент, вказаний регістром SS, зі зсувом, обумовленим новим значенням еSP. При читанні (витягу) зі стека дані зчитуються з пам'яті за адресою SS:eSP, після чого вміст еSP збільшується на 2 або 4. Таким чином, при приміщенні даних у стек область, займана стеком у стековом сегменті, як би росте вниз, а при витягу даних стік стискується. Принцип функціонування стека пояснюється рис.6.