2.4. Память как иллюзия: виртуальная память
2.4. Память как иллюзия: виртуальная память
Опубликовано: 11.04.2026
Память как иллюзия: виртуальная память
Почему каждая программа думает, что одна в системе — страницы, подкачка и почему нехватка ОЗУ убивает скорость
Откройте диспетчер задач прямо сейчас. В среднем современный компьютер под Windows держит одновременно 80–150 процессов. Браузер с двенадцатью вкладками. Антивирус. Мессенджер. Музыкальный плеер. Служба обновлений. Каждый из них работает так, будто он единственный хозяин оперативной памяти. Каждый обращается к «своим» адресам, не зная ни о каких соседях. При этом ОЗУ в компьютере - одна, физическая, конечная. Как так получается? Всё дело в одном из самых элегантных трюков, придуманных в истории операционных систем: в виртуальной памяти.
🏠 Задача: тысяча жильцов, один дом
Вернёмся к аналогии из статьи 2.3 - к звукорежиссёру, который переключается между микрофонами так быстро, что каждый певец уверен: инженер следит именно за ним. Это иллюзия внимания. Теперь добавьте иллюзию пространства: каждый певец ещё и убеждён, что вся сцена принадлежит только ему. Именно это происходит с памятью. Представьте многоквартирный дом, где в каждой квартире - своя нумерация комнат, начинающаяся с единицы. Жилец квартиры А называет свою спальню «комната 1» - и жилец квартиры Б тоже. Это не путаница: каждый живёт в своём изолированном пространстве и не знает о соседях.
Именно так работает виртуальная память. Каждый процесс получает собственное виртуальное адресное пространство - диапазон адресов, который он считает своим. На 64-битной системе этот диапазон формально огромен: до 128 терабайт на процесс. Реальной памяти в компьютере - скажем, 16 гигабайт. Операционная система в роли управляющего домом переводит «квартирные номера» процессов в реальные физические адреса ОЗУ - и каждый процесс об этой трансляции даже не подозревает.
📄 Страницы: память нарезана кусочками
Виртуальная память не работает с отдельными байтами — это было бы слишком медленно. Вместо этого и виртуальное пространство каждого процесса, и физическая оперативная память нарезаны на одинаковые кусочки - страницы. Стандартный размер страницы - 4 килобайта, хотя современные процессоры умеют работать и с «огромными страницами» по 2 МБ или 1 ГБ для специальных задач.
Представьте книгу и каталожный ящик. Книга - виртуальное пространство процесса, пронумерованное по страницам. Каталожный ящик - физическая оперативная память, тоже разбитая на ячейки того же размера. Между ними есть таблица страниц — список соответствий: «страница 5 книги лежит в ячейке 312 каталога». Именно с этим списком работает процессор при каждом обращении к памяти.
Трансляция адреса - дело микросекунд. В процессоре есть специальный блок - MMU (Memory Management Unit — блок управления памятью). Он перехватывает каждый запрос к памяти от процессора, смотрит в таблицу страниц и подставляет реальный физический адрес. Программа этого не видит - она работает только со своими виртуальными адресами.
🛡️ Изоляция: почему браузер не читает память мессенджера
У каждого процесса - своя таблица страниц. Виртуальный адрес 0x00400000 в браузере указывает на одну физическую ячейку памяти, а тот же виртуальный адрес в мессенджере - на совершенно другую. Они никогда не пересекаются, если ОС этого не разрешит явно.
Если браузер попытается прочитать виртуальный адрес, которого нет в его таблице страниц, - MMU сгенерирует исключение. ОС поймает его и, скорее всего, завершит процесс с ошибкой «нарушение доступа» (в Windows - Access Violation, в Linux - Segmentation Fault). Это не баг операционной системы, а защита: программа вышла за пределы отведённого ей пространства.
Именно эта изоляция позволяет зависшему браузеру не ронять всю систему. Его память - его дело. Остальные процессы её не видят и не затронут.
| Ситуация | Что происходит | Результат |
|---|---|---|
| Процесс обращается к своей странице в ОЗУ | MMU быстро переводит адрес через TLB или таблицу страниц | Данные получены, всё хорошо ✅ |
| Процесс обращается к чужому адресу | MMU не находит страницу в таблице процесса | Исключение → ОС завершает процесс ❌ |
| Процесс обращается к странице, которой нет в ОЗУ | MMU генерирует «промах страницы» (page fault) | ОС загружает страницу из подкачки 🔄 |
| Два процесса читают одну DLL/библиотеку | ОС отображает одни физические страницы в оба виртуальных пространства | Экономия памяти, данные не дублируются ✅ |
💾 Файл подкачки: когда ОЗУ не хватает
Именно здесь начинается главная сложность - и главная боль производительности. Виртуальных страниц у всех процессов вместе может быть куда больше, чем ячеек в физической ОЗУ. Что тогда делать? Операционная система применяет старый трюк: прячет часть страниц на диск.
Этот резервный склад называется файлом подкачки (в Windows - pagefile.sys, в Linux - swap-раздел или swap-файл). Когда физическая память заканчивается, ОС берёт страницы, к которым давно никто не обращался, и тихо сохраняет их на диск. В таблице страниц помечает: «эта страница сейчас не в ОЗУ». Место в ОЗУ освобождается для более нужных данных.
Процесс об этом не знает. Когда ему понадобится «выселенная» страница, он обратится к ней по виртуальному адресу как ни в чём не бывало. MMU увидит, что страницы в ОЗУ нет, и генерирует событие page fault - «промах страницы». ОС перехватывает его, загружает страницу с диска обратно в ОЗУ (при необходимости выселяя другую), обновляет таблицу страниц - и возвращает управление процессу. Тот продолжает работу, как будто ничего не произошло.
Как Windows управляет pagefile.sys
Windows создаёт pagefile.sys в корне системного диска. По умолчанию его размер управляется автоматически - обычно от 1× до 3× объёма ОЗУ. Многие советуют отключить файл подкачки, если памяти много. Это рискованно: некоторые приложения проверяют наличие подкачки при запуске, а при внезапном пике потребления памяти система без pagefile.sys просто завершит процессы без предупреждения вместо того, чтобы замедлиться. Ещё один нюанс: интенсивный и постоянный свопинг на бюджетный SSD постепенно расходует ресурс его ячеек - если памяти хронически не хватает, это аргумент в пользу апгрейда ОЗУ, а не терпения.
Swap в Linux
Linux использует отдельный раздел диска (swap partition) или файл (swapfile). Поведением управляет параметр swappiness — от 0 до 100. Значение 60 (по умолчанию) означает, что ОС начнёт использовать swap, когда физическая память занята примерно на 40%. На десктопах часто ставят swappiness 10–15, чтобы система дольше держалась на ОЗУ.
🍎 Unified Memory: когда CPU и GPU делят один пул
В обычном ноутбуке память разделена: у процессора - своя оперативная память, у видеокарты - своя видеопамять (VRAM). Когда нужно обработать изображение или видео, данные копируются из ОЗУ в VRAM и обратно. Каждое такое копирование - задержка и дополнительный расход энергии.
Apple Silicon (чипы серии M) устроен иначе: CPU, GPU и нейронный ускоритель работают с единым пулом памяти - Unified Memory Architecture (UMA). Физически это одна микросхема памяти с очень широкой шиной, к которой все блоки чипа обращаются напрямую. Копирование между «оперативкой» и «видеопамятью» просто исчезает как понятие.
Для виртуальной памяти принцип трансляции страниц работает точно так же, как описано выше. Разница - в том, что все компоненты SoC используют одни и те же физические страницы. GPU не держит отдельную таблицу страниц с копиями данных - он обращается к тем же адресам, что и CPU.
Обратная сторона: объём Unified Memory фиксирован на этапе производства и не поддаётся апгрейду - в отличие от ноутбука со слотами SO-DIMM. Выбирая конфигурацию, нужно сразу закладывать запас.
📊 Сколько памяти нужно на самом деле
Виртуальная память позволяет запустить больше программ, чем физически помещается в ОЗУ, - но комфортная работа определяется именно физической памятью. Подкачка - страховочная сетка, а не замена ОЗУ.
| Объём ОЗУ | Что реально работает комфортно | Когда начинается подкачка |
|---|---|---|
| 4 ГБ | ОС + один браузер (3–5 вкладок) + текстовый редактор | При открытии второй программы |
| 8 ГБ | Браузер (10–15 вкладок) + офис + музыка + мессенджеры | При тяжёлых сайтах или нескольких IDE |
| 16 ГБ | Разработка, видеомонтаж Full HD, игры AAA-класса | Редко, при очень тяжёлых задачах |
| 32 ГБ и больше | Виртуальные машины, 4K-видео, серверные задачи | Почти никогда при обычной работе |
🔍 Copy-on-Write: умная экономия
Есть ещё один трюк, который виртуальная память открывает для операционной системы, - Copy-on-Write (копирование при записи). Когда один процесс порождает дочерний (например, браузер открывает новую вкладку), было бы расточительно сразу копировать всю его память. Вместо этого ОС просто даёт обоим процессам одинаковые таблицы страниц - оба смотрят на одни и те же физические страницы. Пока никто ничего не изменяет - всё нормально.
Как только один из них пытается записать что-то на страницу - MMU генерирует исключение. ОС перехватывает его, создаёт копию именно этой страницы для пишущего процесса, обновляет его таблицу страниц - и только тогда разрешает запись. Страницы, в которые никто не пишет, так и остаются общими. Это экономит и память, и время запуска.
🧩 Полная картина: путь одного обращения к памяти
Соберём всё вместе. Процессор выполняет инструкцию, которой нужны данные по виртуальному адресу, скажем, 0x00401000.
Шаг 1. MMU смотрит в TLB - кэш последних трансляций. Если адрес там есть - мгновенно получает физический адрес. Конец, данные получены.
Шаг 2. Если в TLB нет - MMU идёт в таблицу страниц текущего процесса в ОЗУ. Находит соответствие, запоминает в TLB, возвращает физический адрес.
Шаг 3. Если страница помечена как «на диске» — MMU генерирует page fault. ОС перехватывает его, находит страницу в файле подкачки, находит свободное место в ОЗУ (или выселяет другую страницу), читает данные с диска, обновляет таблицу страниц. Процесс ждёт. Когда всё готово - возобновляется.
Шаг 4. Если виртуального адреса нет в таблице страниц процесса вообще - это чужой адрес. Page fault превращается в ошибку защиты. ОС завершает процесс.
| Событие | Задержка (примерно) | Где искать данные |
|---|---|---|
| Попадание в TLB → кэш процессора | ~1 нс | Кэш L1/L2 процессора |
| Попадание в TLB → ОЗУ | ~60–100 нс | Оперативная память |
| Промах TLB → таблица страниц в ОЗУ | ~200–500 нс | ОЗУ (несколько обращений) |
| Page fault → SSD | ~50–200 мкс | NVMe SSD |
| Page fault → HDD | ~5–15 мс | Жёсткий диск |
Цифры объясняют всё. Когда компьютер начинает активно «свопить» на жёсткий диск, каждый промах страницы стоит в 150 000 раз дороже нормального обращения к памяти. Система не зависла - она просто ждёт диска.
🛠️ Практика: что делать, когда памяти мало
Диспетчер задач - первый инструмент. В Windows вкладка «Производительность» → «Память» покажет, сколько ОЗУ занято и сколько используется подкачки. Если строка «В кэше» или «Зафиксировано» вплотную к общему объёму - памяти не хватает. В Linux команда free -h показывает то же самое.
Самое эффективное решение - добавить ОЗУ. Для ноутбуков, где память распаяна на плате, этот вариант закрыт, но для большинства настольных ПК и части ноутбуков апгрейд с 8 до 16 ГБ - самое заметное вложение в производительность после замены HDD на SSD.
Временно помогает закрыть ненужные вкладки браузера (каждая - отдельный процесс в Chrome и Edge с собственным куском памяти), отключить программы из автозапуска, перезапустить «разбухшие» приложения - браузер после недели работы потребляет памяти значительно больше, чем сразу после запуска.
Итог
Виртуальная память — это договор между операционной системой и каждой программой: «ты получаешь своё личное пространство адресов, делай с ним что хочешь, а я разберусь, где всё это реально хранить». Благодаря этому договору сотня процессов спокойно сосуществует на одной физической памяти, не мешая друг другу. Ошибка в одной программе не рушит другие. Памяти можно использовать «больше, чем есть» - ценой скорости.
За этой идеей стоит блок MMU в каждом современном процессоре, таблицы страниц в каждом процессе и файл подкачки на диске. Всё это работает незаметно - ровно до того момента, когда памяти начинает катастрофически не хватать и диск начинает громко трудиться там, где должна была работать тихая быстрая микросхема.
Следующая статья (2.5) - про то, как данные живут на диске после выключения компьютера: файловые системы NTFS, ext4 и APFS, фрагментация, почему удалённый файл можно восстановить и чем поведение SSD отличается от HDD на уровне хранения данных.
© 2008–2026 ANY.BY - ремонт компьютеров и ноутбуков в Барановичах. Использование материалов сайта возможно с письменного разрешения.
📍 Привезите технику в сервис ANY.BY — диагностика бесплатно, работаем без выходных.
🚗 Не можете приехать — вызовите мастера на дом.
🛒 Ноутбуки, компьютеры и комплектующие — магазин magaz.by.
📞 +375 (33) 323-70-00 (МТС) | +375 (29) 323-70-00 (A1)
✉️ Telegram | Viber
📞 Мы на связи для Вас:
| Пн–Пт | 10:00–19:00 |
| Суббота | 11:00–17:00 |
| Воскресенье | 12:00–16:00 |
Большое спасибо за качественно выполненную работу и демократичные цены
Ремонтировал здесь видеокарту. Мастер — профи, всё объяснил, показал. Рекомендую.
Великолепная работа мастера! Чётко определили проблемы, дали полную консультацию. Всё сделано оперативно, результатами довольны полностью.
Отличный сервис. Всё сделали быстро и качественно. Буду обращаться ещё.
Большое спасибо за помощь с настройкой программ. Все быстро и понятно. Очень довольна!
Хороший сервис, всё чётко и по делу. Спасибо!
Спасибо большое за лечение моего компьютера. Летает. Отличный сервис, индивидуальный подход к клиентам.
Огромная благодарность мастеру! Спас мой ноутбук с важными данными. Очень профессионально и оперативно.
Приносил видеокарту на обслуживание. Сделали все быстро и качественно. Температуры упали значительно. Рекомендую.
Ремонтировал блок питания. Сделали быстро и качественно. Спасибо!
Цикл статей ANY.BY - от транзистора до интернета.
Простым языком, без лишней теории.