7323

Керування пам’яттю в ОС. Сегментна, сторінкова й сегментно-сторінкова організація пам’яті

Лекция

Информатика, кибернетика и программирование

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

Украинкский

2013-01-20

1.12 MB

56 чел.

Тема: Керування пам’яттю в ОС. Сегментна, сторінкова й сегментно-сторінкова організація пам’яті.

План

  1.  Сегментація пам'яті
    1.  Переваги сегментації пам'яті.
    2.  Недоліки сегментації пам'яті.
    3.  Реалізація сегментації в архітектурі ІА-32

     2.   Сторінкова організація пам'яті  

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

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

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

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

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

1. Особливості сегментації пам'яті

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

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

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

Рис. 1. Перетворення адреси у разі сегментації

Загальний вигляд пам'яті у разі сегментації показано на рис. 2.

Наведемо переваги сегментації пам'яті.

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

Цей підхід не позбавлений і недоліків.

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

Сьогодні сегментацію застосовують доволі обмежено передусім через фрагментацію і складність реалізації ефективного звільнення пам'яті та обміну із диском. Ширше використання отримав розподіл пам'яті на блоки фіксованої довжини — сторінкова організація пам'яті.

Реалізація сегментації в архітектурі ІА-32

В архітектурі ІА-32 логічні адреси в програмі формуються із використанням сегментації й мають такий вигляд: «селектор-зсув». Значення селектора завантажують у спеціальний регістр процесора (сегментний регістр) і використовують як індекс у таблиці дескрипторів сегментів, що перебуває в пам'яті та є аналогом таблиці сегментів, описаної раніше. В архітектурі ІА-32 підтримуються шість сегментних регістрів. Це означає, що виконуваний код в один і той самий час може адресувати шість незалежних сегментів.

Селектор містить індекс дескриптора в таблиці, біт індикатора локальної або глобальної таблиці та необхідний рівень привілеїв.

Для системи задають спільну глобальну таблицю дескрипторів (Global Descriptor Table, GDT), а для кожної задачі — локальні/ таблицю дескрипторів (Local Descriptor Table, LDT).

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

Дескриптор містить значення бази (base), яке відповідає адресі об'єкта (наприклад, початок сегмента); значення межі (limit); тип об'єкта (сегмент, таблиця дескрипторів тощо); характеристики захисту.

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

Проте жодного разу не було згадано, що в дескрипторі зберігають фізичну адресу. Річ у тому, що для архітектури ІА-32 внаслідок перетворення логічної адреси отримують не фізичну адресу, а ще один вид адреси, який називають лінійною адресою.

2. Сторінкова організація пам'яті

До основних технологій реалізації віртуальної пам'яті крім сегментації належить сторінкова організація пам'яті (paging). її головна ідея - розподіл пам'яті блоками фіксованої довжини. Такі блоки називають сторінками.Ця технологія є найпоширенішим підходом до реалізації віртуальної пам'яті в сучасних операційних системах.

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

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

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

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

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

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

Рис 3. Перетворення адреси у разі сторінкової організації пам’яті

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

Рис. 4. Логічний і фізичний адресний простір у разі сторінкової організації пам'яті

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  •  каталогу (Directory) — визначає елемент каталогу сторінок, що вказує на потрібну таблицю сторінок;
  •  таблиці (Table) — визначає елемент таблиці сторінок, що вказує на потрібний фрейм пам'яті;
  •  зсуву (Offset) — визначає зсув у межах фрейму, що у поєднанні з адресою фрейму формує фізичну адресу.

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

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

  •  прапорець присутності (Present), дорівнює одиниці, якщо сторінка перебуває у фізичній пам'яті (їй відповідає фрейм); рівність цього прапорця нулю означає, що сторінки у фізичній пам'яті немає, при цьому операційна система може використати інші поля елемента для своїх цілей;
  •  20 найбільш значущих бітів, які задають початкову адресу фрейму, кратну 4 Кбайт (може бути задано 1 Мбайт різних початкових адрес);
  •  прапорець доступу (Accessed), який покладають рівним одиниці під час кожного звертання пристрою сторінкової підтримки до відповідного фрейму;
  •  прапорець зміни (Dirty), який покладають рівним одиниці під час кожної операції записування у відповідний фрейм;
  •  прапорець читання-записування (Read/Write), що задає права доступу до цієї сторінки або таблиці сторінок (для читання і для записування або тільки для читання);
  •  прапорець привілейованого режиму (User/Supervisor), який визначає режим процесора, необхідний для доступу до сторінки. Якщо цей прапорець дорівнює нулю, сторінка може бути адресована тільки із привілейованого режиму, якщо одиниці — доступна також і з режиму користувача;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1.  Машинна мова архітектури ІА-32 (а, отже, будь-яка програма, розроблена для цієї архітектури) оперує логічними адресами. Логічна адреса, як було зазначено раніше, складається із селектора і зсуву.
  2.  Лінійна або віртуальна адреса — це ціле число без знака завдовжки 32 біти. За його допомогою можна дістати доступ до 4 Гбайт комірок пам'яті. Перетворення логічної адреси в лінійну відбувається всередині пристрою сегментації (segmentation unit) за правилами перетворення адреси на базі сегментації, описаними раніше.
  3.  Фізичну адресу використовують для адресації комірок пам'яті в мікросхемах пам'яті. її теж зображають 32-бітовим цілим числом без знака. Перетворення лінійної адреси у фізичну відбувається всередині пристрою сторінкової підтримки (paging unit) за правилами для сторінкової організації пам'яті (лінійну адресу розділяють апаратурою на адресу сторінки і сторінковий зсув, а потім перетворюють у фізичну адресу із використанням таблиць сторінок, кеша трансляції тощо).

Рис. 5. Сторінково-сегментна організація пам’яті в архітектурі IA-32

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

Література:

Шеховцов В.А. Операційні системи. – К.: Видавнича група BHV, 2005. – 576 с. [5],188-199

Гордеев А.В. Операционные системы: Учебник для вузов. - 2-е изд. – СПб.: Питер, 2004. – 416 с. [1],86-99

Контрольні питання:

  1.  Чому розмір сторінки повинен бути степенем числа 2?
  2.  Поясніть сегментний спосіб організації пам’яті?
  3.  Поясніть сторінковий спосіб організації пам’яті?
  4.  Перелічіть можливі переваги сторінково – сегментної організації пам’яті порівняно з чистою сегментацією і чисто сторінковою організацією?


 

А также другие работы, которые могут Вас заинтересовать

12375. Измерение диэлектрической проницаемости 1.14 MB
  Лабораторная работа №2 Измерение диэлектрической проницаемости 1. Цель работы: измерение диэлектрической проницаемости методом определения емкости конденсатора в цепи переменного тока. 2. Активные и реактивные сопротивления в цепи переменного тока. 2.1. Переменн...
12376. Изучение электростатического поля методом моделирования 1.03 MB
  Лабораторная работа № 1 Изучение электростатического поля методом моделирования 1. Цель работы: экспериментальное исследование электростатического поля методом его моделирования. 2. Обоснование выбора метода моделирования. Для изучения распределения потенциало...
12377. Обработка и оформление таблиц 417.5 KB
  Обработка и оформление таблиц 1. Составить расписание занятий своей группы в форме таблицы см. пример ниже. Для создания таблицы нужно выполнить: Шаг 1. Таблица / Добавить / Таблица / Указать число столбцов и строк / ОК>. Выделить полученную заготовку таблицы: Таблица / Вы
12378. Основные операции по форматированию текстовых документов Word 90.5 KB
  Лабораторная работа Основные операции по форматированию текстовых документов Word Оборудование: ПК Программное обеспечение: Windows Word. Цель работы: приобретение и закрепление практических навыков работы в Word Инструкция к выполнению работы: Выполнит...
12380. Электронные формы 231.91 KB
  Лабораторная работа № 8 Электронные формы Цель работы: Освоить дополнительные возможности WORD. Научиться создавать шаблоны электронных форм и использовать их. Cредства обеспечения занятия: Оборудование: ПК; Программное обеспечение: OS Windows. ...
12381. Работа с табличными данными 51.5 KB
  Работа с табличными данными Электронная таблица Электронная таблица состоит из множества столбцов и строк. На пересечении столбцов и строк образуются клетки. Столбцы обозначаются английскими буквами по алфавиту. Первые 26 столбцов обозначаются буквами от А до Z сле
12382. Работа с формулами и функциями. Адресация ячеек в EXCEL 98.5 KB
  Лабораторная работа Работа с формулами и функциями. Адресация ячеек в EXCEL Оборудование: ПЭВМ Программное обеспечение: Windows EXCEL. Цель работы: приобретение и закрепление практических навыков работы в EXCEL Теоретическая часть. У каждой ячейки е
12383. Логические функции 67 KB
  Лабораторная работа Логические функции. Оборудование: ПЭВМ Программное обеспечение: Windows EXCEL. Цель работы: приобретение и закрепление практических навыков при использовании логических функций Теоретическая часть. Логические функции в ...