Лабораторный практикум по курсу "Операционные системы"
list - страница может принадлежать многим спискам, и данное поле используется в
качестве головы списка. Например, выделенная страница памяти будет принадлежать
одному из трех циклически связанных списков, поддерживаемых структурой
address_space. Это clean_pages (страницы, в которые не производилась запись),
dirty_pages (страницы, в которые производилась запись) и locked_pages
(заблокированные страницы). Это поле также используется при создании списка свободных
страниц и в некоторых других случаях.
mapping - когда файлы или устройства отображаются в память, их inode (описатель
объекта файловой системы) ассоциируется со структурой
address_space. Данное поле
содержит указатель на эту структуру или структуру типа
swapper_space, если страница
анонимна, и для нее установлено отображение на диск.
index - это поле допускает двойное использование в зависимости от состояния страницы. В
первом случае, если страница является частью отображения файла в память, в поле хранится
смещение в файле; если страница является частью отображения раздела подкачки в память
(кэша раздела подкачки) - это будет смещением в пределах address_space для адресного
пространства раздела подкачки (
swapper_space). Во втором случае, если для какого-либо
конкретного процесса освобождается блок страниц, в поле будет хранится степень
освобождаемого блока (т.е. освобождается 2
index
страниц).
next_hash – для страниц, являющихся частью отображения файла в память, вычисляется
хэш-функция от номера inode и смещения в файле. Данное поле связывает вместе страницы,
которые разделяют то же самое значение хэш-функции.
count – число ссылок на страницу. Если число опускается до 0, страница может быть
освобождена. Любое большее значение означает, что страница используется одним или
более процессами или ядром, например, при ожидании завершения операции ввода-вывода.
flags - флаги, которые описывают статус страницы. Все они объявлены в <linux/mm.h>
и перечислены ниже в таблице. Существует набор макросов, выполняющих операции
проверки, сброса и установки битов.
lru – с точки зрения стратегии замещения, страницы, которые могут быть вытеснены,
присутствуют либо в списке
active_list, либо в списке inactive_list (объявлены в
page_alloc.c). Данное поле используется для организации связей в этих списках.
pprev_hash - дополнение к next_hash;
buffers - если страница содержит буферы устройства блочного типа, связанные с ней,
данное поле указывает на структуру типа
buffer_head. Страница, используемая
процессом, также может иметь связанную структуру
buffer_head, если она отображена в
пространство подкачки.
virtual - обычно только страницы из зоны ZONE_NORMAL могут быть непосредственно
отображены и использованы ядром. Для получения доступа к страницам зоны
ZONE_HIGHMEM используется демон kmap(), устанавливающий отображение страницы
верхней памяти в доступное ядру пространство адресов. Одновременно может быть
отображено только ограниченное постоянное число страниц верхней памяти. В этом случае
данное поле содержит виртуальный адрес отображенной
страницы (доступный процессору
непосредственно и, соответственно, ядру).
Определение типа
mem_map_t совпадает с типом struct page.
Таблица. Некоторые флаги состояния страницы
116 Учебно-исследовательская лаборатория «Информационные технологии»