(продолжение предыдущего поста)
1. Введение.
→ Система управления памятью в Linux контролирует, как операционная система использует оперативную память (RAM), пространство подкачки (swap) и виртуальную память.
→ Ядро гарантирует, что каждый процесс получает необходимый объём памяти, сохраняя при этом стабильность и производительность системы.
→ В Linux используется система виртуальной памяти, которая предоставляет каждому процессу собственное изолированное адресное пространство.
2. Виртуальная память
→ Виртуальная память позволяет процессам работать так, будто у них есть доступ к большому непрерывному объёму памяти — даже если физическая оперативная память меньше.
→ Linux сопоставляет виртуальную память с физической с помощью таблиц страниц.
→ Обеспечивает:
→ Изоляцию между процессами;
→ Эффективное использование оперативной памяти;
→ Поддержку крупных приложений.
3. Страничная организация памяти (paging)
→ Память разделена на небольшие блоки фиксированного размера — страницы (обычно 4 КБ).
→ Ядро загружает страницы программы в оперативную память по мере необходимости.
→ Если оперативная память заполнена, неиспользованные страницы перемещаются в пространство подкачки.
→ Страничная организация повышает эффективность многозадачности.
4. Роль блока управления памятью (MMU, Memory Management Unit)
→ MMU — это аппаратный компонент, который преобразует виртуальные адреса в физические.
→ Сохраняет преобразования в кэше, называемом TLB (Translation Lookaside Buffer, буфер ассоциативной трансляции).
→ Быстродействие доступа к памяти зависит от эффективного использования MMU и TLB.
5. Распределение физической памяти
→ В Linux используются два основных распределителя памяти:
→ Система buddy (Buddy System) — выделяет большие непрерывные блоки памяти.
→ Распределитель slab (Slab Allocator) — выделяет память для объектов ядра (inodes, дескрипторы файлов).
→ Обеспечивает минимальную фрагментацию и более быстрое выделение памяти.
6. Пространство подкачки (swap)
→ Swap — это область на диске, используемая как буфер переполнения, когда физическая оперативная память заполнена.
→ Неактивные страницы перемещаются в swap.
→ Помогает системе работать стабильно, но работает значительно медленнее, чем оперативная память.
→ Команды:
→
swapon -s — просмотр информации о swap; →
free -h — проверка использования swap.7. Зоны памяти
→ Linux разделяет физическую память на зоны в зависимости от аппаратных ограничений:
→ ZONE_DMA — память, используемая для прямого доступа к памяти (DMA).
→ ZONE_NORMAL — обычная память, доступная ядру.
→ ZONE_HIGHMEM — верхняя память, не отображаемая напрямую ядром (в 32‑битных системах).
→ Помогает ядру распределять память в зависимости от архитектуры системы.
8. Кэширование и буферы
→ Linux использует свободную память для кэширования, чтобы повысить производительность.
→ Типы:
→ Page Cache — хранит недавно использованные файлы.
→ Buffer Cache — хранит метаданные для ускоренного доступа к диску.
→ Кэшированные данные автоматически освобождаются, когда программам требуется больше памяти.
9. OOM Killer (Out‑of‑Memory Killer, «убийца при нехватке памяти»)
→ Когда память и swap полностью использованы, Linux запускает OOM Killer.
→ Выбирает и завершает процессы, потребляющие много памяти, чтобы освободить оперативную память.
→ Предотвращает зависание системы.
10. Инструменты мониторинга памяти
→ Распространённые команды для проверки использования памяти:
→
free -h — обзор оперативной памяти и swap; →
top — использование памяти процессами в реальном времени; →
htop — интерактивный монитор памяти; →
vmstat — статистика виртуальной памяти; →
cat /proc/meminfo — подробная информация о памяти.11. Интерфейсы памяти в /proc
→ Linux предоставляет информацию о памяти через файловую систему proc:
→
/proc/meminfo — обзор памяти; →
/proc/<pid>/maps — структура памяти процесса; →
/proc/<pid>/smaps — детальное использование по сегментам памяти.