Чтение онлайн

на главную - закладки

Жанры

Разработка ядра 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
— заданная позиция в файле.

Поделиться:
Популярные книги

Эволюционер из трущоб. Том 3

Панарин Антон
3. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
6.00
рейтинг книги
Эволюционер из трущоб. Том 3

Эволюционер из трущоб. Том 9

Панарин Антон
9. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 9

Драконы

Мартин Джордж Р.Р.
Фантастика:
фэнтези
8.08
рейтинг книги
Драконы

Офицер

Земляной Андрей Борисович
1. Офицер
Фантастика:
боевая фантастика
7.21
рейтинг книги
Офицер

Тринадцатый

Северский Андрей
Фантастика:
фэнтези
рпг
7.12
рейтинг книги
Тринадцатый

Ученик

Листратов Валерий
2. Ушедший Род
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Ученик

Сильнейший ученик. Том 2

Ткачев Андрей Юрьевич
2. Пробуждение крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сильнейший ученик. Том 2

Трапеция

Брэдли Мэрион Зиммер
Проза:
современная проза
5.00
рейтинг книги
Трапеция

Вперед в прошлое 5

Ратманов Денис
5. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 5

Вечная Война. Книга II

Винокуров Юрий
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
8.37
рейтинг книги
Вечная Война. Книга II

Матабар. II

Клеванский Кирилл Сергеевич
2. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар. II

Обрыв

Гончаров Иван Александрович
Проза:
классическая проза
русская классическая проза
8.93
рейтинг книги
Обрыв

Кодекс Крови. Книга VII

Борзых М.
7. РОС: Кодекс Крови
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга VII

Воин

Бубела Олег Николаевич
2. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.25
рейтинг книги
Воин