Skip to content

Самостоятельная работа по дисциплине: "Операционные системы и среды"
Тема: Основные команды для работы с памятью (оперативной) в GNU/Linux
Раздел: Организация оперативной памяти и виртуальной памяти в операционных системах


Блок теории

1. Физическая организация памяти компьютера

Оперативная память (RAM) — это энергозависимое устройство хранения данных, используемое процессором для временного хранения программ и данных. Физически память состоит из ячеек, каждая из которых имеет уникальный адрес. ОС управляет физической памятью, распределяя её между процессами.

2. Простейшие схемы управления памятью

  • Монопрограммирование: только одна программа работает в памяти.
  • Разделение памяти на фиксированные/динамические разделы: позволяет одновременно запускать несколько процессов, но приводит к фрагментации.

3. Страничная память

Память делится на страницы (фиксированный размер, обычно 4 Кбайт). Процесс делится на блоки такой же длины — страницы процесса. Страницы процесса могут размещаться в произвольных кадрах (фреймах) физической памяти. Преобразование виртуального адреса в физический осуществляется с помощью таблицы страниц.

4. Сегментная и сегментно-страничная организация памяти

  • Сегментная организация: память делится на логические сегменты (код, данные, стек). Каждый сегмент имеет базовый адрес и длину.
  • Сегментно-страничная организация: сочетает оба подхода — сегменты делятся на страницы, что позволяет эффективно управлять памятью и обеспечивать защиту.

5. Виртуальная память

Понятие виртуальной памяти позволяет процессу использовать больше памяти, чем физически доступно. Виртуальное адресное пространство процесса отображается на физическую память и файл подкачки (swap). Неиспользуемые страницы могут выгружаться на диск.

Архитектурные средства поддержки виртуальной памяти:

  • Механизм трансляции адресов (MMU — Memory Management Unit).
  • Биты в таблицах страниц: присутствие (present), доступ на чтение/запись, изменение (dirty), доступ (accessed).

6. Структура таблицы страниц

  • Таблица страниц — это массив, где каждый элемент (запись) содержит физический адрес кадра и управляющие биты.
  • При использовании многоуровневых таблиц (например, 2- или 4-уровневых) снижается объём памяти, необходимой для хранения таблиц.

7. Ассоциативная память (TLB — Translation Lookaside Buffer)

Специальный кэш в процессоре, хранящий недавно использованные пары "виртуальный адрес – физический адрес". Ускоряет трансляцию адресов.

8. Инвертированная таблица страниц

Используется в системах с большим объёмом виртуальной памяти. Вместо таблицы на каждый процесс — одна глобальная таблица, где каждая запись соответствует одному физическому кадру. Уменьшает объём памяти, но усложняет поиск.

9. Размер страницы

Стандартный размер — 4 Кбайт. Используются также большие страницы (Huge Pages, например 2 Мб или 1 Гб) для повышения производительности при работе с большими объёмами данных.

10. Отображение файлов в память (memory mapping)

Системный вызов mmap() позволяет отобразить файл прямо в виртуальную память процесса. Это упрощает работу с файлами и позволяет разделять память между процессами.

11. Потребление памяти процессом

Процесс использует:

  • Текст (код) — исполняемый код программы.
  • Данные — глобальные и статические переменные.
  • Куча (heap) — динамически выделяемая память (malloc, new).
  • Стек (stack) — локальные переменные и вызовы функций.

Основные команды GNU/Linux для анализа использования памяти

КомандаНазначение
freeОтображает объём используемой и свободной оперативной памяти и swap.
topИнтерактивный мониторинг процессов и потребления ресурсов (включая память).
htopУлучшенная версия top с цветным интерфейсом и возможностью прокрутки.
vmstatОтображает статистику по памяти, свопингу, процессам, CPU.
cat /proc/meminfoПоказывает детальную информацию о состоянии памяти.
ps aux --sort=-%memСписок процессов, отсортированных по потреблению памяти.
pmap <PID>Показывает карту памяти конкретного процесса (виртуальные адреса, размеры сегментов).
smemУтилита для анализа потребления памяти с учётом shared-памяти.
lscpuПоказывает параметры CPU, включая поддержку технологий виртуализации и TLB.
sudo dmesg | grep -i memoryПросмотр информации о памяти из системного лога.

Практическое задание (самостоятельная работа)

Цель: Изучить текущее состояние оперативной памяти, проанализировать потребление памяти процессами и понять принципы виртуальной памяти в Linux.

Задание 1: Анализ общей памяти

  1. Выполните команду:
    bash
    free -h
    — Объясните, что означают столбцы: total, used, free, shared, buff/cache, available.
  2. Выполните:
    bash
    cat /proc/meminfo
    — Найдите строки: MemTotal, MemFree, Cached, SwapTotal, SwapFree. Что они означают?

Задание 2: Мониторинг процессов

  1. Запустите:
    bash
    top
    — Найдите процессы с наибольшим потреблением памяти (%MEM). — Какой процесс использует больше всего памяти? Запишите его PID и имя.
  2. Выйдите из top (нажмите q) и выполните:
    bash
    ps aux --sort=-%mem | head -10
    — Сравните результаты с top.

Задание 3: Карта памяти процесса

  1. Найдите PID любого запущенного процесса (например, bash):
    bash
    ps aux \| grep bash
  2. Выполните:
    bash
    pmap <PID>
    — Проанализируйте вывод: какие области памяти используются (текст, куча, стек, mmap)? Какие адреса и размеры?

Задание 4: Виртуальная память и своп

  1. Выполните:
    bash
    vmstat 1 5
    — Объясните значение столбцов si (swap in) и so (swap out). Что происходит, если они больше 0?
  2. Проверьте наличие swap:
    bash
    swapon --show

Задание 5: Дополнительно (по желанию)

  1. Установите htop (если не установлен):
    bash
    sudo apt-get install htop
  2. Запустите htop и найдите:
    • Процессы с высоким потреблением памяти.
    • Информацию о нагрузке на CPU и использование swap.

Вопросы для самопроверки

  1. Чем отличается физическая память от виртуальной?
  2. Как работает страничная организация памяти?
  3. Что такое TLB и зачем он нужен?
  4. Какой механизм позволяет процессу использовать больше памяти, чем есть в системе?
  5. Что означает "отображение файла в память" и какие преимущества это даёт?
  6. Почему в free строка available может отличаться от free?

Форма отчёта

Подготовьте документ (в формате .docx или .pdf), содержащий:

  1. Краткое резюме по теории (1–2 страницы).
  2. Результаты выполнения всех заданий (вывод команд и ваши пояснения).
  3. Ответы на вопросы для самопроверки.
  4. Вывод: что вы узнали о работе памяти в Linux.

Рекомендуемая литература:

  1. Э. Таненбаум — Современные операционные системы.
  2. Д. Стивенс, С. Рохли — UNIX. Профессиональное программирование.
  3. Официальная документация по man free, man pmap, man vmstat.

Выполнив эту работу, вы получите практическое понимание управления памятью в Linux и углубите знания по архитектуре виртуальной памяти.

Контакты: bystrovno@basealt.ru