ТОП 10:

Базові принципи сторінкової організації пам'яті



У разі сторінкової організації пам'яті логічну адресу називають також лінійною, або віртуальною, адресою. Такі адреси належать одній множині (наприклад, лі­нійною адресою може бути невід'ємне ціле число довжиною 32 біти).

Фізичну пам'ять розбивають на блоки фіксованої довжини — фрейми, або сто­рінкові блоки (frames). Логічну пам'ять, у свою чергу, розбивають на блоки такої самої довжини — сторінки (pages). Коли процес починає виконуватися, його сто­рінки завантажуються в доступні фрейми фізичної пам'яті з диска або іншого носія.

Сторінкова організація пам'яті повинна мати апаратну підтримку. Кожна ад­реса, яку генерує процесор, ділиться на дві частини: номер сторінки і зсув сторін­ки. Номер сторінки використовують як індекс у таблиці сторінок.

Таблиця сторінок — це структура даних, що містить набір елементів (page-table entries, PTE), кожен із яких містить інформацію про номер сторінки, номер від­повідного їй фрейму фізичної пам'яті (або беспосередньо його базову адресу) та права доступу. Номер сторінки використовують для пошуку елемента в таблиці. Після його знаходження до базової адреси відповідного фрейму додають зсув сторінки, чим і визначають фізичну адресу (рис. 8.7).

 

Розмір сторінки є ступенем числа 2, у сучасних ОС використовують сторінки розміром від 2 до 8 Кбайт. У спеціальних режимах адресації можна працювати зі сторінками більшого розміру.

Для кожного процесу створюють його власну таблицю сторінок. Коли процес починає своє виконання, ОС розраховує його розмір у сторінках і кількість фрей­мів у фізичній пам'яті. Кожну сторінку завантажують у відповідний фрейм, після чого його номер записують у таблицю сторінок процесу.

 

Відображення логічної пам'яті для процесу відрізняється від реального стану фізичної пам'яті. На логічному рівні для процесу вся пам'ять зображується непе­рервним блоком і належить тільки цьому процесові, а фізично вона розосередже­на по адресному простору мікросхеми пам'яті, чергуючись із пам'яттю інших про­цесів (рис. 8.8). Процес не може звернутися до пам'яті, адреса якої не вказана в його таблиці сторінок (так реалізований захист пам'яті).

 

 

ОС повинна мати інформацію про поточний стан фізичної пам'яті (про зайня­тість і незайнятість фреймів, їхню кількість тощо). Цю інформацію звичайно збе­рігають у таблиці фреймів. Кожний її елемент відповідає фрейму і містить всі ві­домості про нього.

 

8.3.2. Порівняльний аналіз сторінкової організації пам'яті та сегментації

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

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

♦ Реалізація розподілу і звільнення пам'яті спрощується. Усі сторінки з погля­ду процесу рівноправні, тому можна підтримувати список вільних сторінок і в разі необхідності виділяти першу сторінку із цього списку, а після звільнен­ня повертати сторінку в список. Із сегментами так чинити не можна, оскільки кожен сегмент можна використати лише за його призначенням (спроба вико­ристати сегмент для іншої мети призведе швидше за все до того, що виникне потреба у сегменті іншої довжини).

♦ Реалізація обміну даними з диском також спрощується. Для організації тако­го обміну ділянка на диску, яку використовують для зберігання інформації про сторінки, вивантажені з пам'яті {простір підтримки, backing store) може бути теж розбита на блоки фіксованого розміру, рівного розмірові фрейму.

Сторінкова організація пам'яті не позбавлена й недоліків.

♦ Насамперед цей підхід спричиняє внутрішню фрагментацію, пов'язану з тим, що розмір сторінки завжди фіксований, і в разі необхідності виділення блоку пам'яті конкретної довжини його розмір буде кратним розміру сторінки. У се­редньому розмір невикористовуваної пам'яті становить приблизно половину сторінки для кожного виділеного блоку пам'яті (аналогічного до сегмента). Така фрагментація може бути знижена зменшенням кількості та збільшенням розміру блоків, що виділяються.

♦ Таблиці сторінок мають бути більші за розміром, ніж таблиці сегментів. Так, для виділення неперервного діапазону пам'яті розміром 100 Кбайт знадобить­ся один елемент таблиці сегментів, що описує сегмент, виділений для цього діапазону. З іншого боку, у разі використання сторінок розміром 4 Кбайт для опису такого діапазону нам знадобиться 25 елементів таблиці сторінок — по одному елементу для кожної сторінки.

 

8.3.3. Багаторівневі таблиці сторінок

Щоб адресувати логічний адресний простір значного обсягу за допомогою однієї таблиці сторінок, її доводиться робити дуже великою. Наприклад, в архітектурі ІА-32 за стандартного розміру сторінки 4 Кбайт (для адресації всередині такої сторінки потрібні 12 біт) на індекс у таблиці залишається 20 біт, що відповідає таблиці сторінок на 1 мільйон елементів.

Щоб уникнути таких великих таблиць, запропоновано технологію багаторів­невих таблиць сторінок. Таблиці сторінок самі розбиваються на сторінки, інфор­мацію про які зберігають в таблиці сторінок верхнього рівня. Кількість рівнів рід­ко перевищує 2, але може доходити й до 4.

Коли є два рівні таблиць, логічну адресу розбивають на індекс у таблиці верх­нього рівня, індекс у таблиці нижнього рівня і зсув.

Ця технологія має дві основні переваги. По-перше, таблиці сторінок стають менші за розміром, тому пошук у них можна робити швидше. По-друге, не всі таб­лиці сторінок мають перебувати в пам'яті у конкретний момент часу. Наприклад, якщо процес не використовує якийсь блок пам'яті, то вміст усіх сторінок нижньо­го рівня невикористовуваного блоку може бути тимчасово збережений на диску.

8.3.4. Реалізація таблиць сторінок в архітектурі ІА-32

Архітектура ІА-32 використовує дворівневу сторінкову організацію, починаючи з моделі Intel 80386.

Таблицю верхнього рівня називають каталогом сторінок (page directory), для кожної задачі повинен бути заданий окремий каталог сторінок, фізичну адресу якого зберігають у спеціальному керуючому регістрі сгЗ і куди він автоматично завантажується апаратним забезпеченням при перемиканні контексту. Таблицю нижнього рівня називають просто таблицею сторінок (page table).

Лінійна адреса поділяється на три поля:

каталогу (Directory) - визначає елемент каталогу сторінок, що вказує на пот­рібну таблицю сторінок;

таблиці (Table) - визначає елемент таблиці сторінок, що вказує на потрібний фрейм пам'яті;

зсуву (Offset) — визначає зсув у межах фрейму, що у поєднанні з адресою фрейму формує фізичну адресу.

Розмір полів каталогу і таблиці становить 10 біт, що дає таблиці сторінок, які містять 1024 елементи, розмір поля зсуву - 12 біт, що дає сторінки і фрейми роз­міром 4 Кбайт. Одна таблиця сторінок нижнього рівня адресує 4 Мбайт пам'яті (1 Мбайт фреймів), а весь каталог сторінок — 4 Гбайт.

Елементи таблиць сторінок всіх рівнів мають однакову структуру. Виокреми­мо такі поля елемента:

прапорець присутності (Present), дорівнює одиниці, якщо сторінка перебуває у фізичній пам'яті (їй відповідає фрейм); рівність цього прапорця нулю озна­чає, що сторінки у фізичній пам'яті немає, при цьому операційна система мо­же використати інші поля елемента для своїх цілей;

20 найбільш значущих бітів, які задають початкову адресу фрейму, кратну 4 Кбайт (може бути задано 1 Мбайт різних початкових адрес);

прапорець доступу (Accessed), який покладають рівним одиниці під час кож­ного звертання пристрою сторінкової підтримки до відповідного фрейму;

прапорець зміни (Dirty), який покладають рівним одиниці під час кожної опе­рації записування у відповідний фрейм;

прапорець читання-записування (Read/Write), що задає права доступу до цієї сторінки або таблиці сторінок (для читання і для записування або тільки для читання);

прапорець привілейованого режиму (User/Supervisor), який визначає режим процесора, необхідний для доступу до сторінки. Якщо цей прапорець дорів­нює нулю, сторінка може бути адресована тільки із привілейованого режиму, якщо одиниці - доступна також і з режиму користувача;

Прапорці присутності, доступу і зміни можна використовувати ОС для органі­зації віртуальної пам'яті. Про використання прапорців присутності та зміни гово­ритимемо у розділі 9.3.1, а про використання прапорця доступу - у розділі 9.5.5.

 

8.3.5. Асоціативна пам'ять

Під час реалізації таблиць сторінок для отримання доступу до байта фізичної пам'яті доводиться звертатися до пам'яті кілька разів. У разі використання дво­рівневих сторінок потрібні три операції доступу: до каталогу сторінок, до таблиці сторінок і безпосередньо за адресою цього байта, а для трирівневих таблиць — чотири операції. Це сповільнює доступ до пам'яті та знижує загальну продуктив­ність системи.

Як уже зазначалося, правило «дев'яносто до десяти» свідчить, що більша части­на звертань до пам'яті процесу належить до малої підмножини його сторінок, причому склад цієї підмножини змінюється досить повільно. Засобом підвищен­ня продуктивності у разі сторінкової організації пам'яті є кешування адрес фрей­мів пам'яті, що відповідають цій підмножині сторінок.

Для розв'язання цієї проблеми було запропоновано технологію асоціативної пам'яті або кета трансляції (translation look-aside buffers, TLB). У швидкодіючій пам'яті (швидшій, ніж основна пам'ять) створюють набір із кількох елементів (різні архітектури відводять під асоціативну пам'ять від 8 до 2048 елементів, в архі­тектурі ІА-32 таких елементів до Pentium 4 було 32, починаючи з Pentium 4 — 128). Кожний елемент кеша трансляції відповідає одному елементу таблиці сторінок.

Тепер під час генерування фізичної адреси спочатку відбувається пошук відповід­ного елемента таблиці в кеші (в ІА-32 — за полем каталогу, полем таблиці та зсуву), і якщо він знайдений, стає доступною адреса відповідного фрейму, що негайно мож­на використати для звертання до пам'яті. Якщо ж у кеші відповідного елемента немає, то доступ до пам'яті здійснюють через таблицю сторінок, а після цього еле­мент таблиці сторінок зберігають в кеші замість найстарішого елемента (рис. 8.9).

На жаль, у разі перемикання контексту в архітектурі ІА-32 необхідно очисти­ти весь кеш, оскільки в кожного процесу є своя таблиця сторінок, і ті ж самі номе­ри сторінок для різних процесів можуть відповідати різним фреймам у фізичній пам'яті. Очищення кеша трансляції є дуже повільною операцією, якої треба всіля­ко уникати (у розділі 8.5.5 буде показано, як цю проблему вирішують у Linux).

Важливою характеристикою кеша трансляції є відсоток влучень, тобто відсоток випадків, коли необхідний елемент таблиці сторінок перебуває в кеші і не потребує доступу до пам'яті. Відомо, що при 32 елементах забезпечується 98 % влучень. За­значимо також, що за такого відсотку влучень зниження продуктивності у разі використання дворівневих таблиць сторінок порівняно з однорівневими стано­вить 28 %, однак переваги, отримувані під час розподілу пам'яті, роблять таке зниження допустимим.

 

 

8.4. Сторінково-сегментна організація пам'яті

Базові принципи

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

Для того щоб об'єднати переваги обох підходів, у деяких апаратних архітекту­рах (зокрема, в ІА-32) використовують комбінацію сегментної та сторінкової ор­ганізації пам'яті. За такої організації перетворення логічної адреси у фізичну від­бувається за три етапи.

1. У програмі задають логічну адресу із використанням сегмента і зсуву.

2. Логічну адресу перетворюють у лінійну (віртуальну) адресу за правилами, за­даними для сегментації.

3. Віртуальну адресу перетворюють у фізичну за правилами, заданими для сто­рінкової організації.

Таку архітектуру називають сторінково-сегментною організацією пам'яті.

 

Перетворення адрес в архітектурі ІА-32

Розглянемо особливості реалізації описаних трьох етапів перетворення адреси в архітектурі ІА-32.

1. Машинна мова архітектури ІА-32 (а, отже, будь-яка програма, розроблена для цієї архітектури) оперує логічними адресами. Логічна адреса, як було зазначе­но раніше, складається із селектора і зсуву.

2. Лінійна або віртуальна адреса — це ціле число без знака завдовжки 32 біти. За його допомогою можна дістати доступ до 4 Гбайт комірок пам'яті. Перетворен­ня логічної адреси в лінійну відбувається всередині пристрою сегментації(segmentation unit) за правилами перетворення адреси на базі сегментації, описаними раніше.

3. Фізичну адресу використовують для адресації комірок пам'яті в мікросхемах пам'яті. її теж зображають 32-бітовим цілим числом без знака. Перетворення лінійної адреси у фізичну відбувається всередині пристрою сторінкової під­тримки(paging unit) за правилами для сторінкової організації пам'яті (лінійну адресу розділяють апаратурою на адресу сторінки і сторінковий зсув, а потім перетворюють у фізичну адресу із використанням таблиць сторінок, кеша транс­ляції тощо).

Формування адреси у разі сторінково-сегментної організації пам'яті показане на рис. 8.10.

 

 

 

Необхідність підтримки сегментації в ІА-32 значною мірою є даниною традиції (це пов'язано з необхідністю зворотної сумісності зі старими моделями процесо­рів, у яких була відсутня підтримка сторінкової організації пам'яті). Сучасні ОС часто обходять таку сегментну організацію майже повністю, використовуючи в систе­мі лише кілька загальних сегментів, причому кожен із них задають селектором, У дескрипторі якого поле base дорівнює нулю, а поле limit — максимальній адресі лі­нійної пам'яті. Зсув логічної адреси завжди буде рівний лінійній адресі, а отже, лінійну адресу можна буде формувати у програмі, фактично переходячи до чисто сторінкової організації пам'яті. Опишемо такі підходи, коли йтиметься про керу­вання пам'яттю в Linux і Windows ХР, у розділах 8.5 та 8.6.

 







Последнее изменение этой страницы: 2017-02-06; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.223.3.101 (0.011 с.)