• ВСХд

    ВСХд

    www.specarmatura.ru





Linux Kernel (Ядро линукса) (часть 1)


Структуры данных

Linux пользуется отдельной buddy-системой для каждой зоны. Таким образом, в архитектуре 80x86 имеется три buddy-системы. Первая обрабатывает страничные кадры, подходящие для DMA-устройств, использующих шину ISA, вторая — нормальные” страничные кадры, а третья — страничные кадры из верхней памяти. Каждая buddy-система опирается в своей работе на следующие структуры данных:
- массив шеш шар, обсуждавшийся ранее. Фактически, каждая зона имеет дело с подмножеством элементов массива шеш шар. Первый элемент подмножества и количество элементов в подмножестве задаются, соответственно,
ПОЛЯМИ zопе_гпеш_тар И size дескриптора ЗОНЫ;
- массив, СОСТОЯЩИЙ ИЗ 1 1 элементов типа f гее_агеа, по одному для каждого размера группы. Этот массив хранится в поле f гее агеа дескриптора зоны.

Рассмотрим к-Й элемент массива free_area в дескрипторе зоны, который идентифицирует свободные блоки размера . Поле free list этого элемента является головой двунаправленного циклического списка, в котором собраны дескрипторы страниц, ассоциированные со свободными блоками из страниц. Точнее говоря, этот список включает в себя дескрипторы страниц, описывающие начальные страничные кадры каждого блока из 2 свободных страничных кадров. Указатели на соседние элементы списка хранятся в поле iru дескриптора страницы5.

Кроме ГОЛОВЫ списка, элемент массива free area содержит поле nr_free, которое задает количество свободных блоков размером в 2к страниц. Естественно, если блоков по свободных страничных кадров не существует, поле nr free равно 0, а список пуст (оба указателя в поле free list указывают на само это поле).

Наконец, поле private дескриптора первой страницы блока 2к свободных страниц хранит порядок блока, т. е. число к. Благодаря этому полю, когда блок страниц освобождается, ядро может определить, свободен ли buddy- блок этого блока, и, если это так, слить оба блока в один, состоящий из 2к+х страниц. Следует заметить, что вплоть до версии Linux 2.6 ядро работало с десятью массивами флагов для кодирования этой информации.

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без проблем

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга для вас. А так как к книге прилагается компакт- диск с готовой к работе операционной системой Knoppix Live CD, то лишь достаточно вставить его в привод и перегрузить компьютер,...

Linux Kernel (Ядро линукса) (часть 1)

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

Linux Kernel (Ядро линукса) (часть 2)

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно неуклюже: получив системный вызов fork о, ядро в буквальном смысле дублировало все адресное пространство родителя и присваивало копию процессу-потомку. Такая операция...

Linux Kernel (Ядро линукса) (часть 3)

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