Виртуальная память в Linux

ТЕМА 7. РАБОТА С ОПЕРАЦИОННЫМИ СИСТЕМАМИ. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМЫ

Лекция 4. Обзор архитектуры и возможностей системы Linux.

План занятия:

1. Управление физической памятью в Linux.

2. Виртуальная память в Linux.

3. Исполнение и загрузка пользовательских программ в Linux.

4. Системы файлов Linux.

5. Ввод и вывод в Linux.

6. Взаимодействие процессов в Linux.

7. Структура сети в Linux.

8. Безопасность в Linux.

9. Развитие и использование Linux

 

Управление физической памятью в Linux

Система распределения физической памяти в Linux занимается размещением и освобождением страниц, групп страниц и небольших блоков памяти. Она имеет дополнительные механизмы для виртуальной памяти, отображаемой в адресное пространство исполняемых процессов.

Распределитель страниц размещает и освобождает физические страницы; он может также по запросу размещать группы смежных страниц.

Распределитель страниц Linux использует алгоритм buddy-heap (партнерской кучи)для слежения за доступными физическими страницами, принципы которого в следующем:

· Каждая область памяти, подлежащая распределению, образует пару с ее смежным "партнером".

· Когда обе области-партнера освобождаются, они сливаются и образуют смежную область вдвое большего размера.

· Если не существует малой области памяти, чтобы удовлетворить небольшой запрос на память, то область памяти большего размера расщепляется на две области-партнера для удовлетворения данного запроса.

Распределение памяти для ядра Linux возможно как статическое (драйвер резервирует статическую область памяти во время загрузки системы) или динамическое (с помощью распределителя страниц).

Расщепление памяти в куче изображено на рис.1.

Рис. 1.Расщепление памяти в куче в системе Linux.

Виртуальная память в Linux

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

Менеджер виртуальной памяти поддерживает две точки зрения на адресное пространство каждого процесса:

· Логическую– поддержка команд управления адресным пространством. Адресное пространство рассматривается как совокупность непересекающихся смежных областей.

· Физическую– с помощью таблицы страниц для каждого процесса.

Для управления виртуальной памятью используются:

· Файл откачки (backing store),описывающий, откуда берутся страницы для заданного региона; регионы обычно поддерживаются либо файлом, либо не поддерживаются вообще (память, обнуляемая по требованию)

· Реакция региона на запись (совместное использование страниц или копирование при записи - COW).

Ядро создает новое виртуальное адресное пространство:

· Когда процесс запускает новую программу системным вызовом exec;

· При создании нового процесса системным вызовом fork.

При исполнении новой программы процессу предоставляется новое, пустое адресное пространство; процедуры загрузки программ наполняют это адресное пространство регионами виртуальной памяти.

Создание нового процесса с помощью fork включает создание полной копии адресного пространства существующего процесса.

Ядро копирует дескрипторы доступа к виртуальной памяти родительского процесса, затем создает новый набор таблиц страниц для дочернего процесса.

Таблицы страниц процесса-родителя копируются непосредственно в таблицы страниц дочернего, причем счетчик ссылок на каждую страницу увеличивается.

После исполнения fork родительский и дочерний процесс используют одни и те же физические страницы в своих виртуальных адресных пространствах.

Система управления страницами откачивает страницы физической памяти на диск, если они требуются для какой-либо другой цели.

Система управления страницами делится на две части:

· Алгоритм откачки, который определяет, какие страницы и когда откачать на диск;

· Механизм подкачки фактически выполняет передачу и подкачивает данные обратно в физическую память, если требуется.

Ядро Linux резервирует постоянный, зависящий от архитектуры регион виртуального адресного пространства каждого процесса для его собственного внутреннего использования.

Эта область виртуальной памяти ядра содержит два региона:

· Статическую область, содержащую ссылки из таблицы страниц на каждую доступную физическую страницу памяти в системе, так что используется простая трансляция физического адреса в виртуальный при исполнении кода ядра.

· Остаток зарезервированной части не используется ни для какой другой цели; его элементы таблицы страниц могут быть модифицированы и указывать на любые страницы в памяти.