Полтавський Військовий Інститут Зв’язку Кафедра схемотехніки радіоелектронних систем ОБЧИСЛЮВАЛЬНА ТЕХНІКА ТА МІКРОПРОЦЕСОРИ
напрям підготовки 0924 «Телекомунікації» Організація пам’яті МП IA-32. Полтава – 2006
Навчальна література. 1. Якименко Ю.І. та ін.
Мікропроцесорна техніка:
підручник. – К.: ІВЦ «Видавництво «Політехніка», «Кондор», 2004. с. 91 – 94, 153 -- 161.
2. Казаринов Ю.М. и др. Микропроцессорный комплект К1810: Структура, программирование, применение: Справочная
книга. – М.: Высшая
школа, 1990.
3. Гук М., Юров В. Процессоры Pentium III, Athlon и другие – СПб: Издательство "Питер", 2000.
МП архітектури ІA-32 можуть працювати в одному з двох основних режимів, які називаються режимом реальної адресації і захищеним режимом віртуальної адресації (або більш коротко -- реальним режимом і захищеним режимом).
Реальний режим цілком суміжний з режимом
роботи мікропроцесора І8086. Цей режим
принципово однозадачний, у ньому можлива адресація 1 Мбайт фізичної пам'яті, розмір сегмента не може перевищувати 64 Кбайт.
Захищений режим є багатозадачним, тобто в цьому режимі МП може виконувати кілька задач одночасно, використовуючи спеціальні механізми розподілу
ресурсів обчислювальної системи між задачами, що виконуються.
1. Загальні поняття о моделях пам’яті, які реалізуються в МП архітектури IA-32. Процесори ІA-32 дозволяють реалізувати різні моделі пам'яті. Найпростішу
організацією має
плоска модель пам'яті: уся пам'ять представляється єдиною лінійною послідовністю байт. Це класична реалізація фон-нейманівської архітектури - тут зберігаються і дані, і коди програми.
Відповідальність за коректне використання пам'яті лягає цілком на прикладного програміста - він повинний піклуватися про те, щоб дані не "затерли" коди або на них не "наїхав" зростаючий стек. Щоб одержати плоску модель пам'яті, по суті, досить зробити так, щоб усі сегментні регістри вказували на ту саму область пам'яті.
Протилежністю плоскої моделі є
сегментована захищена модель - основна модель пам'яті, яка використовується в захищеному режимі. Кожній програмі в будь-який момент часу надаються кодовий сегмент, сегмент стека і до чотирьох сегментів даних. Сегменти спеціальним образом вибираються з таблиць, підготовлених операційною системою. Некоректні звертання до пам'яті блокуються системою захисту, що керує операційною системою.
Проміжне положення між названими моделями займає
модель пам'яті реального режиму. Тут також пам'ять організується у виді сегментів, але незалежності і захищеності сегментів немає. Використання цієї моделі у свій час треба було лише для
того, щоб забезпечити можливість адресації 1 МБайт пам'яті за допомогою шістнадцятирозрядних регістрів (2
16 = 64 Кбайт). Таку модель дотепер використовують додатки, написані для операційних систем реального режиму типу
MS DOS. Співвідношення між переліченими моделями пам’яті пояснюється рис.1.
Модель пам'яті реального режиму. |
Сегментована захищена модель. |
Лінійна послідовність байт. |
Чотири сегмента, незалежності і захищеності сегментів немає. |
До шести незалежних, захищених сегментів. |
Рис.1. Співвідношення моделей пам’яті. Пам'ять для МП представляється у виді лінійної
послідовності байт і підрозділяється на адресовані елементи: байти (8 біт), слова (16 біт), подвійні слова (32 біт) і чотирьохкратні слова (64 біт).
Слово записується в двох суміжних байтах, починаючи з молодшого.
Адресою слова є адреса його молодшого байта. Наступний байт (адреса на одиницю більше) містить старший байт слова. Подвійне
слово записується в чотирьох суміжних байтах, також починаючи з молодшого байта, адреса якого і є адресою подвійного слова. Таким чином, фізична адреса комірки пам'яті може розглядатися і як адреса байта, і як адреса слова. Узагалі говорячи,
такий порядок збереження слів (молодший байт - по молодшій адресі, старший - по старшої), що часто називають порядком L-H (low byte - hіgh byte), є
характерною рисою
процесорів І80Х86.
Не слід вважати, що реальний режим роботи процесорів ІA-32 у точності копіює режим роботи мікропроцесора І8086. При тім, що забезпечується сумісність цих режимів "зверху вниз", між ними, проте, маються істотні розходження. Наприклад, хоча в реальному режимі за замовчуванням використовується 16-розрядна адресація (при якій молодші половини розширених регістрів МП ІA-32 використовуються як 16-розрядні регістри МП І8086), але є можливість переключення для поточної інструкції на 32-бітну адресацію, що, зрозуміло, у МП І8086 у принципі неможливо.
2. Модель пам’яті МП архітектури IA-32 у реальному режимі. Реальний режим роботи МП ІA-32 цілком сумісний з режимом роботи мікропроцесора І8086. Цей режим принципово однозадачний. Оскільки для адресації комірок пам'яті використовується двадцятирозрядна фізична адреса, у ньому можлива адресація 2
20=1 МБайт фізичної пам'яті. Цей
простір пам'яті призначений для збереження кодів інструкцій і даних, для доступу до яких є великий набір різних способів адресації. Логічно пам'ять у реальному режимі організується у вигляді сегментів фіксованого розміру - 64 Кбайт.
Тому що внутрішні регістри МП 8086 були шістнадцятирозрядними, при роботі МП ІA-32 у реальному режимі за замовчуванням також використовується 16-бітна адресація.
Фізична двадцятирозрядна адреса (РА) виходить із двох шістнадцятирозрядних частин логічної адреси - адреси сегмента (Seg) і виконавчої адреси ЕА (executіve address) або внутрісегментного зсуву, які додаються зі зсувом Seg на 4 біти. При запису адрес використовується шістнадцяткова система числення. Формат запису логічної адреси з указівкою значень сегмента і зсуву, або їхнього місця розташування в регістрах
процесора виглядає в такий спосіб: Seg:EA (наприклад, DCBA:4321 або CS:ІP).
Зсув адреси сегмента на 4 біти вліво еквівалентний його множенню на 16, отже, фізична адреса
PA = 16 * Seg + EA. Адреса сегмента Seg зберігається в одному із сегментних регістрів CS, DS, SS, ES. Виконавча адреса, також названа ефективною адресою, може бути константою, вмістом регістра (наприклад, ІP при обчисленні адреси команди, SP при стекових
операціях), вмістом комірки пам'яті або сумою декількох величин (наприклад, двох регістрів і константи), але ця сума завжди шістнадцятирозрядна, тобто перенос за
межі старшого розряду слова ігнорується.
Таким чином, фізична адреса ніколи не перейде границю 64-килобайтного сегмента, на початок якого вказує поточний сегментний покажчик. Сегмент виходить як би згорнутим у кільце: у міру збільшення компонентів, які додаються, виконавча адреса росте, але після досягнення значення FFFF
16 знову обнуляеться і починає рости з початку. З одного боку, ця властивість забезпечує деякий захист сегментів один від одного (хоча некоректно написана програма може легко перезавантажити вказівник сегмента і зашкодити дані іншого сегмента), але з іншого боку,
сегментація пам'яті є істотною незручністю для написання великих програмних модулів.
Згорнутим у кільце виявляється і весь простір фізичної пам'яті: у міру збільшення виконавчої адреси і адреси сегмента фізична адреса росте, але тільки до значення FFFFF
16, після чого обнуляеться і починає рости з початку. Згортання сегментів і всього адресного простору в МП 8086 ніяк не контролюється.
Формування фізичної адреси пам'яті
процесором 8086 (або процесором ІА-32 у реальному режимі)пояснюється схемою, представленої на рис.2.
SHAPE \* MERGEFORMAT
19 20-бітна фізична адреса 0 |
Рис.2. Формування фізичної адреси процесором 8086. Приклад: Seg=DCBA; EA=4321. Зсув сегмента: DCBA0. Одержання фізичної адреси: DCBA0 + 04321 E0EC1 Фізична адреса: EOEC116= 1110 0000 1110 1100 00012 Весь простір пам'яті розбивається на параграфи -- області з 16 суміжних байт, починаючи з нульової адреси. Тому що чотири молодших біта адреси сегмента нульові, будь-який сегмент може починатися тільки на границі параграфа. Для збереження повної логічної (сегментованої) адреси використовується подвійне
слово, і в ньому спочатку розташовується слово зсуву - молодший байт, потім старший. Потім у тім же порядку розташовується адреса сегмента. На рис.3 представлений приклад, що ілюструє розміщення повної логічної адреси DCBA:4321 у комірках пам'яті.
… | 7 … 0 | | |
01003 | DC | HB | Сегмент DCBA |
01002 | BA | LB |
01001 | 43 | HB | Смещение 4321 |
01000 | 21 | LB |
… | | | |
Рис.3. Приклад розміщення повної логічної адреси в комірках пам'яті. Із
сегментацією зв'язані поняття ближньої і далекої адреси (виклику, переходу). При ближнім або внутрісегментном звертанні доступ до необхідної комірки пам'яті здійснюється тільки вказівкою зсуву, а адреса сегмента визначається поточним вмістом
відповідного регістра сегмента. При дальньому або міжсегментному звертанні вказується повна адреса, що містить 16-бітне значення сегмента (завантажується у
відповідний сегментний регістр) і 16-бітний зсув.
3. Модель пам’яті МП архітектури IA-32 у захищеному режимі. Захищений режим (захищений режим віртуальної адресації) процесорів ІA-32 є багатозадачним, тобто в цьому режимі МП може виконувати кілька задач одночасно, використовуючи спеціальні механізми розподілу ресурсів обчислювальної системи між задачами, що виконуються. Він призначений для забезпечення незалежності виконання декількох задач, тобто для захисту ресурсів однієї задачі від можливого впливу іншої. У захищеному режимі, на відміну від реального, некоректні звертання до пам'яті блокуються системою захисту, що керує операційною системою. МП у цьому режимі забезпечує чотирирівневу систему захисту просторів пам'яті і введення-виведення, а також переключення задач.
Захищений режим вперше з'явився в
процесорі 80286, але мав не всі можливості, доступні в 32-розрядних
процесорах.
Основним ресурсом, що захищається, є пам'ять, у якій зберігаються коди, дані і різні системні таблиці (наприклад, таблиця переривань). Захист пам'яті заснований на сегментації. Основною моделлю пам'яті, використовуваної в захищеному режимі, є сегментована захищена модель. При використанні цієї моделі кожній програмі в будь-який момент часу надаються кодовий сегмент, сегмент стека і до чотирьох сегментів даних. Сегменти спеціальним образом вибираються з таблиць, підготовлених операційною системою. У захищеному режимі
процесор дозволяє адресувати до 4 ГБайт фізичної пам'яті (у процесорах шостого покоління - до 64 ГБайт), граничний розмір кожного сегмента також складає 4 Гбайт.
Як у реальному, так і в захищеному режимі сегменти пам'яті виділяються задачам операційною системою, але в реальному режимі будь-яка задача може перевизначити значення сегментних регістрів, що задають положення сегмента в пам'яті, і "залізти" у чужу область даних або коду. У захищеному режимі прикладна програма зможе використовувати тільки дозволені для неї сегменти пам'яті.
Крім сегментації, у захищеному режимі можлива розбивка логічної пам'яті на сторінки розміром 4 КБайт, кожна з яких може відображатися на будь-яку область фізичної пам'яті. Починаючи з п'ятого покоління з'явилася можливість збільшення розміру сторінки до 4 МБайт.
Сегментація пам'яті і розбивка її на сторінки можуть застосовуватися в будь-яких сполученнях і використовуються з різними цілями. Сегментація є засобом організації логічної пам'яті на прикладному рівні, а розбивка на сторінки застосовується на системному рівні для керування фізичною пам'яттю. Сегменти і сторінки можуть вивантажуватися з фізичної оперативної пам'яті на диск і в міру необхідності довантажуватися ("підкачуватися") з його назад у фізичну пам'ять. Цей процес називається підкачуванням або свопінгом. У такий спосіб реалізується так називана віртуальна пам'ять.
Віртуальна пам'ять складається з фізичної пам'яті (ОЗП) комп'ютера і файлу підкачування, створюваного операційною системою на жорсткому диску. Теоретично віртуальна пам'ять може досягати обсягу в 64 Тбайт, практично ж її розмір обмежений розміром вільного простору на том розділі жорсткого диска, на якому розташований
файл підкачування (якщо на розмір файлу підкачування не накладене спеціальних обмежень).
Звичайно розмір файлу підкачування визначається операційною системою і змінюється динамічно в залежності від потреб виконуваних додатків. Однак є можливість вручну
встановити його розміри, а також зовсім відмовитися від його використання (чого робити не рекомендується).
Механізми сегментації і сторінкової трансляції адрес підтримує вбудований блок керування пам'яттю. Тобто, через 4 ГБайт адресованої фізичної пам'яті при використанні сторінкової адресації можуть відображатися до 64 ТБайт віртуальної пам'яті для кожної задачі.
Формування адреси пам’яті МП архітектури IA-32 у захищеному режимі. Захист пам’яті і система привілеїв. Стосовно до пам'яті розрізняють три адресних простори: логічний, лінійний і фізичний. У захищеному режимі працюють усі механізми
перетворення адресних просторів. Формування адреси пам'яті 32-розрядних процесорів у захищеному режимі пояснюється рис.4.
Логічна адреса, також названа віртуальною, складається із селектора сегмента (у реальному режимі - просто адреси сегмента) і ефективної адреси, названої також зсувом. Оскільки кожна задача може
мати до 16 Кбайт селекторів (2
14), а зсув, обмежений розміром сегмента, може досягати 4 Гбайт, логічне адресний простір для кожної задачі може досягати 64 Тбайт. Весь цій простір, у принципі, доступний програмістові (за умови підтримки збоку операційної системи).
Селектор сегмента зберігається в старших 14 бітах сегментного регістра (CS, DS, ES, SS, FS, або GS), що беруть участь в адресації конкретного елемента пам'яті. За значенням селектора зі спеціальних таблиць дескрипторів сегментів, що зберігаються в пам'яті, витягається початкова адреса сегмента.
Процесор може звертатися тільки до тих сегментам пам'яті, для яких є дескриптори в таблицях. Дескриптори являють собою 8-байтные структури даних, що визначають положення елемента (сегмента) у пам'яті, розмір займаної їм області пам'яті (ліміт), його призначення і характеристики захисту. Блок сторінкової переадресації (необов'язковий) |