Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Сторінкова адресація в Linux
У ядрі Linux версії 2.4 використовують трирівневу організацію таблиць сторінок. Підтримуються три типи таблиць сторінок: глобальний (Page Global Directory, PGD); проміжний каталог сторінок (Page Middle Directory, PMD); таблиця сторінок (Page Table). Кожний глобальний каталог містить адреси одного або кількох проміжних каталогів сторінок, а ті, своєю чергою, — адреси таблиць сторінок. Елементи таблиць сторінок (PTE) вказують на фрейми фізичної пам'яті. Кожний процес має свій глобальний каталог сторінок і набір таблиць сторінок. Під час перемикання контексту Linux зберігає значення регістра сгЗ у керуючому блоці процесу, що передає керування, і завантажує в цей регістр значення з керуючого блоку процесу, що починає виконуватися. Отже, коли процес починає виконуватися, пристрій сторінкової підтримки вже посилається на коректний набір таблиць сторінок. Тепер розглянемо роботу цієї трирівневої організації для архітектури ІА-32, яка дає можливість мати тільки два рівні таблиць. Насправді ситуація досить проста — проміжний каталог таблиць оголошують порожнім, водночас його місце в ланцюжку покажчиків зберігають для того, щоб той самий код міг працювати для різних архітектур. У цьому разі PGD відповідає каталогу сторінок ІА-32 (його елементи містять адреси таблиць сторінок), а під час роботи із покажчиком на PMD насправді працюють із покажчиком на відповідний йому елемент PGD, відразу отримуючи доступ до таблиці сторінок. Між таблицями сторінок Linux і таблицями сторінок ІА-32 завжди дотримується однозначна відповідність. Для платформо-незалежного визначення розміру сторінки в Linux використовують системний виклик getpagesize():
#іпсіude <unistd.h> ргіntf("Розмір сторінки: %d\n". getpagesize());
8.5.3. Розташування ядра у фізичній пам'яті Ядро Linux завантажують у набір зарезервованих фреймів пам'яті, які заборонено вивантажувати на диск або передавати процесу користувача, що захищає код і дані ядра від випадкового або навмисного ушкодження. Завантаження ядра починається із другого мегабайта пам'яті (перший мегабайт пропускають, тому що в ньому є ділянки, які не можуть бути використані, наприклад відеопам'ять текстового режиму, код BIOS тощо). Із ядра завжди можна визначити фізичні адреси початку та кінця його коду і даних.
На рис. 8.11 видно, як розташовується ядро у фізичній пам'яті, а також межі різних ділянок пам'яті ядра. 8.5.4.Особливості адресації процесів і ядра Лінійний адресний простір кожного процесу поділяють на дві частини: перші З Гбайт адрес використовують у режимі ядра та користувача; вони відображають захищений адресний простір процесу; решту 1 Гбайт адрес використовують тільки в режимі ядра. Елементи глобального каталогу процесу, що визначають адреси до 3 Гбайт, можуть бути задані самим процесом, інші елементи мають бути однаковими для всіх процесів і задаватися ядром. Потоки ядра (див. розділ 3) не використовують елементів глобального каталогу першого діапазону. На практиці, коли відбувається передавання керування потоку ядра, не змінюється значення регістра сгЗ, тобто потік ядра використовує таблиці сторінок процесу користувача, що виконувався останнім (оскільки йому потрібні тільки елементи, доступні в режимі ядра, а вони в усіх процесах користувача однакові). Адресний простір ядра починається із четвертого гігабайта лінійної пам'яті. Для прямого відображення на фізичні адреси доступні перші 896 Мбайт цього простору (128 Мбайт, що залишилися, використовується переважно для динамічного розподілу пам'яті ядром). 8.5.5.Використання асоціативної пам'яті Під час роботи з асоціативною пам'яттю основне завдання ядра полягає у зменшенні потреби її очищення. Для цього вживають таких заходів. + Під час планування невелику перевагу має процес, який використовує той самий набір таблиць сторінок, що й процес, який повертає керування (під час перемикання між такими процесами очищення кеша трансляції не відбувається). Реалізація потоків ядра, котрі використовують таблиці сторінок останнього процесу, теж призводить до того, що під час перемикання між процесом і потоком ядра очищення не відбувається.
8.6. Реалізація керування основною пам'яттю: Windows ХР
8.6.1.Сегментація у Windows ХР Система Windows ХР використовує загальні сегменти пам'яті подібно до того, як це робиться в Linux. Для всіх сегментів у програмі задають однакові значення бази і межі, тому роботу з керування пам'яттю аналогічним чином передають на рівень лінійних адрес (які є зсувом у цих загальних сегментах).
8.6.2.Сторінкова адресація у Windows ХР Під час роботи з лінійними адресами у Windows ХР використовують дворівневі таблиці сторінок, повністю відповідні архітектурі ІА-32 (див. розділ 8.3.4). У кожного процесу є свій каталог сторінок, кожен елемент якого вказує на таблицю сторінок. Таблиці сторінок усіх рівнів містять по 1024 елементи таблиці сторінок, кожний такий елемент вказує на фрейм фізичної пам'яті. Фізичну адресу каталогу сторінок зберігають у блоці KPROCESS. Розмір лінійної адреси, з якою працює система, становить 32 біти. З них 10 біт відповідають адресі в каталозі сторінок, ще 10 — це індекс елемента в таблиці, останні 12 біт адресують конкретний байт сторінки (і є зсувом). Розмір елемента таблиці сторінок теж становить 32 біти. Перші 20 біт адресують конкретний фрейм (і використовуються разом із останніми 12 біт лінійної адреси), а інші 12 біт описують атрибути сторінки (захист, стан сторінки в пам'яті, який файл підкачування використовує). Якщо сторінка не перебуває у пам'яті, то в перших 20 біт зберігають зсув у файлі підкачування. Для платформо-незалежного визначення розміру сторінки у Win32 АРІ використовують універсальну функцію отримання інформації про систему GetSys-temlnfoO: SYSTEMINFO info; // структура для отримання інформації про систему GetSystemInfo(&info); printf("Розмір сторінки: *d\n". info.dwPageSize);
8.6.3.Особливості адресації процесів і ядра Лінійний адресний простір процесу поділяється на дві частини: перші 2 Гбайт адрес доступні для процесу в режимі користувача і є його захищеним адресним простором; інші 2 Гбайт адрес доступні тільки в режимі ядра і відображають системний адресний простір. Зазначимо, що таке співвідношення між адресним простором процесу і ядра відрізняється від прийнятого в Linux (3 Гбайт для процесу, 1 Гбайт для ядра). Деякі версії Windows ХР дають можливість задати співвідношення 3 Гбайт/1 Гбайт під час завантаження системи.
8.6.4. Структура адресного простору процесів і ядра В адресному просторі процесу можна виділити такі ділянки: ♦ перші 64 Кбайт (починаючи з нульової адреси) — це спеціальна ділянка, доступ до якої завжди спричиняє помилки; ♦ усю пам'ять між першими 64 Кбайт і останніми 136 Кбайт (майже 2 Гбайт) може використовувати процес під час свого виконання; ♦ далі розташовані два блоки по 4 Кбайт: блоки оточення потоку (ТЕВ) і процесу (РЕВ) (див. розділ 3); ♦ наступні 4 Кбайт — ділянка пам'яті, куди відображаються різні системні дані (системний час, значення лічильника системних годин, номер версії системи), тому для доступу до них процесу не потрібно перемикатися в режим ядра; ♦ останні 64 Кбайт використовують для запобігання спробам доступу за межі адресного простору процесу (спроба доступу до цієї пам'яті дасть помилку). Системний адресний простір містить велику кількість різних ділянок. Найважливіші з них наведено нижче. ♦ Перші 512 Мбайт системного адресного простору використовують для завантаження ядра системи. ♦ 4 Мбайт пам'яті виділяють під каталог сторінок і таблиці сторінок процесу. ♦ Спеціальну ділянку пам'яті розміром 4 Мбайт, яку називають гіперпростором (hyperspace), використовують для відображення різних структур даних, специфічних для процесу, на системний адресний простір (наприклад, вона містить список сторінок робочого набору процесу).
♦ 512 Мбайт виділяють під системний кеш. ♦ У системний адресний простір відображаються спеціальні ділянки пам'яті — вивантажуваний пул і невивантажуваний пул, які розглянемо в розділі 10. ♦ Приблизно 4 Мбайт у самому кінці системного адресного простору виділяють під структури даних, необхідні для створення аварійного образу пам'яті, а також для структур даних HAL.
Висновки ♦ Керування пам'яттю є однією з найскладніших задач, які стоять перед операційною системою. Щоб нестача пам'яті не заважала роботі користувача, потрібно розв'язувати задачу координації різних видів пам'яті. Можна використовувати повільнішу пам'ять для збільшення розміру швидшої (на цьому ґрунтується технологія віртуальної пам'яті), а також швидшу — для прискорення доступу до повільнішої (на цьому ґрунтується кешування). ♦ Технологія віртуальної пам'яті передбачає введення додаткових перетворень між логічними адресами, які використовують програми, та фізичними, що їх розуміє мікросхема пам'яті. На основі таких перетворень може бути реалізований захист пам'яті; крім того, вони дають змогу процесу розміщатися у фізичній пам'яті не неперервно і не повністю (ті його частини, які в цей момент часу не потрібні, можуть бути збережені на жорсткому диску). Ця технологія спирається на той факт, що тільки частина адрес процесу використовується в конкретний момент часу, тому коли зберігати в основній пам'яті тільки її, продуктивність процесу залишиться прийнятною. ♦ Базовими підходами до реалізації віртуальної пам'яті є сегментація і сторінкова організація. Обидва ці підходи дають можливість розглядати логічний адресний простір процесу як сукупність окремих блоків, кожен з яких може бути відображений на основну пам'ять або на диск. Головна відмінність полягає в тому, що у випадку сегментації блоки мають змінну довжину, а у разі сторінкової організації — постійну. Сьогодні часто трапляється комбінація цих двох підходів (сторінково-сегментна організація пам'яті). ♦ У разі сторінкової організації пам'яті логічна адреса містить номер у спеціальній структурі даних — таблиці сторінок, а також зсув відносно початку сторінки. Розділення адреси на частини відбувається апаратно. Елемент таблиці сторінок містить адресу початку блоку фізичної пам'яті, у який відображається сторінка (такий блок називають фреймом) і права доступу. Він може також відповідати сторінці, відображеній на диск. Таблиці сторінок можуть містити кілька рівнів. Таблицю верхнього рівня називають каталогом сторінок. Кожний процес має свій набір таких таблиць. Для прискорення доступу останні використані елементи таблиць сторінок кешуються в асоціативній пам'яті.
Контрольні запитання та завдання 1. Чи є необхідність реалізувати в системі віртуальну пам'ять, якщо відомо, що загальний обсяг пам'яті, необхідної для всіх активних процесів, ніколи не перевищить обсяг доступної фізичної пам'яті? Якщо така необхідність є, то які функції системи віртуальної пам'яті варто реалізувати обов'язково, а які — ні? 2. Перелічіть відмінності в реалізації та використанні сегментів даних і сегментів коду. 3. У якій ситуації виконання двох незалежних процесів, що коректно завершуються в системі зі сторінковою організацією пам'яті, призведе до взаємного блокування в системі, де такої організації немає? Передбачено, що запит на виділення пам'яті переводить процес у режим очікування, якщо для його виконання бракує фізичної пам'яті. 4. Чому розмір сторінки повинен бути степенем числа 2? 5. Припустімо, що розмір сторінки пам'яті становить 4 Кбайт, кожен її елемент займає 4 байти. Кожна таблиця сторінок повинна вміщатися на одній сторінці. Скільки рівнів таблиць сторінок буде потрібно, щоб адресувати: а) 32-бітний адресний простір; б) 64-бітний адресний простір? 6. Коли використання звичайного масиву з лінійним пошуком виявляється неефективним для реалізації таблиці сторінок? Які поліпшення в цьому випадку можна запропонувати? 7. Перелічіть можливі переваги сторінково-сегментної організації пам'яті порівняно з чистою сегментацією і чисто сторінковою організацією. 8. Поясніть, чому в разі використання сторінково-сегментної організації пам'яті перетворення адреси не може бути реалізоване у зворотному порядку (коли логічну адресу спочатку перетворюють за допомогою таблиці сторінок, а потім — за допомогою таблиці сегментів). 9. У системі зі сторінково-сегментною організацією пам'яті кожному процесові виділяють 64 Кбайт адресного простору для трьох сегментів: коду, даних і стека. Розмір сегмента коду для процесу дорівнює 32 Кбайт, сегмента даних — 16 400 байт, а стека — 15 800 байт. Чи достатньо адресного простору процесу для розміщення цих сегментів, якщо розмір сторінки дорівнює: а) 4 Кбайт; б) 512 байт? 10.Чи можуть під час виконання програми всі сегментні регістри містити однакові значення? Навіщо це може знадобитися?
Розділ 11
|
||||||||
Последнее изменение этой страницы: 2017-02-06; просмотров: 441; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 44.222.169.36 (0.019 с.) |