Полтавський Військовий Інститут Зв’язку
Кафедра схемотехніки радіоелектронних систем
ОБЧИСЛЮВАЛЬНА ТЕХНІКА ТА МІКРОПРОЦЕСОРИ
напрям підготовки 0924 «Телекомунікації»
Організація пам’яті МП IA-32.
Полтава – 2006
Навчальна література.
Якименко Ю.І. та ін. Мікропроцесорна техніка: підручник. – К.: ІВЦ «Видавництво «Політехніка», «Кондор», 2004. с. 91 – 94, 153 — 161.
Казаринов Ю.М. и др. Микропроцессорный комплект К1810: Структура, программирование, применение: Справочная книга. – М.: Высшая школа, 1990.
Гук М., Юров В. Процессоры Pentium III, Athlon и другие – СПб: Издательство «Питер», 2000.
МП архітектури ІA-32 можуть працювати в одному з двох основних режимів, які називаються режимом реальної адресації і захищеним режимом віртуальної адресації (або більш коротко — реальним режимом і захищеним режимом).
Реальний режим цілком суміжний з режимом роботи мікропроцесора І8086. Цей режим принципово однозадачний, у ньому можлива адресація 1 Мбайт фізичної пам'яті, розмір сегмента не може перевищувати 64 Кбайт.
Захищений режим є багатозадачним, тобто в цьому режимі МП може виконувати кілька задач одночасно, використовуючи спеціальні механізми розподілу ресурсів обчислювальної системи між задачами, що виконуються.
1. Загальні поняття о моделях пам’яті, які реалізуються в МП архітектури IA-32.
Процесори ІA-32 дозволяють реалізувати різні моделі пам'яті. Найпростішу організацією має плоска модель пам'яті: уся пам'ять представляється єдиною лінійною послідовністю байт. Це класична реалізація фон-нейманівської архітектури — тут зберігаються і дані, і коди програми. Відповідальність за коректне використання пам'яті лягає цілком на прикладного програміста — він повинний піклуватися про те, щоб дані не «затерли» коди або на них не «наїхав» зростаючий стек. Щоб одержати плоску модель пам'яті, по суті, досить зробити так, щоб усі сегментні регістри вказували на ту саму область пам'яті.
Протилежністю плоскої моделі є сегментована захищена модель — основна модель пам'яті, яка використовується в захищеному режимі. Кожній програмі в будь-який момент часу надаються кодовий сегмент, сегмент стека і до чотирьох сегментів даних. Сегменти спеціальним образом вибираються з таблиць, підготовлених операційною системою. Некоректні звертання до пам'яті блокуються системою захисту, що керує операційною системою.
Проміжне положення між названими моделями займає модель пам'яті реального режиму. Тут також пам'ять організується у виді сегментів, але незалежності і захищеності сегментів немає. Використання цієї моделі у свій час треба було лише для того, щоб забезпечити можливість адресації 1 МБайт пам'яті за допомогою шістнадцятирозрядних регістрів (216 = 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. Цей режим принципово однозадачний. Оскільки для адресації комірок пам'яті використовується двадцятирозрядна фізична адреса, у ньому можлива адресація 220=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-килобайтного сегмента, на початок якого вказує поточний сегментний покажчик. Сегмент виходить як би згорнутим у кільце: у міру збільшення компонентів, які додаються, виконавча адреса росте, але після досягнення значення FFFF16 знову обнуляеться і починає рости з початку. З одного боку, ця властивість забезпечує деякий захист сегментів один від одного (хоча некоректно написана програма може легко перезавантажити вказівник сегмента і зашкодити дані іншого сегмента), але з іншого боку, сегментація пам'яті є істотною незручністю для написання великих програмних модулів.
Згорнутим у кільце виявляється і весь простір фізичної пам'яті: у міру збільшення виконавчої адреси і адреси сегмента фізична адреса росте, але тільки до значення FFFFF16, після чого обнуляеться і починає рости з початку. Згортання сегментів і всього адресного простору в МП 8086 ніяк не контролюється.
Формування фізичної адреси пам'яті процесором 8086 (або процесором ІА-32 у реальному режимі)пояснюється схемою, представленої на рис.2.
Рис.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
…
--PAGE_BREAK--
Рис.3. Приклад розміщення повної логічної адреси в комірках пам'яті.
Із сегментацією зв'язані поняття ближньої і далекої адреси (виклику, переходу). При ближнім або внутрісегментном звертанні доступ до необхідної комірки пам'яті здійснюється тільки вказівкою зсуву, а адреса сегмента визначається поточним вмістом відповідного регістра сегмента. При дальньому або міжсегментному звертанні вказується повна адреса, що містить 16-бітне значення сегмента (завантажується у відповідний сегментний регістр) і 16-бітний зсув.
Модель пам’яті МП архітектури IA-32 у захищеному режимі.
Захищений режим (захищений режим віртуальної адресації) процесорів ІA-32 є багатозадачним, тобто в цьому режимі МП може виконувати кілька задач одночасно, використовуючи спеціальні механізми розподілу ресурсів обчислювальної системи між задачами, що виконуються. Він призначений для забезпечення незалежності виконання декількох задач, тобто для захисту ресурсів однієї задачі від можливого впливу іншої. У захищеному режимі, на відміну від реального, некоректні звертання до пам'яті блокуються системою захисту, що керує операційною системою. МП у цьому режимі забезпечує чотирирівневу систему захисту просторів пам'яті і введення-виведення, а також переключення задач.
Захищений режим вперше з'явився в процесорі 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.
Рис.6. Принцип функціонування стека.
Стек використовують для різних цілей: продолжение
--PAGE_BREAK--
— організація переривань, викликів і повернень;
— тимчасового збереження даних, коли під них нема рації виділяти фіксовані місця в пам'яті;
— передачі і повернення параметрів при викликах процедур.
До використання стека він повинний бути ініціалізований — повинні бути встановлені SS і покажчик eSP так, щоб вони вказували на область реальної оперативної пам'яті (стек у ПЗУ, зрозуміло, працювати не може).
Прикладні програми, як правило, від операційної системи одержують готовий до застосування. У захищеному режимі сегмент стану задачі містить чотири селектори сегментів стека (для різних рівнів привілеїв), але в кожен момент часу використовується, природно, тільки один стек (регістри SS і eSP у процесорі представлені тільки в одному екземплярі, вони визначають стек на поточному рівні привілеїв.
ВИСНОВОК
Процесори ІA-32 дозволяють реалізувати різні моделі пам'яті. Найпростішу організацією має плоска модель пам'яті: уся пам'ять представляється єдиною лінійною послідовністю байт. Протилежністю плоскої моделі є сегментована захищена модель — основна модель пам'яті, яка використовується в захищеному режимі. Кожній програмі в будь-який момент часу надаються кодовий сегмент, сегмент стека і до чотирьох сегментів даних. Проміжне положення між названими моделями займає модель пам'яті реального режиму. Тут також пам'ять організується у виді сегментів, але незалежності і захищеності сегментів немає.
В пам’яті ПК на основі МП сімейства І80X86 слово зберігається в двох суміжних байтах, починаючи з молодшого. Адресою слова є адреса його молодшого байта.
Логічно пам'ять у реальному режимі організується у вигляді сегментів фіксованого розміру — 64 Кбайт.
Фізична двадцятирозрядна адреса (РА) виходить із двох шістнадцятирозрядних частин логічної адреси — адреси сегмента (Seg) і виконавчої адреси ЕА (executіve address) або внутрісегментного зсуву, які додаються зі зсувом Seg на 4 біти.
Захищений режим віртуальної адресації) процесорів ІA-32 є багатозадачним, тобто в цьому режимі МП може виконувати кілька задач одночасно, використовуючи спеціальні механізми розподілу ресурсів обчислювальної системи між задачами, що виконуються. Основним ресурсом, що захищається, є пам'ять, у якій зберігаються коди, дані і різні системні таблиці. Захист пам'яті заснований на сегментації.
Сегментація пам'яті і розбивка її на сторінки можуть застосовуватися в будь-яких сполученнях і використовуються з різними цілями. Сегментація є засобом організації логічної пам'яті на прикладному рівні, а розбивка на сторінки застосовується на системному рівні для керування фізичною пам'яттю. Сегменти і сторінки можуть вивантажуватися з фізичної оперативної пам'яті на диск і в міру необхідності довантажуватися («підкачуватися») з його назад у фізичну пам'ять. Цей процес називається підкачуванням або свопінгом. У такий спосіб реалізується так називана віртуальна пам'ять, що складається з ОЗП комп'ютера і файлу підкачування на жорсткому диску.
У захищеному режимі логічна адреса, також названа віртуальною, складається із селектора сегмента і ефективної адреси, названої також зсувом.
Процесор може звертатися тільки до тих сегментів пам'яті, для яких є дескриптори в таблицях. Дескриптори являють собою 8-байтные структури даних, що визначають положення сегмента у пам'яті, ліміт пам'яті, його призначення і характеристики захисту.
Захист пам'яті за допомогою сегментації не дозволяє:
— використовувати сегменти не за призначенням;
— порушувати права доступу до сегментів;
— адресуватися до елементів, що виходять за ліміт сегмента;
— змінювати вміст таблиць дескрипторів, не маючи достатніх привілеїв.
Чотирирівнева ієрархічна система привілеїв призначена для керування використанням привілейованих інструкцій і доступом до дескрипторів. Рівні привілеїв нумеруються від 0 до 3, нульовий рівень відповідає максимальним (необмеженим) можливостям доступу і приділяється для ядра операційної системи. Рівень 3 має самі обмежені права і звичайно приділяється прикладним задачам.
Дескриптори і привілеї є основою системи захисту: дескриптори визначають структури програмних елементів, а привілеї визначають можливість доступу до дескрипторів і виконання привілейованих інструкцій. Будь-яке порушення захисту приводить до виникнення спеціальних виключень, оброблюваних ядром операційної системи.
Простори пам'яті і введення-виведення у всіх МП сімейства І80Х86 розділені, тобто порти введення-виведення адресуються окремо від комірок пам'яті, у власному адресному просторі. 32-розрядні процесори дозволяють адресувати до 64 Кбайт однобайтних регістрів, при цьому весь простір введення-виведення розглядається як лінійна послідовність байт.
Стек являє собою безперервну область пам'яті, особливість якої полягає в тім, що дані в нього заштовхуються і витягаються з нього за принципом «першим увійшов — останнім вийшов».
Стек використовують для різних цілей:
— організація переривань, викликів і повернень;
— тимчасового збереження даних, коли під них нема рації виділяти фіксовані місця в пам'яті;
— передачі і повернення параметрів при викликах процедур.