Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 модуль.Лекції з ВНС.docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
1 Мб
Скачать
☆

Сторінкова пам'ять

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

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

Логічна адреса в сторінковій системі – впорядкована пара (p,d), де p – номер сторінки у віртуальній пам'яті, а d – зсув в рамках сторінки p, на якій розміщується елемент, що адресується. Відмітимо, що розбиття адресного простору на сторінки здійснюється обчислювальною системою непомітно для програміста. Тому адреса є двовимірною лише з погляду операційної системи, а з погляду програміста адресний простір процесу залишається лінійним.

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

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

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

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

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

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

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

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

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

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

Кожен сегмент – лінійна послідовність адрес, що починається з 0. Максимальний розмір сегменту визначається розрядністю процесора (при 32-розрядній адресації це 232 байт або 4 Гбайт). Розмір сегменту може мінятися динамічно (наприклад, сегмент стека). У елементі таблиці сегментів окрім фізичної адреси початку сегменту зазвичай міститься і довжина сегменту. Якщо розмір зсуву у віртуальній адресі виходить за межі розміру сегменту, виникає виняткова ситуація.

Логічна адреса – впорядкована пара v=(s,d), номер сегменту і зсув усередині сегменту.

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

Рис. 10.3. Перетворення логічної адреси при сегментній організації пам'яті

Апаратна підтримка сегментів поширена мало (головним чином на процесорах Intel). У більшості ОС сегментація реалізується на рівні, не залежному від апаратури.

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

Рис. 10.4. Спрощена схема формування фізичної адреси при сегментно-сторінковій організації пам'яті

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

Висновок

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]