Порівняння сегментної і сторінкової організації

Обидва розглянутих способу організації віртуальної пам'яті мають свої переваги і недоліки.

До переваг сегментної організації в літературі зазвичай відносять наступні.

· Легко можна вказати режим доступу до сегменту в залежності від сенсу його даних. Наприклад, сегмент коду програми зазвичай повинен бути доступний тільки для читання, а сегмент даних може бути доступний і для запису.

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

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

Для сучасних процесорів розрядність адреси становить 32 або навіть 64 біта, що знімає необхідність возитися з великою кількістю дрібних сегментів. При цьому на перший план виходять гідності сторінкової організації:

· Програміст не повинен взагалі думати про розбиття програми і її даних на частини обмеженого розміру (сегменти), в його розпорядженні єдиний простір віртуальних адрес;

· Виключається можливість фрагментації фізичної пам'яті і пов'язані з цим проблеми;

· Як правило, зменшується обмін даними з диском, оскільки в нього включаються тільки окремі сторінки, а не цілі сегменти.

Для порівняльної оцінки сегментної і сторінкової організації корисно також згадати історію розвитку версій Windows. Версія Windows 2.0 була орієнтована на процесор i286, який мав сегментну організацію пам'яті з 16-розрядним зсувом в сегменті. У ці роки фірми Intel і Microsoft активно захищали сегментну модель, підкреслюючи її достоїнства. Однак в Windows 3.0 були вже частково використані нові можливості процесора i386, а саме, сторінкова організація пам'яті. Оскільки ця версія і раніше була заснована на 16-розрядних адресах, використання сегментів залишалося необхідним, що призвело до складної сегментно-сторінкової моделі пам'яті. Зате перехід до 32-розрядним версіями Windows NT і Windows 95 супроводжувався фактичною відмовою від використання сегментного механізму на користь чисто сторінкової організації пам'яті. Формально ж тепер весь адресний простір користувача вкладається в один дуже великий сегмент розміром 4 Гб.

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

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