Виртуальные адреса используются вне зависимости от объёма памяти, они используются для нескольких целей:
- Защита памяти одного приложения от вмешательства другого. Так как у каждого процесса своё виртуальное адресное пространство, процессы могут читать/писать только в память, которая была выделена им ОС.
- Для защиты памяти, используемой ОС, от пользовательских процессов. Работает аналогично первому пункту.
- Запуск программ, размер которых больше, чем доступный объём памяти. Мы можем грузить в память не все страницы программы, а когда исполнение доходит до отсутствующих, процессор выбрасывает исключение page fault, в таком случае часть ранее загруженных страниц можно выгрузить из памяти и загрузить новые по нужному виртуальному адресу.
- Также виртуальная адресация позволяет процессу использовать почти всё доступное адресное пространство. Так как страницы операционной системы отображаются в адресное пространство каждого процесса (для выполнения системных вызовов, обработки прерывний и т.п.), можно использовать для ОС очень близкие к концу виртуального пространства адреса, в таком случае остальные адреса будут доступны процессу. Например процессоры архитектуры x86-64 могут использовать до 2^48 или 2^52 байт памяти. Если поместить ядро, например в последние два гигабайта, то любому процессу будут доступны первые 2^48 - 2ГБ адресов, что более чем достаточно