Керування пам'яттю в Unix

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Перші реалізації системи UNIX (до сьомої версії) виконувались на машині PDP-11 з 16-розрядною архітектурою й адресним простором, рівним 64 кілобайт. Деякі моделі підтримували окремий адресний простір для розміщення інструкцій і даних, однак у сукупності адресний простір довільного процесу не міг перевищувати 128 Кбайт. Це обмеження призвело до розвитку різних технологій програмних оверлеїв. Механізми управління пам'яттю в ранніх версіях UNIX обмежувалися можливостями підкачки сторінок (англ. swapping). Процеси завантажувались в оперативну пам'ять повністю один за одним. У певний момент часу у фізичній пам'яті машини могло поміститися невелике число процесів, а система була для них сумісно використовуваним ресурсом. Якщо необхідно було виконати інший процес, то один із існуючих процесів повинний був бути вивантаженим з пам'яті. Такий процес копіювався в заздалегідь виділену область для підкачки сторінок (swapping partition). Дисковий простір для підкачки сторінок (swap space) виділявся для кожного процесу на стадії його створення, що гарантувало доступність області підкачки при необхідності її використання.

Технологія завантаження сторінок за запитом (demand paging) з'явилася в системі UNIX після створення VAX-11/780 у 1978 році. Ця машина мала 32-розрядну архітектуру, 4-гігабайтний адресний простір і апаратну підтримку згаданої технології, тобто операційна система 3BSD стала першою реалізацією UNIX, яка її підтримувала. А до середини 80-х років усі наявні тоді версії UNIX вже забезпечували завантаження сторінок за запитом як основну методику керування пам'яттю, технологія підкачки сторінок ж відійшла на другий план.

У системах завантаження сторінок за запитом пам'ять і адресний простір процесу поділені на сторінки фіксованого розміру, що містяться в пам'яті або вивантажуються за мірою необхідності. Сторінку фізичної пам'яті часто називають сторінковим фреймом (page frame) або фізичною сторінкою (physical page). В один момент часу можуть виконуватися одразу кілька процесів, при цьому у фізичній пам'яті розташовується лише деяка частина сторінок кожного з них. Кожна виконувана програма вважає себе єдиною в системі. Програмні адреси віртуальні і розділяються машиною на номер сторінки і зсув на цій сторінці. Апаратна частина разом з операційною системою виконує перетворення номера віртуальної сторінки в номер фізичного сторінкового фрейму і потім звертається до відповідної комірки пам'яті. Якщо необхідної сторінки немає в оперативній пам'яті, її необхідно туди завантажити. В ідеальному випадку жодна зі сторінок не може бути розміщеною в пам'яті доти, поки вона не стане потрібною (тобто поки на цю сторінку не буде зроблене посилання). Більшість сучасних систем UNIX роблять попередні розміщення деякої кількості сторінок у пам'яті (anticipatory paging), завантажуючи ті сторінки, що на думку системи незабаром будуть викликані.

Схему завантаження сторінок за запитом можна використовувати як разом з технологією підкачки сторінок, так і як її заміну. Деякі її переваги:

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

Див. також[ред. | ред. код]