Управление памятью

Аналогично любой ОС, в Linux реализуется функция управления памятью. Она включает в себя
• Управление физической памятью
• Управление виртуальной памятью


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

Управление физической памятью заключается в распределении страниц и отдельных блоков памяти и их освобождении. За распределение страниц памяти отвечает менеджер основной физической памяти (primary physical memory manager) ядра Linux. В его функции входит
• Выделение/освобождение физических страниц
• Распределение областей физически непрерывных страниц по запросу

Учет доступных физических страниц осуществляется менеджером по собственному алгоритму, известному как принцип buddy-heap (смежных куч, куч близнецов). Его идея в том, что при освобождении двух смежных областей памяти, доступных для использования, происходит объединение этих областей в результате чего появляется новая область большего размера. При обработке запроса на выделение небольшого блока памяти, Страничный менеджер разделяет доступную свободную область памяти на две, меньшего размера. Системой ведутся списки свободных областей памяти, по размеру доступных областей. Наименьшей выделяемой областью памяти в Linux является физическая страница. На рис.9 показан процесс разделения памяти в buddy-heaps.


Рис. 9 Разделение памяти

Как правило, гораздо чаще требуются небольшие области памяти. Для обработки запросов произвольного размера ядро поддерживает функцию kmalloc, выделяющую память постранично, разделяя области на более мелкие. Ядро ведет учет страниц распределяемых с помощью функции kmalloc. Память, распределенная с помощью функции kmalloc , может быть освобождена лишь в явном виде. При недостатке памяти, эти области не могут быть использованы повторно при помощи kmalloc.


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

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

Менеджер виртуальной памяти Linux (Virtual Memory Manager, VMM) поддерживает два отдельных вида адресного пространства процесса:

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

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

Важной функцией виртуальной памяти является перемещение страниц. Linux использует технику замещения страниц (подкачки, paging) при которой отдельные страницы виртуальной памяти перемещаются между физической памятью и диском.

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

1. Тактический алгоритм. Используется для решения какие страницы должны быть записаны на диск. Также Linux использует многопроходный временной алгоритм. При таком подходе каждая страница имеет "возраст". Возраст изменяется по истечении определенного времени. В результате, страницы используемые чаще имеют большее значение "возраста" по сравнению с реже используемыми страницами. Редко используемые страницы могут быть перенесены на диск.

2. Механизм замещения, который действительно выполняет перенос страниц из памяти и обратно.

назад к оглавлению вперед

Rus. Open Source company, г. Саратов
ул. Орджоникидзе, 156, офис 203
тел: 8 (8452) 57-84-41
e-mail: info@rus_opensource.com

Главная | Обзоры | О разном
Карта сайта

Учебная литература:

Введение в Linux
Основы JAVA
Архивы

© 2013 opensourcerules.net