Керування пам'яттю в 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 гигабайтам; - первинне завантаження програми відбувається швидко, оскільки для початку роботи програми не потрібно цілком поміщати її в пам'ять комп'ютера; - одночасно в системі може бути завантажено відразу кілька програм, тому що у визначений момент часу лише невелика частина сторінок кожної з них повинна знаходитися в пам'яті; - переміщення окремих сторінок пам'яті набагато простіше для системи, ніж свопінг процесів або сегментів цілком.


Комп'ютер Це незавершена стаття про комп'ютери.
Ви можете допомогти проекту, виправивши або дописавши її.