Сегментний розподіл
При сторінковій організації віртуальний адресний простір процесу ділиться механічно на рівні частини. Це не дозволяє диференціювати способи доступу до різних частин програми (сегментам). Крім того, розбиття програми на "осмислені" частини робить принципово можливим розділення одного сегменту декількома процесами. Наприклад, якщо два процеси використовують одну і ту ж математичну підпрограму, то в оперативну пам'ять може бути завантажена тільки одна копія цієї підпрограми.
Віртуальний адресний простір процесу ділиться на сегменти, розмір яких визначається програмістом з урахуванням смислового значення інформації, що міститься в них. Окремий сегмент може бути підпрограмою, масив даних і тому подібне. Іноді сегментація програми виконується за умовчанням компілятором.
Система з сегментною організацією функціонує аналогічно системі із сторінковою організацією: час від часу відбуваються переривання, пов'язані з відсутністю потрібних сегментів в пам'яті, при необхідності звільнення пам'яті деякі сегменти вивантажуються, при кожному зверненні до оперативної пам'яті виконується перетворення віртуальної адреси у фізичний. Крім того, при зверненні до пам'яті перевіряється, чи дозволений доступ необхідного типу до даного сегменту.
Віртуальна адреса при сегментній організації пам'яті може бути представлений парою (g, s), де g - номер сегменту, а s - зсув в сегменті. Фізична адреса виходить шляхом складання початкової фізичної адреси сегменту, знайденого в таблиці сегментів по номеру g, і зсуву s.
Недоліком даного методу розподілу пам'яті є фрагментація на рівні сегментів і повільніше в порівнянні із сторінковою організацією перетворення адреси.
Сторінково-сегментний розподіл
Як видно з назви, даний метод є комбінацією сторінкового і сегментного розподілу пам'яті і, внаслідок цього, поєднує в собі достоїнства обох підходів. Віртуальний простір процесу ділиться на сегменти, а кожен сегмент у свою чергу ділиться на віртуальні сторінки, які нумеруються в межах сегменту. Оперативна пам'ять ділиться на фізичні сторінки. Завантаження процесу виконується операційною системою посторінково, при цьому частина сторінок розміщується в оперативній пам'яті, а частина на диску. Для кожного сегменту створюється своя таблиця сторінок, структура якої повністю співпадає із структурою таблиці сторінок, використовуваної при сторінковому розподілі. Для кожного процесу створюється таблиця сегментів, в якій указуються адреси таблиць сторінок для всіх сегментів даного процесу. Адреса таблиці сегментів завантажується в спеціальний регістр процесора, коли активізується відповідний процес.
Різновидом віртуальної пам'яті є свопінг.
На рис. 1.2 показаний графік залежності коефіцієнта завантаження процесора залежно від числа одночасно виконуваних процесів і частки часу, що проводиться цими процесами в стані очікування введення-виводу.
З рисунка видно, що для завантаження процесора на 90% досить всього три рахункові завдання. Проте для того, щоб забезпечити таке ж завантаження інтерактивними завданнями, що виконують інтенсивне введення-виведення, буде потрібно десятки таких завдань. Необхідною умовою для виконання завдання є завантаження його в оперативну пам'ять, об'єм якої обмежений. У цих умовах був запропонований метод організації обчислювального процесу, званий свопінгом. Відповідно до цього методу деякі процеси (що зазвичай знаходяться в стані очікування) тимчасово вивантажуються на диск. Планувальник операційної системи не виключає їх зі свого розгляду, і при настанні умов активізації деякого процесу, що знаходиться в області свопінгу на диску, цей процес переміщається в оперативну пам'ять. Якщо вільного місця в оперативній пам'яті не вистачає, то вивантажується інший процес.
Рисунок 1.2- Залежність завантаження процесора від числа завдань і інтенсивності введення-виводу
При свопінгу, на відміну від розглянутих раніше методів реалізації віртуальної пам'яті, процес переміщається між пам'яттю і диском цілком, тобто протягом деякого часу процес може бути повністю відсутнім в оперативній пам'яті. Існують різні алгоритми вибору процесів на завантаження і вивантаження, а також різні способи виділення оперативній і дисковій пам'яті завантажуваному процесу.
