Віртуальні й фізичні адреси

Поняття «адреса пам'яті» може розглядатися з двох точок зору. З одного боку, при написанні будь-якої програми її автор або явно вказує, по яких адресах повинні розміщуватися змінні і команди (так буває при програмуванні на мові асемблера), або привласнення конкретних адрес довіряється системі програмування. Ті адреси пам'яті, які записані в програмі, прийнято називати віртуальними адресами.

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

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

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

Але тоді виникає питання, коли і яким чином повинен відбуватися перехід від віртуальних адрес до фізичних.

Є два принципово різних відповіді на це питання.

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

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


5.3. Розподіл пам'яті без використання віртуальних адрес