Віртуальна пам'ять

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

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

Адреси, до яких буде звертатися програма, ми будемо називати віртуальним адресним простором, а реальні адреси пам’яті – фізичними адресами. Віртуальний адресний простір і фізичні адреси розбиваються на ряд сторінок рівного розміру, зазвичай від 512 байт до 64 Кбайт, а іноді до 4 Мбайт. На Рис 8.12 показані один з можливих варіантів розподілення перших 64 Кбайт віртуального простору і фізичних адрес на сторінки по 4 Кбайт.

 

 

 

 

Рис.8.12. Перші 64 Кбайт віртуальногоьадресного простору розділені на 16 сторінок по4 Кбайта кожна (а), 32 байт основної памяти розділені на 8 сторінкових кадрів по 4 Кбайта кожний (б).

 

Віртуальну пам'ять, зображену на Рис 3.9 можна реалізувати через таблицю сторінок. Тут ми для спрощення показали тільки 16 елементів віртуального простору і 8 елементів фізичних адресів. Кожний комп’ютер з віртуальною пам’яттю має пристрій для відображення віртуальних адресів на фізичні. Такий пристрій називається диспетчером пам’яті. Припустимо, що нашому прикладі диспетчер відображує 32-розрядну віртуальну адресу (вхідний регістр) на 15-розрядну фізичну адресу (вихідний регістр – 3 розряди сторінкового кадру плюс 12 розрядів для відображення адреси усередині фізичної сторінки) (Рис8.13)

 

Рис.8.13.Формування адреси основної пам’яти з адреси віртуальної пам’яти

Спочатку диспетчер пам’яті перевіряє чи знаходиться потрібна сторінка в поточний момент часу в пам’яті (біт присутності). Далі з вибраного елемента таблиці значення сторінкового кадру (в нашому випадку 110) копіюється в старші розряди вихідного регістра. Паралельно молодші 12 розрядів копіюються в молодші розряди вихідного регістра. Потім одержаний 15-розрядний адрес відправляється в оперативну пам'ять для пошуку.

В реальній ситуації одночасно зразу декілька сторінок віртуальної пам’яті відображається на фізичні сторінкові кадри, як це показано на Рис.8.14.

 

 

Рис.8.14