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


Дескрипторы очередей запросов

Каждая очередь запросов представлена большой структурой request queue
По своей организации очередь запросов является двунаправленным списком, СОСТОЯЩИМ ИЗ дескрипторов запросов (то есть структур request). Поле queue head дескриптора очереди запросов содержит голову (первый пустой элемент) списка, а указатели в поле queue list дескриптора запроса связывают каждый запрос с предыдущим и следующим элементами списка. Порядок следования элементов в списке специфичен для каждого драйвера устройства, но планировщик ввода/вывода предлагает несколько стандартных способов упорядочивания элементов, которые обсуждаются далее в разд. "Планировщик ввода/вывода”.

Поле backing dev info ЯВЛЯетСЯ небольшим объектом типа backing dev info, в котором хранится информация о трафике ввода/вывода для аппаратного блочного устройства. Например, этот объект содержит информацию об опережающем чтении и о переполненности очереди запросов.

Дескриптор запросов

Каждый ждущий запрос к блочному устройству представлен дескриптором запроса, который хранится в структуре request,
Каждый запрос состоит из одной или нескольких структур bio. Первоначально общий слой работы с блочными устройствами создает запрос, включающий в себя только одну структуру. Впоследствии планировщик ввода/вывода может "расширить" запрос либо добавляя новые сегменты к оригинальной структуре bio, либо включая дополнительные структуры bio в запрос. Это может произойти, если новые данные оказываются физически смежными с данными, затребованными в запросе. Поле bio дескриптора запроса указывает на первую структуру bio в запросе, а поле biotail — на последнюю. Макрос rq for each bio реализует цикл, перебирающий все структуры bio, входящие в запрос.

Некоторые поля дескриптора запроса могут изменяться динамически. Например, как только будут переданы все порции данных, на которые ссылалась структура bio, поле bio будет обновлено так, чтобы оно указывало на следующую структуру bio в запросе. В то же время в конец списка запроса могут быть добавлены новые структуры bio, так что и поле biotail может измениться.

Некоторые другие поля дескриптора запроса модифицируются либо планировщиком ввода/вывода, либо драйвером устройства по ходу передачи секторов диска. Например, поле nr sectors содержит количество секторов, которые еще подлежат передаче в запросе, а поле current nr sectors — количество секторов, подлежащих передаче в текущей bio.

Поле flags содержит большое количество флагов, перечисленных в табл. 14.8. Самым важным из них является req rw, который определяет направление движения данных.

Предыдущая страница | 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 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | Следующая страница




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

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

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга...

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

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

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

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно...

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

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer...