Самостоятельная работа по дисциплине: "Операционные системы и среды"
Тема: Основные команды для работы с памятью (оперативной) в 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: Анализ общей памяти
- Выполните команду:bash— Объясните, что означают столбцы:
free -h
total
,used
,free
,shared
,buff/cache
,available
. - Выполните:bash— Найдите строки:
cat /proc/meminfo
MemTotal
,MemFree
,Cached
,SwapTotal
,SwapFree
. Что они означают?
Задание 2: Мониторинг процессов
- Запустите:bash— Найдите процессы с наибольшим потреблением памяти (%MEM). — Какой процесс использует больше всего памяти? Запишите его PID и имя.
top
- Выйдите из
top
(нажмитеq
) и выполните:bash— Сравните результаты сps aux --sort=-%mem | head -10
top
.
Задание 3: Карта памяти процесса
- Найдите PID любого запущенного процесса (например,
bash
):bashps aux \| grep bash
- Выполните:bash— Проанализируйте вывод: какие области памяти используются (текст, куча, стек, mmap)? Какие адреса и размеры?
pmap <PID>
Задание 4: Виртуальная память и своп
- Выполните:bash— Объясните значение столбцов
vmstat 1 5
si
(swap in) иso
(swap out). Что происходит, если они больше 0? - Проверьте наличие swap:bash
swapon --show
Задание 5: Дополнительно (по желанию)
- Установите
htop
(если не установлен):bashsudo apt-get install htop
- Запустите
htop
и найдите:- Процессы с высоким потреблением памяти.
- Информацию о нагрузке на CPU и использование swap.
Вопросы для самопроверки
- Чем отличается физическая память от виртуальной?
- Как работает страничная организация памяти?
- Что такое TLB и зачем он нужен?
- Какой механизм позволяет процессу использовать больше памяти, чем есть в системе?
- Что означает "отображение файла в память" и какие преимущества это даёт?
- Почему в
free
строкаavailable
может отличаться отfree
?
Форма отчёта
Подготовьте документ (в формате .docx
или .pdf
), содержащий:
- Краткое резюме по теории (1–2 страницы).
- Результаты выполнения всех заданий (вывод команд и ваши пояснения).
- Ответы на вопросы для самопроверки.
- Вывод: что вы узнали о работе памяти в Linux.
Рекомендуемая литература:
- Э. Таненбаум — Современные операционные системы.
- Д. Стивенс, С. Рохли — UNIX. Профессиональное программирование.
- Официальная документация по
man free
,man pmap
,man vmstat
.
✅ Выполнив эту работу, вы получите практическое понимание управления памятью в Linux и углубите знания по архитектуре виртуальной памяти.