Книга: Разработка ядра Linux
Базисное дерево
Так как ядро должно проверять наличие страниц в страничном кэше перед тем, как запускать любую операцию страничного ввода-вывода, то этот поиск должен выполняться быстро. В противном случае затраты на поиск могут свести на нет все выгоды кэширования (по крайней мере, в случае незначительного количества удачных обращений в кэш, эти затраты времени будут сводить на нет все преимущества считывания данных из памяти по сравнению со считыванием напрямую с диска).
Как было показано в предыдущем разделе, поиск в страничном кэше выполняется на основании информации объекта address_space
и значения смещения. Каждый объект address_space
имеет свое уникальное базисное дерево (radix tree), которое хранится в поле page_tree
. Базисное дерево — это один из типов бинарных деревьев. Базисное дерево позволяет выполнять очень быстрый поиск необходимой страницы только на основании значения смещения в файле. Функции поиска в страничном кэше, такие как find_get_page()
и radix_tree_lookup()
, выполняют поиск с использованием заданного дерева и заданного объекта.
Основной код для работы с базисными деревьями находится в файле lib/radix-tree.c
. Для использования базисных деревьев необходимо подключить заголовочный файл <linux/radix-tree.h>
.
- Дерево покупательских решений
- 2.6. Дерево модели
- 14.4.3. Ввод элемента в дерево: tsearch()
- Что такое поддерево chroot
- Дерево исходных кодов ядра
- Дерево семейства процессов
- Вставка в красно-черное дерево
- Сортирующее дерево
- Вставка в сортирующее дерево
- 5.6 Всемирное дерево имен
- 20.5.1 Дерево SMI
- 10.2. AVL-дерево: приближенно сбалансированное дерево