Віртуальний адресний простір () — це область неперервних комірок віртуальної пам'яті, які називаються віртуальними адресами, яку операційна система надає процесу для виконання інструкцій і зберігання даних та яку вона відображає на адресний простір фізичних адрес в апаратній пам'яті комп'ютера. Діапазон віртуальних адрес зазвичай починається з низької адреси й може простягатися до найвищої адреси, дозволеної архітектурою набору інструкцій комп'ютера та підтримуваної реалізацією розміру вказівника операційної системи, що може становити 4 байти для 32-бітових або 8 байтів для 64-бітових версій ОС. Це забезпечує низку переваг, зокрема безпеку завдяки ізоляції процесів, за умови, що кожному процесу надається окремий адресний простір.
Приклад
У наведеному нижче описі використано термінологію, специфічну для операційної системи Windows NT, але наведені поняття застосовні й до інших операційних систем із віртуальною пам'яттю.
Коли новий застосунок виконується в 32-бітовій ОС, процес має VAS розміром : кожна з адрес пам'яті (від 0 до 2 − 1) у цьому просторі може мати однобайтове значення. Спочатку жодна з них не має значення ( позначає відсутність значення). Використання або встановлення значень у такому VAS спричинило б помилку сторінки.
Потім виконуваний файл застосунку відображається у VAS. Адреси у VAS процесу відображаються на байти у .EXE-файлі. ОС керує цим відображенням:
Символ позначає значення з байтів у відображеному файлі. Потім відображаються необхідні DLL-файли (це включає користувацькі бібліотеки на додаток до системних бібліотек, таких як і ):
Після цього процес починає виконувати байти в EXE-файлі. Однак єдиний спосіб, яким процес може використовувати або встановлювати значення у своєму VAS, — попросити ОС відобразити їх на байти з файлу. Поширеним способом використання пам'яті VAS у такий спосіб є її відображення на файл підкачки. Файл підкачки є одним файлом, але кілька різних наборів неперервних байтів можуть бути відображені у VAS:
А різні частини файлу підкачки можуть відображатися у VAS різних процесів:
У Microsoft Windows 32-бітовій версії за замовчуванням лише надаються процесам для власного використання. Інші використовуються операційною системою. У пізніших 32-бітових версіях Microsoft Windows можна розширити адресний простір віртуальної пам'яті користувацького режиму до , залишивши лише для віртуального адресного простору режиму ядра, позначивши програми як та увімкнувши перемикач у файлі .
У 64-бітовій версії Microsoft Windows для процесу, який виконує файл, скомпонований із , операційна система штучно обмежує частину віртуального адресного простору процесу, призначену для користувацького режиму, до 2 ГіБ. Це стосується як 32-бітових, так і 64-бітових виконуваних файлів. Процеси, які виконують файли, скомпоновані з параметром , що є типовим для 64-бітового Visual Studio 2010 і пізніших версій, мають доступ до понад віртуального адресного простору: до для 32-бітових виконуваних файлів, до для 64-бітових виконуваних файлів у Windows до Windows 8 включно та до для 64-бітових виконуваних файлів у Windows 8.1 і пізніших версіях.
Виділення пам'яті за допомогою C-функції malloc встановлює файл підкачки як резервне сховище для будь-якого нового віртуального адресного простору. Однак процес також може явно відобразити байти файлу.
Linux
Для 32-бітових процесорів x86 Linux дозволяє по-різному розділяти адресні діапазони користувача та ядра: 3G/1G user/kernel (за замовчуванням), 1G/3G user/kernel або 2G/2G user/kernel.
Примітки