Класифікація розподілів пам’яті з використання дискового простору.
Зміст
Поняття віртуальної пам'яті
Вже досить давно користувачі зіткнулися з проблемою розміщення в пам'яті програм, розмір яких перевищував наявну вільну пам'ять. Рішенням було розбиття програми на частини, звані оверлеями. 0-ий оверлей починав виконуватися першим. Коли він закінчував своє виконання, він викликав інший оверлей. Всі оверлеї зберігалися на диску і переміщувались між пам'яттю і диском засобами операційної системи. Однак розбивка програми на частини і планування їхнього завантаження в оперативну пам'ять мав здійснювати програміст.
Розвиток методів організації обчислювального процесу в цьому напрямку привело до появи методу, відомого під назвою віртуальна пам'ять. Віртуальним називається ресурс, який користувачу чи користувача програмі представляється володіє властивостями, якими він насправді не володіє. Так, наприклад, користувачеві може бути надана віртуальна оперативна пам'ять, розмір якої перевершує всю наявну в системі реальну оперативну пам'ять. Користувач пише програми так, як ніби в його розпорядженні є однорідна оперативна пам'ять великого обсягу, але насправді всі дані, використовувані програмою, зберігаються на одному або декількох різнорідних ЗП, звичайно на дисках, і при необхідності частинами відображаються в реальну пам'ять.
Таким чином, віртуальна пам'ять - це сукупність програмно-апаратних засобів, що дозволяють користувачам писати програми, розмір яких перевершує наявну оперативну пам'ять; для цього віртуальна пам'ять вирішує наступні завдання:
- розміщує дані в ЗП різного типу, наприклад, частина програми в оперативній пам'яті, а частина на диску;
- переміщує по мірі необхідності дані між запам'ятовуючими пристроями різного типу, наприклад, довантажує потрібну частину програми з диска в оперативну пам'ять;
- перетворює віртуальні адреси у фізичні.
Всі ці дії виконуються автоматично, без участі програміста, тобто механізм віртуальної пам'яті є прозорим по відношенню до користувача.
Найбільш поширеними реалізаціями віртуальної пам'яті є сторінкове, сегментні і сторінковому-сегментний розподіл пам'яті, а також свопінг.
Сторінковий розподіл
ВАП кожного процесу поділяється на частини однакового, фіксованого для даної системи розміру, які називаються віртуальними сторінками. У загальному випадку розмір віртуального адресного простору не є кратним розміру сторінки, тому остання сторінка кожного процесу доповнюється фіктивною областю.
Вся оперативна пам'ять машини також ділиться на частини такого ж розміру, називані фізичними сторінками (чи блоками).
Розмір сторінки звичайно вибирається рівним степеню двійки: 512, 1024 і т.д., це дозволяє спростити механізм перетворення адрес.
При завантаженні процесу частина його віртуальних сторінок міститься в ОП, а решта - на диск. Суміжні віртуальні сторінки не обов'язково розташовуються в суміжних фізичних сторінках. При завантаженні операційна система створює для кожного процесу інформаційну структуру - таблицю сторінок, у якій встановлюється відповідність між номерами віртуальних і фізичних сторінок для сторінок, завантажених в оперативну пам'ять, або робиться відмітка про те, що віртуальна сторінка вивантажена на диск. Крім того, у таблиці сторінок міститься керуюча інформація, така як ознака модифікації сторінки, ознака невигружаемості (вивантаження деяких сторінок може бути заборонена), ознака звертання до сторінки (використовується для підрахунку числа звернень за певний період часу) та інші дані, формовані і використовувані механізмом віртуальної пам'яті.
При активізації чергового процесу в спеціальний регістр процесора завантажується адреса таблиці сторінок даного процесу.
При кожному зверненні до пам'яті відбувається читання з таблиці сторінок інформації про віртуальну сторінку, до якої відбулося звертання. Якщо дана віртуальна сторінка знаходиться в оперативній пам'яті, то виконується перетворення ВА у фізичну. Якщо ж потрібна віртуальна сторінка в даний момент вивантажена на диск, то відбувається так зване сторінкове переривання. Виконується процес переводиться в стан очікування, і активізується інший процес з черги готових. Паралельно програма обробки сторінкового переривання знаходить на диску необхідну віртуальну сторінку і намагається завантажити її в оперативну пам'ять. Якщо в пам'яті є вільна фізична сторінка, то завантаження виконується негайно, якщо ж вільних сторінок немає, то вирішується питання, яку сторінку слід вивантажити з оперативної пам'яті.
У даній ситуації може бути використано багато різних критеріїв вибору, найбільш популярні з них наступні:
- найдовше не використовувалася сторінка,
- перша-ліпша сторінка,
- сторінка, до якої останнім часом було найменше звернень.
У деяких системах використовується поняття робочого безлічі сторінок. Робоча безліч визначається для кожного процесу і являє собою перелік найбільш часто використовуваних сторінок, які повинні постійно перебувати в оперативній пам'яті і тому не підлягають вивантаженню.
Після того, як обрана сторінка, яка має залишити оперативну пам'ять, аналізується її ознака модифікації (з таблиці сторінок). Якщо виштовхується сторінка з моменту завантаження була модифікована, то її нова версія повинна бути переписана на диск. Якщо ні, то вона може бути просто знищена, тобто відповідна фізична сторінка оголошується вільною.
Розглянемо механізм перетворення віртуальної адреси у фізичний при сторінковій організації пам'яті (малюнок 2.13).
Віртуальний адресу при сторінковому розподілі може бути представлений у вигляді пари (p, s), де p - номер віртуальної сторінки процесу (нумерація сторінок починається з 0), а s - зсув у межах віртуальної сторінки. Враховуючи, що розмір сторінки дорівнює 2 у ступені до, зсув s може бути отримано простим відділенням k молодших розрядів в двійковій запису віртуального адреси. Решта старші розряди представляють собою двійковий запис номера сторінки p.
При кожному зверненні до оперативної пам'яті апаратними засобами виконуються наступні дії:
на підставі початкової адреси таблиці сторінок (вміст регістра адреси таблиці сторінок), номера віртуальної сторінки (старші розряди ВА) і довжини запису в таблиці сторінок (системна константа) визначається адресу потрібного запису в таблиці, з цього запису витягається номер фізичної сторінки, до номера фізичної сторінки приєднується зсув (молодші розряди віртуальної адреси). Використання в пункті (3) того факту, що розмір сторінки дорівнює ступеню 2, дозволяє застосувати операцію конкатенації (приєднання) замість більш тривалої операції додавання, що зменшує час отримання фізичної адреси, а значить підвищує продуктивність комп'ютера.
На продуктивність системи зі сторінковою організацією пам'яті впливають тимчасові витрати, пов'язані з обробкою сторінкових переривань і перетворенням ВА у фізичну. При часто виникаючих сторінкових перериваннях система може витрачати велику частину часу даремно, на свопінг сторінок. Щоб зменшити частоту сторінкових переривань, варто було б збільшувати розмір сторінки. Крім того, збільшення розміру сторінки зменшує розмір таблиці сторінок, а значить зменшує витрати пам'яті. З іншого боку, якщо сторінка велика, значить велика і фіктивна область в останній віртуальній сторінці кожної програми. У середньому на кожній програмі губиться половина обсягу сторінки, що в сумі при великій сторінці може скласти істотну величину. Час перетворення ВА у фізичну у значній мірі визначається часом доступу до таблиці сторінок. У зв'язку з цим таблицю сторінок прагнуть розміщати в "швидких" запам'ятовуючих пристроях. Це може бути, наприклад, набір спеціальних регістрів чи пам'ять, що використовує для зменшення часу доступу асоціативний пошук і кешування даних.
Сторінкове розподіл пам'яті може бути реалізований в спрощеному варіанті, без вивантаження сторінок на диск. У цьому випадку всі віртуальні сторінки всіх процесів постійно знаходяться в оперативній пам'яті. Такий варіант сторінкової організації хоча і не надає користувачеві віртуальної пам'яті, але майже виключає фрагментацію за рахунок того, що програма може завантажуватися в несуміжні області, а також того, що при завантаженні віртуальних сторінок ніколи не утвориться залишків.
Сегментний розподіл
При сторінковій організації ВАП процесу поділяється механічно на рівні частини. Це не дозволяє диференціювати способи доступу до різних частин програми (сегментам), а це властивість часто буває дуже корисним. Наприклад, можна заборонити звертатися з операціями запису і читання в кодовий сегмент програми, а для сегмента даних дозволити тільки читання. Крім того, розбивка програми на "осмислені" частини робить принципово можливим поділ одного сегмента декількома процесами. Наприклад, якщо два процеси використовують одну і ту саму математичну підпрограму, то в оперативну пам'ять може бути завантажена тільки одна копія цієї підпрограми.
Розглянемо, яким чином сегментний розподіл пам'яті реалізує ці можливості. Віртуальний адресний простір процесу поділяється на сегменти, розмір яких визначається програмістом з урахуванням значення міститься в них. Окремий сегмент може являти собою підпрограму, масив даних і т.п. Іноді сегментація програми виконується по замовчуванню компілятором.
При завантаженні процесу частина сегментів міститься в ОП (при цьому для кожного з цих сегментів ОС підшукує придатний ділянку вільної пам'яті), а частина сегментів розміщається в дискової пам'яті. Сегменти однієї програми можуть займати в ОП несуміжні ділянки. Під час завантаження система створює таблицю сегментів процесу (аналогічну таблиці сторінок), в якій для кожного сегмента вказується початкова фізична адреса сегмента в оперативній пам'яті, розмір сегмента, правила доступу, ознака модифікації, ознака звертання до даного сегмента за останній інтервал часу і деяка інша інформація . Якщо віртуальні адресні простори кількох процесів включають той самий сегмент, то в таблицях сегментів цих процесів робляться посилання на один і той же ділянка оперативної пам'яті, в який даний сегмент завантажується в єдиному екземплярі.
Система із сегментною організацією функціонує аналогічно системі зі сторінкової організацією: час від часу відбуваються переривання, пов'язані з відсутністю потрібних сегментів у пам'яті, при необхідності звільнення пам'яті деякі сегменти вивантажуються, при кожному зверненні до оперативної пам'яті виконується перетворення ВА у фізичну. Крім того, при зверненні до пам'яті перевіряється, чи дозволений доступ необхідного типу до даного сегмента.
Віртуальний адресу при сегментної організації пам'яті може бути представлений парою (g, s), де g - номер сегмента, а s - зсув у сегменті. Фізична адреса виходить шляхом додавання початкової фізичної адреси сегмента, знайденого в таблиці сегментів за номером g, і зсуву s.
Недоліком даного методу розподілу пам'яті є фрагментація на рівні сегментів і більш повільне в порівнянні з сторінкової організацією перетворення адреси.
Сторінково-сегментний розподіл
Як видно з назви, даний метод являє собою комбінацію сторінкового і сегментного розподілу пам'яті і, внаслідок цього, поєднує в собі переваги обох підходів. Віртуальний простір процесу поділяється на сегменти, а кожен сегмент у свою чергу ділиться на віртуальні сторінки, що нумеруються в межах сегмента. Оперативна пам'ять поділяється на фізичні сторінки. Завантаження процесу виконується операційною системою посторінково, при цьому частина сторінок розміщується в оперативній пам'яті, а частина на диску. Для кожного сегмента створюється своя таблиця сторінок, структура якої повністю збігається зі структурою таблиці сторінок, використовуваної при сторінковому розподілі. Для кожного процесу створюється таблиця сегментів, у якій вказуються адреси таблиць сторінок для всіх сегментів даного процесу. Адреса таблиці сегментів завантажується в спеціальний регістр процесора, коли активізується відповідний процес.
Свопінг
Різновидом віртуальної пам'яті є свопінг.
Для завантаження процесора на 90% інколи достатньо всього трьох задач. Однак для того, щоб забезпечити таку ж завантаження інтерактивними завданнями, які виконують інтенсивний ввод-вивід, будуть потрібні десятки таких завдань. Необхідною умовою для виконання задачі є завантаження її в оперативну пам'ять, обсяг якої обмежений. У цих умовах був запропонований метод організації обчислювального процесу, званий свопінгу. Відповідно до цього методу деякі процеси (звичайно знаходяться в стані очікування) тимчасово вивантажуються на диск. Планувальник операційної системи не виключає їх зі свого розгляду, і при настанні умов активізації деякого процесу, що знаходиться в області свопінгу на диску, цей процес переміщається в оперативну пам'ять. Якщо вільного місця в оперативній пам'яті не вистачає, то вивантажується інший процес.
При свопінгу, на відміну від розглянутих раніше методів реалізації віртуальної пам'яті, процес переміщається між пам'яттю і диском цілком, тобто протягом деякого часу процес може повністю бути відсутнім в оперативній пам'яті. Існують різні алгоритми вибору процесів на завантаження і вивантаження, а також різні способи виділення оперативної і дискової пам'яті завантажуваного процесу.
--Зеленський Вадим 15:13, 8 січня 2012 (EET)