Системное программирование С++ / Rust
Алексей Москаленко, C++ / Python / Rust / Linux / FinTech · 03.07
Виртуальная память в Linux
Объем оперативной памяти компьютера ограничен. Возникают ситуации, когда процесс запрашивает больше памяти, чем есть физически. Для выхода из такой ситуации придуман механизм виртуальной памяти
Виртуальная память (ВП) - это абстракция, которая позволяет использовать программам больше памяти, чем есть физически в системе, благодаря использованию специального дискового пространства (например, SWAP раздел жесткого диска)
В статье рассмотрен самый распространенный механизм виртуальной памяти - страничная виртуальная память
Задачи виртуальной памяти
1) Отображение виртуальных адресов в физические для расширения адресного пространства
2) Разграничение памяти между процессами (процесс не может "затереть" адреса другого процесса)
3) Минимизация фрагментации - ситуации, когда блок памяти свободен. но его размера не хватает для выделения на процесс, эта память будет неиспользованной
Страничная виртуальная память (СВП)
СВП - организация памяти в виде блоков одинакового размера. Физическая и виртуальная память делится на блоки одинакового размера (страницы). В оперативной памяти хранится специальная структура - таблица виртуальных страниц (содержит номера всех доступных и используемых страниц)
Виртуальный адрес состоит из 2 частей
1) Номер виртуальной страницы - индекс в таблице страниц
2) Смещение внутри страницы
В реальных системах используется многоуровневая таблица страниц для уменьшения размера таблицы в памяти
Рассмотрим алгоритм работы механизма виртуальной памяти
1 Процессор (CPU) обращается к виртуальному адресу
2 MMU (Memery Management Unit) - отвечает за преобразовани виртуального адреса в физический, первым делом пытается найти физическийадрес в специальном кеше (TLB), если находит, то возвращает физический адрес, иначе обращается к оперативной памяти (на схеме "Память") и возвращает результат в случае успеза
3 Если в оперативной памяти нет физического адреса, который ссответствует виртуальному, то происходит исключение PAGE FAULT
4 Обработчик исключения PAGE FAULT проверяет валидность адреса и определяет физический адрес для виртуального, актуализирует таблицу страниц
еще контент автора
Алексей Москаленко
C++ / Python / Rust / Linux / FinTech · 21.02
Алексей Москаленко
C++ / Python / Rust / Linux / FinTech · 06.02 · ред.
Системное программирование С++ / Rust
Алексей Москаленко, C++ / Python / Rust / Linux / FinTech · 19.07
Что выведет код на С++? Особенности работы ссылок
Системное программирование С++ / Rust
Алексей Москаленко, C++ / Python / Rust / Linux / FinTech · 03.07
Виртуальная память в Linux
Системное программирование С++ / Rust
Алексей Москаленко, C++ / Python / Rust / Linux / FinTech · 21.06
Dead lock
еще контент автора
Системное программирование С++ / Rust
Алексей Москаленко, C++ / Python / Rust / Linux / FinTech · 03.07
войдите, чтобы увидеть
и подписаться на интересных профи