Страницы буферов
Когда ядро должно обратиться к отдельному блоку, оно обращается к странице буферов, содержащей этот буфер, и проверяет голову буфера.
Ядро создает страницы буферов в следующих двух случаях:
- при чтении и записи страниц файла, которые хранятся не в смежных блоках диска. Это происходит либо потому, что файловая система разместила файл не в смежных блоках, либо потому, что файл содержит "дыры"
- при обращении к одному блоку на диске (например, при чтении суперблока или блока индексного дескриптора).
В первом случае дескриптор страницы буферов вставляется в базисное дерево обычного файла. Головы буферов сохраняются, потому что содержат ценную информацию: блочное устройство и номер блока, определяющего положение данных на диске. В главе 16 показано, как ядро использует страницу буферов этого типа.
Во втором случае дескриптор страницы буферов вставляется в базисное дерево, корень которого находится в объекте address space индексного дескриптора в специальной файловой системе bdev, ассоциированной с блочным устройством. Страницы буферов этого типа должны удовлетворять строгому
ограничению: все буферы блоков относятся к смежным блокам блочного устройства.
В качестве примера рассмотрим ситуацию, в которой виртуальная файловая система пытается прочитать 1024-байтовый блок индексного дескриптора, содержащий индексный дескриптор некоторого файла. Вместо выделения одного буфера ядро должно выделить целую страницу с четырьмя буферами. Эти буферы будут содержать данные из четырех смежных блоков блочного устройства, включая запрошенный блок индексного дескриптора.
В этой главе мы уделим основное внимание страницам буферов второго типа, так называемым страницам буферов блочных устройств.
Все буферы блоков внутри одной страницы буферов должны иметь одинаковый размер. Следовательно, в архитектуре 80x86 страница буферов может включать в себя от одного до восьми буферов, в зависимости от размера блока.
Когда некоторая страница выступает в качестве страницы буферов, все головы буферов блоков, хранящиеся в ней, организованы в однонаправленный циклический список. Поле private дескриптора страницы буферов указывает на голову буфера первого блока в странице2, а каждая голова буфера содержит в поле b this page указатель на следующую голову буфера в списке.
Кроме того, каждая голова буфера содержит адрес дескриптора страницы буферов в поле b page.
Предыдущая страница | 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 108 109 110 111 | Следующая страница