Разработка ядра Linux (Второе издание)
Шрифт:
Для получения необходимой общности в страничном кэше операционной системы Linux используется структура
address_space
(адресное пространство), которая позволяет идентифицировать страницы памяти, находящиеся в кэше. Эта структура определена в файле <linux/fs.h>
следующим образом. struct address_space {
struct inode *host; /* файловый индекс, которому
принадлежит объект */
struct radix_tree_root page_tree; /*
базисное дерево
всех страниц */
spinlock_t tree_lock; /* блокировка для защиты
поля page_tree */
unsigned int i_mmap_wrltable; /* количество областей
памяти
с флагом VM_SHARED */
struct prio_tree_root i_mmap; /* список всех отображений */
struct list_head i_mmap_nonlinear; /* список областей
памяти с флагом VM_NONLINEAR */
spinlock_t i_mmap_lock; /* блокировка поля i_mmap */
atomic_t truncate_count; /* счетчик запросов
truncate */
unsigned long nrpages; /* общее количество страниц */
pgoff_t writeback_index; /* смещения начала
обратной записи */
struct address_space_operations *a_ops; /* таблица операций */
unsigned long flags; /* маска gfp_mask
и флаги ошибок */
struct backing_dev_info *backing_dev_info; /* информация
упреждающего чтения */
spinlock_t private_lock; /* блокировка
для частных отображений */
struct list_head private_list; /* список
частных отображений */
struct address_spacs *assoc_mapping; /* соответствующие
буферы */
};
Поле
i_mmap
— это дерево поиска по приоритетам для всех совместно используемых и частных отображений. Дерево поиска по приоритетам— это хитрая смесь базисных и частично упорядоченных бинарных деревьев [86] . Всего в адресном пространстве nrpages страниц памяти.
86
Реализация ядра основана на базисном дереве поиска по приоритетам, предложенном в работе Edward M. McCreight, опубликованной в журнале SIAM Journal of Computing, May 1985, vol. 14. №2, P. 257–276.
Объект
address_space
host
указывает на соответствующий файловый индекс. Если значение поля host
равно NULL
, то соответствующий объект не является файловым индексом; например, объект address_space
может быть связан с процессом подкачки страниц (swapper). Поле
a_ops
указывает на таблицу операций с адресным пространством так же, как и в случае объектов подсистемы VFS. Таблица операций представлена с помощью структуры struct address_space_operations
, которая определена в файле <linux/fs.h>
следующим образом. struct address_space_operations {
int (*writepage)(struct page*, struct writeback_control*);
int (*readpage)(struct file*, struct page*);
int (*sync_page)(struct page*);
int (*writepages)(struct address_space*,
struct writeback_control*);
int (*set_page_dirty)(struct page*);
int (*readpages)(struct file*, struct address_space*,
struct list_head*, unsigned);
int (*prepare_write)(struct file*, struct page*,
unsigned, unsigned);
int (*commit_write)(struct file*, struct page*,
unsigned, unsigned);
sector_t (*bmap)(struct address_space*, sector_t);
int (*invalidatepage)(struct page*, unsigned long);
int (*releasepage)(struct page*, int);
int (*direct_IO)(int, struct kiocb*, const struct iovec*,
loff_t, unsigned long);
};
Методы
read_page
и write_page
являются наиболее важными. Рассмотрим шаги, которые выполняются при страничной операции чтения. Методу чтения в качестве параметров передается пара значений: объект
address_space
и смещение. Эти значения используются следующим образом для поиска необходимых данных в страничном кэше. page = find_get_page(mapping, index);
где параметр
mapping
— это заданное адресное пространство, a index
— заданная позиция в файле.
Поделиться:
Популярные книги
70 Рублей
1. 70 Рублей
Фантастика:
фэнтези
боевая фантастика
попаданцы
постапокалипсис
6.00
рейтинг книги
Жатва душ. Остров мертвых
Фантастика:
боевая фантастика
рпг
5.20
рейтинг книги
Сердце Дракона. Том 9
9. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.69
рейтинг книги
Как я строил магическую империю 6
6. Как я строил магическую империю
Фантастика:
попаданцы
аниме
фантастика: прочее
фэнтези
5.00
рейтинг книги
Леди для короля. Оборотная сторона короны
3. Королевская охота
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Кодекс Крови. Книга VI
6. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 4
4. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
АллатРа
Научно-образовательная:
психология
история
философия
обществознание
физика
6.25
рейтинг книги
Газлайтер. Том 10
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Дорога к счастью
Любовные романы:
любовно-фантастические романы
6.11
рейтинг книги
Газлайтер. Том 8
8. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Камень Книга седьмая
7. Камень
Фантастика:
фэнтези
боевая фантастика
6.22
рейтинг книги
Николай I Освободитель. Книга 2
2. Николай I
Фантастика:
героическая фантастика
альтернативная история
5.00
рейтинг книги
Секретарша генерального
Любовные романы:
современные любовные романы
эро литература
короткие любовные романы
8.46