Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Мал. 7.4. Селектор сегменту.

Для маніпулювання задачами ОС має інформаційну структуру, що ми уже визначили як дескриптор задачі. Мікропроцесор підтримує роботу з найбільш важливою частиною дескриптора задачі, що найменше залежить від операційної системи. Ця інваріантна частина дескриптора, з яким і працює мікропроцесор, названа сегментом стану задачі (task state segment, TSS). Перелік полів TSS зображений на мал. 3.5. Видно, що в основному цей сегмент містить контекст задачі. Процесор одержує доступ до цієї структури за допомогою регістра задачі (task register, TR).

Регістр TR містить індекс (селектор) елемента в GDT. Цей елемент являє собою дескриптор сегмента TSS. Дескриптор заноситься в тіньову частину регістра (див. мал. 3.2). До розгляду TSS ми ще повернемося, а зараз помітимо, що в одному з полів TSS міститься покажчик (селектор) на локальну таблицю дескрипторів даної задачі. При переході процесора з однієї задачі на іншу вміст поля LDTR заноситься мікропроцесором в однойменний регістр. Ініціалізувати регістр TR можна і явно.

Отже, регістр LDTR містить селектор, що вказує на один з дескрипторів глобальної таблиці GDT. Цей дескриптор заноситься мікропроцесором у тіньову частину регістра LDTR і описує таблицю LDT для поточної задачі. Тепер, коли в нас визначені як глобальна, так і локальна таблиця дескрипторів, можна розглянути процес визначення лінійної адреси. Для прикладу розглянемо процес одержання адреси команди. Адреси операндів визначаються за аналогією, але задіяні будуть інші регістри.

Мікропроцесор аналізує біт TI селектора коду й у залежності від його значення, витягає з таблиці GDT чи LDT дескриптор сегмента коду з номером (індексом), що рівний полю index (біти 3-15 селектора, див. мал. З.4). Цей дескриптор заноситься в тіньову (сховану) частину регістра CS. Далі мікропроцесор порівнює значення регістра EIP (extended instruction pointer — покажчик інструкції команди) з полем розміру сегмента, що міститься у взятому дескрипторі, і якщо зсув відносно початку сегмента не перевищує розміру межі, то значення EIP додається до значення поля початку сегмента і ми одержуємо шукану лінійну адресу команди. Лінійна адреса - це одна з форм віртуальної адреси. Вихідна двійкова віртуальна адреса, що обчислюється відповідно до використовуваної адресації, перетвориться в лінійну. В свою чергу, лінійна адреса буде дорівнювати або фізичному (якщо сторінкове перетворення відключене), або за допомогою сторінкової трансляції перетвориться у фізичну адресу. Якщо ж зсув з регістра EIP перевищує розмір сегмента коду, то ця аварійна ситуація викликає переривання і керування повинне передаватися супервізору ОС.

Мал. 7.5 Сегмент стану задачі (TSS).

Розглянутий нами процес одержання лінійної адреси проілюстрований на мал. 3.6. Варто відзначити, що оскільки міжсегментні переходи відбуваються нечасто, то, як правило, визначення лінійної адреси полягає тільки в порівнянні значення EIP з полем межі сегмента та у додаванні зсуву до початку сегмента. Усі необхідні дані вже знаходяться в мікропроцесорі, і операція одержання лінійної адреси відбувається дуже швидко.

Отже, лінійна адреса може вважатися фізичною адресою, якщо не включений режим сторінкової трансляції адрес. Апаратні засоби мікропроцесора для підтримки розглянутого способу подвійної трансляції віртуальних адрес у фізичні явно недостатні, і при наявності великої кількості невеликих сегментів приводять до повільної роботи. Справді, тіньовий регістр при кожнім селекторі є в єдиному екземплярі, і при переході на інший сегмент буде потрібно знову знаходити і витягати відповідний дескриптор сегмента, а це вимагає часу. Сторінковий же спосіб трансляції віртуальних адрес, як ми знаємо, має чимало своїх переваг. Тому в захищеному режимі роботи, при якому завжди діє описаний вище механізм визначення лінійних адрес, може бути включений ще і сторінковий механізм.

Мал. 7.6 Процес отримання лінійної адреси команди.

4. Підтримка сторінкового способу організації віртуальної пам'яті.

При створенні мікропроцесора i80386 розробники зштовхнулися з дуже серйозною проблемою в реалізації сторінкового механізму. Справа в тім, що мікропроцесор має широку шину адресу — 32 біта — і виникає питання про розбивку всієї адреси на поле сторінки і поле індексу. Якщо велику кількістьбітів адреси відвести під індекс, то сторінки стануть дуже великими, що спричинить великі втрати і на фрагментацію, іна операції введення/виведення, зв'язані з заміщенням сторінок. Хоча кількість сторінок сталася б при цьому менше, і накладні витрати при їхній підтримці теж би зменшилися. Якщо ж розмір сторінки зменшити, то велике поле номера-сторінки привело б до появи величезної кількості можливих сторінок і необхідно було або вводити якісь механізми контролю за номером сторінки (для того, щоб він не виходив за розміри таблиці сторінок), або створювати ці таблиці максимально можливого розміру. Розробники пішли по шляху, при якому розмір сторінки все-таки невеликий (він обраний рівним 212 = 4096 = 4К), а поле номера сторінки завбільшки 20 бітів, у свою чергу, розбивається на два поля і здійснюється двохетапна (двохкрокова) сторінкова трансляція.

Для опису кожної сторінки створюється відповідний дескриптор. Довжина дескриптора обрана рівною 32 бітам: 20 бітів лінійної адреси визначають номер сторінки (власне кажучи — її адресу, оскільки додавання до нього (приписування як молодші розряди) 12 нулів приводить до визначення початкової адреси сторінки), а інші біти розбиті на наступні поля, що зображені на мал. 3.7. Як видно, три біти дескриптора зарезервовані для використання системними програмістами при розробці підсистеми організації віртуальної пам'яті. З цими бітами мікропроцесор сам не працює.

Мал. 7.7 Дескриптор сторінки.

Насамперед, мікропроцесор аналізує самий молодший біт дескриптора — біт присутності, тому що якщо поле present дорівнює нулю, те це означає відсутність даної сторінки в оперативній пам'яті, і така ситуація призводить до переривання в роботі процесора з передачею керування відповідній програмі, що повинна буде завантажити викликану сторінку. Біт dirty — «брудний» — призначений для оцінки, що дану сторінку модифікували і при заміщенні цього сторінкового кадру наступним її необхідно зберегти в зовнішній пам'яті. Біт звертання (access) свідчить про те, що до даної таблиці чи сторінки здійснювався доступ. Він використовується для визначення сторінок), що буде брати участь у заміщенні при використанні дисциплін LRU чи LFU. Нарешті, перший і другий біти використовуються для захисту пам'яті.

Старші 10 бітів лінійної адреси визначають номер таблиці сторінок (раgе table entry, РТЕ), з якої за допомогою других 10 бітів лінійної адреси вибирається відповідний дескриптор віртуальної сторінки. І вже з цього дескриптора вибирається номер фізичної сторінки, якщо дана віртуальна сторінка відображена зараз на оперативну пам'ять. Ця схема визначення фізичної адреси по лінійному зображена на мал. 3.8.

Чорна таблиця, що ми індексуємо першими (старшими) 10 бітами лінійної адреси, названа таблицею каталогів таблиць сторінок (раge directory entry PDE). Її адреса в оперативній пам'яті визначається старшими 20 бітами керуючого регістра CR3.

Мал. 7.8 Трансляція лінійної адреси в мікропроцесорах і80x86.

Кожна з таблиць PDE і РТЕ складається з 1024 елементів (210=1024). У свою чергу, кожен елемент (дескриптор сторінки) має довжину 4 байти (32 біта), тому розмір цих таблиць саме відповідає розміру сторінки. Оцінимо тепер цю двохкрокову схему трансляції з позицій витрати пам'яті. Кожен дескриптор описує сторінку розміром 4 Кбайт. Отже, одна таблиця сторінок, що містить 1024 дескриптора, описує простір пам'яті в 4 Мбайт. Якщо наша задача користується віртуальним адресним простором, наприклад, у 50 Мбайт (припустимо, що мова йде про деякий графічний редактор, що обробляє зображення, що складається з великої кількості пикселов), то для опису цієї пам'яті необхідно мати 14 сторінок, що містять таблиці РТЕ. Крім цього, нам буде потрібно для цієї задачі ще одна таблиця PDE (теж розміром в одну сторінку), у якій 14 дескрипторів будуть вказувати на місцезнаходження згаданих таблиць РТЕ. Інші дескриптори PDE можуть бути не задіяні. Разом, для опису 50 Мбайт адресного простору задачі буде потрібно всього 15 сторінок, тобто 60 Кбайт пам'яті, що можна вважати прийнятним.

Якби не був використаний такий двохкроковий механізм трансляції, то втрати пам'яті на опис адресного простору могли б скласти 4(Кбайт) * 210 = 4 (Мбайт)! Очевидно, що це вже неприйнятне рішення.

Отже, мікропроцесор для кожної задачі, для якої в нього є TSS, дозволяє мати таблицю PDE і деяку кількість РТЕ. Оскільки це дає можливість адресуватися до будь-якого байта з 232, а шина адреси саме і дозволяє використовувати фізичну пам'ять зтаким обсягом, то можна як би відмовитися від сегментного способу адресації. Іншими словами, якщо вважати, що завдання полягає з одного єдиного сегмента, що, у свою чергу, розбитий на сторінки, то фактично ми одержуємо тільки один сторінковий механізм роботи з віртуальною пам'яттю. Цей підхід одержав назву «плоскої пам'яті». При використанні плоскої моделі пам'яті спрощується створення і операційних системи, і систем програмування. Крім цього, зменшуються витрати пам'яті для підтримки системних інформаційних структур. Тому в абсолютній більшості сучасних 32-розрядних ОС, створюваних для мікропроцесорів i80x86, використовується плоска модель пам'яті.

 

5. Режим віртуальних машин для виконання додатків реального режиму.

Розробники розглянутого сімейства мікропроцесорів у своєму прагненні забезпечити максимально можливу сумісність архітектури пішли не тільки на те, щоб забезпечити можливість програмам, створеним для перших 16-розрядних ПК, без проблем виконуватися на комп'ютерах з більш пізніми моделями мікропроцесорів за рахунок введення реального режиму роботи. Вони також забезпечили можливість виконання 16-розрядних додатків реального режиму за умови, що сам процесор при цьому функціонує в захищеному режимі роботи й операційна система, використовуючи відповідні апаратні засоби мікропроцесора, організує мультипрограмний (мультизадачный) режим. Іншими словами, мікропроцесори i80x86 підтримують можливість створення операційних середовищ реального режиму при роботі мікропроцесора в захищеному режимі. Якщо умовно назвати 16-розрядні додатки DOS-додатками (оскільки в абсолютній більшості випадків це саме так), то можна сказати, що введено підтримку для організації віртуальних DOS-машин, що працюють разом зі звичайними 32-бітовими додатками захищеного режиму. Це навіть знайшло відображення в назві режиму роботи мікропроцесорів і80x86 — режим віртуального процесора i8086, іноді (для стислості) його називають режимом V86 чи просто віртуальним режимомпри якому у захищеному режимі роботи може виконуватися код DOS-додатка.Мультизадачність при виконанні декількох програм реального режиму буде підтримана апаратними засобами захищеного режиму.

Перехід у віртуальний режим здійснюється за допомогою зміни біта VM (virtual mode) у регістрі EFLAGS. Коли процесор знаходиться у віртуальному режимі, для адресації пам'яті використовується схема реального режиму роботи - (сегмент: зсув) з розміром сегментів до 64 Кбайт, що можуть розташовуватися в адресному просторі розміром у 1 Мбайт, однак отримані адреси вважаються не фізичними, а лінійними. У результаті застосування сторінкової трансляції здійснюється відображення віртуального адресного простору 16-бітового додатка на фізичний адресний простір. Це дозволяє організувати рівнобіжне виконання декількох задач, розроблених для реального режиму, так ще і разом зі звичайними 32-бітовими додатками потребуючих захищеного режиму роботи.

Природньо, що для обробки переривань, що виникають при виконанні 16-бітових додатків у віртуальному режимі, процесор повертається з цього режиму в звичайний захищений режим. У противному випадку неможливо було б організувати повноцінну віртуальну машину. Очевидно, що оброблювачі переривань для віртуальної машини повинні емулювати роботу підсистеми переривань процесора і8086. Іншими словами, переривання відображаються в операційну систему, що працює в захищеному режимі, і вже основна ОС моделює роботу операційного середовища виконуваного додатка.

Питання, зв'язане з операціями введення/виведення, які недоступні для звичайних додатків, зважується аналогічно. При спробі виконати неприпустимі команди введення/виведення виникають переривання, і необхідні операції виконуються операційною системою, хоча задача про цьому і «не підозрює». При виконанні команд IN, OUT, INS, OUTS, CLI, STI процесор, що знаходиться у віртуальному режимі і виконує код на рівні привілеїв третього (самого нижнього) кільця захисту, за рахунок виникаючих унаслідок цього переривань переводиться на виконання високо привілейованого коду операційної системи.

Таким чином, ОС можуть цілком віртуалізувати ресурси комп'ютера: і апаратні, і програмні, створюючи інше повноцінне операційне середовище; при існуванні так званих нативных додатків, створюваних по власних специфікаціяхданої ОС. Дуже важливим моментом для організації повноцінної віртуальної машини є реалізація віртуалізації не тільки програмних, але й апаратних ресурсів. Так, наприклад, в ОС Windows NT ця задача виконана явно невдало, тоді як у OS/2 є повноцінна віртуальна машина як для DOS-додатків, так і для додатків,щопрацюють у середовищі специфікацій Win16. Правда, останнім часом це вже перестало бути актуальним, оскільки з'явилася велика кількість додатків, щопрацюють по специфікаціях Win32 API.


Читайте також:

  1. Мал. 7.3 Дескриптор сегменту.
  2. Тема 3.1. Дешифратори, шифратори, мультиплексори, селектори




Переглядів: 791

<== попередня сторінка | наступна сторінка ==>
СПИСОК ЛІТЕРАТУРИ | Захист адресного простору задач.

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.021 сек.