Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Глава 16. Драйверы блочных устройств
hardorsoft
25.10.10 в 13:04
|
|
До сих пор наше обсуждение ограничивалось драйверами символьных устройств. В Linux есть и другие типы драйверов, и пришло время поговорить о них. В этой главе обсуждаются драйверы блочных устройств.
hardorsoft
25.10.10 в 13:04
|
|
Эти драйверы позволяют работать с устройствами, которые предоставляют произвольный (случайный) доступ к данным, хранящихся в блоках фиксированного размера. Для ядра Linux, блочные устройства принципиально отличаются от символьных, поэтому драйвера блочных устройств имеют отдельный интерфейс и свои специфичные функции.
hardorsoft
25.10.10 в 13:04
|
|
Эффективность работы драйвера блочного устройства критична для производительности, поскольку через него осуществляется чтение и запись в пользовательских приложениях. Современные системы с виртуальной памятью работают перемещая не нужные (как она надеется) данные во вспомогательное устройство, в роли которого обычно выступает дисковый накопитель. Посредством блочного драйвера происходит передача данных между памятью и вспомогательным устройством. Поэтому драйвера блочных устройств выглядят как часть подсистемы виртуальной памяти. Можно написать драйвер, не зная о структуре struct page и о других важных концепциях организации памяти, но любой высокопроизводительный драйвер должен реализовываться в соответствии с материалом из главы 15.
hardorsoft
25.10.10 в 13:05
|
|
При разработке уровня блочных устройств необходимо обращать внимание на производительность. Многие символьные устройства могут работать не на максимальных скоростях, и производительность системы в целом не пострадает. А если подсистема блочного ввода-вывода плохо настроена, то система не сможет работать хорошо. Интерфейс Linux для драйверов блочных устройств позволяет вам использовать множество таких устройств, но при этом возрастает сложность. К счастью, интерфейс драйверов блочных устройств ядра 2.6 значительно совершеннее, чем в других ядрах.
hardorsoft
25.10.10 в 13:05
|
|
В этой главе рассматривается пример реализации блочного драйвера, производящего все операции в памяти. По сути, это RAM-диск. Ядро уже содержит прекрасную реализацию RAM-диска, но наш драйвер (названный sbull) демонстрирует процесс создания драйвера блочного устройства без лишних усложнений.
hardorsoft
25.10.10 в 13:05
|
|
Перед подробным обсуждением, дадим определение двум терминам. Блок – кусок данных фиксированной величины, размер которого определяется ядром. Часто размер составляет 4096 байт, но может меняться в зависимости от архитектуры и используемой файловой системы. Сектор – это маленький блок, размер которого определяется аппаратным обеспечением. Ядро полагает, что устройства реализуют 512- байтный сектор. Если ваше устройство использует другой размер сектора, то ядро может адаптироваться, и не генерировать запросы, которые не могут быть обработаны. За это приходится платить. При взаимодействии с ядром всегда используется 512-байтный сектор. Если вы используете другой размер сектора, то необходимо производить масштабирование к секторам ядра. Мы продемонстрируем, как это сделать в драйвере sbull.
hardorsoft
25.10.10 в 13:06
|
|