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


Классы

Каждый класс описывается объектом class. Все объекты классов принадлежат подсистеме ciass subsys, ассоциированный с каталогом /sys/class. Кроме того, каждый объект class содержит встроенную подсистему. Например, существует каталог /sys/class/input, ассоциированный с классом input в модели драйвера устройства.

Каждый объект class включает в себя список дескрипторов ciass device, каждый из которых представляет одно логическое устройство, принадлежащее к этому классу. Структура ciass device имеет поле dev, которое указывает на дескриптор device. Таким образом, логическое устройство всегда ссылается на некоторое устройство в модели драйвера устройства. Однако возможно Наличие НеСКОЛЬКИХ Дескрипторов ciassdevice, относящихся к одному устройству. В реальности аппаратное устройство может состоять из нескольких различных подустройств, каждому из которых требуется свой интерфейс режима пользователя. Например, звуковая карта является аппаратным устройством, которое обычно содержит DSP, микшер, интерфейс игрового порта и т. д. Каждое такое подустройство требует отдельный интерфейс режима пользователя и поэтому ассоциировано с собственным каталогом файловой системы sysfs.
Предполагается, что драйверы устройств одного класса предоставляют сходные функциональные возможности приложениям режима пользователя. Например, все драйверы звуковых карт должны предлагать способ записи звуковых сэмплов на DSP.

В модели драйвера устройства классы, в первую очередь, нацелены на предоставление стандартного метода для экспорта интерфейсов логических устройств в приложения режима пользователя. В каждый дескриптор ciass device встроен объект kobject, имеющий атрибут (специальный файл) по имени dev. Этот атрибут содержит старший и младший номера файла устройства, необходимого для обращения к соответствующему логическому устройству.

Файлы устройств

в основе Unix-подобных операционных систем лежит понятие файла, который является всего лишь контейнером для информации, структурированным в виде последовательности байтов. В соответствии с таким подходом, устройства ввода/вывода считаются специальными файлами, называемыми файлами устройств. Таким образом, системные вызовы, выполняемые при взаимодействии с обычными файлами на диске, могут применяться и для непосредственного взаимодействия с устройствами ввода/вывода. Например, один и тот же системный вызов write может быть использован для записи данных в обычный файл и для отправки их на принтер. Во втором случае необходимо данные записать в файл устройства /dev/lpO.

Принимая во внимание характеристики соответствующих драйверов, можно разделить файлы устройств на два типа: блочные и символьные. Различия между двумя классами аппаратных устройств не такие четкие. Во всяком случае, можно предполагать следующее:
- в блочном устройстве возможен произвольный доступ к данным, а время, необходимое для передачи блока данных, мало и всегда примерно одинаково, по крайней мере, с точки зрения человека. Типичными примерами блочных устройств являются жесткие диски, гибкие диски, CD-ROM и DVD;
- к данным на символьном устройстве либо вовсе нельзя обратиться произвольным образом (пример — звуковая карта), либо произвольный доступ возможен, но время обращения сильно зависит от позиции элемента данных внутри устройства (пример — накопитель на магнитной ленте).
Сетевые карты являются замечательным исключением из этой схемы, потому что они являются аппаратными устройствами, не связанными напрямую с файлами устройств.

Файлы устройств использовались уже в первых версиях операционной системы Unix. Обычно файл устройства— это реальный файл, включенный в файловую систему. Однако его индексный дескриптор необязательно содержит указатели на блоки данных на диске (то есть данные, хранящиеся в файле), потому что их попросту нет. Вместо этого индексный дескриптор должен содержать идентификатор аппаратного устройства, соответствующего файлу символьного или блочного устройства.

Традиционно этот идентификатор состоит из названия типа файла устройства (то есть символьный или блочный) и пары чисел. Первое число, называемое старшим номером, идентифицирует тип устройства. По традиции все файлы устройств, имеющих одинаковый старший номер и одинаковый тип, имеют и одинаковый набор файловых операций, поскольку управляются одним драйвером. Второе число, называемое младшим номером, идентифицирует конкретное устройство в группе устройств, имеющих одинаковый старший номер. Например, если несколько дисков управляется одним контроллером, то у них один старший номер, но разные младшие номера.

Системный вызов mknod служит для создания файлов устройств. Он принимает в качестве параметров имя файла устройства, его тип и старший и младший номера. Файлы устройств обычно находятся в каталоге /dev. Обратите внимание, что символьные и блочные устройства имеют независимую нумерацию, и блочное устройство (3.0) отличается от символьного устройства (3.0).

Как правило, файл устройства ассоциирован с аппаратным устройством (например, /dev/hda — с жестким диском) или с какой-то физической или логической составляющей аппаратного устройства (например, /dev/hda2 — с разделом на диске). Однако в некоторых случаях файл устройства не ассоциирован ни с каким реальным устройством, а представляет фиктивное логическое устройство. Например, /dev/null — это файл, соответствующий "черной дыре”; все данные, записываемые в него, просто отбрасываются, и файл всегда пуст.

Что касается ядра, ему безразлично имя файла. Если вы создадите блочный файл устройства с именем /tmp/disk, старшим номером, равным 3, и младшим номером, равным 0, то он будет эквивалентен файлу /dev/hda из таблицы. С другой стороны, имена файлов могут быть важны для некоторых прикладных программ. Например, какая-нибудь коммуникационная программа может предполагать, что первый последовательный порт ассоциирован с файлом устройства /dev/ttySO. Впрочем, большинство прикладных программ можно сконфигурировать так, что они будут работать с произвольными именами файлов устройств.

виброфильтр цена

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