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


Драйверы блочных устройств

Драйверы блочных устройств являются компонентами самого нижнего уровня в подсистеме блочного ввода/вывода операционной системы Linux. Они получают запросы от планировщика ввода/вывода и обрабатывают их должным образом.

Драйверы блочных устройств, конечно же, интегрированы в модель драйвера устройства. Следовательно, каждый из них связан с дескриптором device driver. Кроме того, каждый диск, с которым работает драйвер, связан с дескриптором device. Однако эти дескрипторы имеют довольно общий характер, и подсистема блочного ввода/вывода должна хранить дополнительную информацию для каждого блочного устройства в системе.

Блочные устройства

Драйвер блочного устройства может управлять несколькими устройствами. Например, драйвер IDE может работать с несколькими IDE-дисками, каждый из которых является самостоятельным блочным устройством. Кроме того, каждый диск обычно разбит на разделы, каждый из которых можно трактовать как логическое блочное устройство. Очевидно, что драйвер должен по
заботиться обо всех системных вызовах VFS, выполняемых для файлов блочных устройств, ассоциированных с этими устройствами.
Каждое блочное устройство представлено дескриптором block device
Все устройства блочных устройств занесены в глобальный список, голова которого представлена переменной aii bdevs. Указатели, связывающие элементы этого списка, находятся в поле bd iist дескриптора блочного устройства.
Если дескриптор блочного устройства относится к разделу диска, поле bd contains указывает на дескриптор блочного устройства, ассоциированный с диском в целом, в то время как поле bd part указывает на дескриптор раздела hd struct В противном случае, т. е. когда дескриптор блочного устройства относится ко всему диску, поле bd contains указывает на сам этот дескриптор, а поле bd part count подсчитывает, сколько раз были открыты разделы на диске.
Поле bd hoider хранит линейный адрес, представляющий держателя блочного устройства. Держатель — это не драйвер, обслуживающий ввод/вывод на данном устройстве. Это компонент ядра, который пользуется блочным устройством и имеет по отношению к нему исключительные особые привилегии (например, он имеет свободный доступ к полю bd private дескриптора блочного устройства). Как правило, держателем блочного устройства является файловая система, смонтированная на нем. Другим типичным случаем является ситуация, в которой файл блочного устройства открыт для исключительного доступа: здесь держателем является соответствующий файловый объект.

Функция bd_ciaim записывает в поле bd hoider указанный адрес, а функция bd_release , наоборот, сбрасывает это поле в null. Необходимо отдавать себе отчет в том, что один и тот же компонент ядра может вызывать bd_ciaim много раз, и каждый вызов увеличивает значение поля bd hoiders. Чтобы освободить блочное устройство, этот компонент ядра должен вызвать bd_release соответствующее количество раз.
относится к диску в целом и иллюстрирует, как дескрипторы блочных устройств связаны с остальными важными структурами подсистемы блочного ввода/вывода.

Предыдущая страница | 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...