Готовый перевод Linux Device Drivers 3 / Драйверы устройств Линукс (третье издание): Глава 16. Блочные драйвера

Внимание! Этот перевод, возможно, ещё не готов, так как модераторы установили для него статус «перевод редактируется»

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

До сих пор наше обсуждение ограничивалось драйверами символьных устройств. В Linux есть и другие типы драйверов, и пришло время поговорить о них. В этой главе обсуждаются драйверы блочных
устройств.

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

Эффективность работы драйвера блочного устройства критична
для производительности, поскольку через него осуществляется чтение и
запись в пользовательских приложениях. Современные системы с
виртуальной памятью работают перемещая не нужные (как она надеется)
данные во вспомогательное устройство, в роли которого обычно
выступает дисковый накопитель. Посредством блочного драйвера
происходит передача данных между памятью и вспомогательным
устройством. Поэтому драйвера блочных устройств выглядят как часть
подсистемы виртуальной памяти. Можно написать драйвер, не зная о
структуре struct page и о других важных концепциях организации
памяти, но любой высокопроизводительный драйвер должен
реализовываться в соответствии с материалом из главы 15.

При разработке уровня блочных устройств необходимо обращать
внимание на производительность. Многие символьные устройства могут
работать не на максимальных скоростях, и производительность системы в
целом не пострадает. А если подсистема блочного ввода-вывода плохо
настроена, то система не сможет работать хорошо. Интерфейс Linux для
драйверов блочных устройств позволяет вам использовать множество
таких устройств, но при этом возрастает сложность. К счастью, интерфейс
драйверов блочных устройств ядра 2.6 значительно совершеннее, чем в
других ядрах.

В этой главе рассматривается пример реализации блочного
драйвера, производящего все операции в памяти. По сути, это RAM-диск.
Ядро уже содержит прекрасную реализацию RAM-диска, но наш драйвер
(названный sbull) демонстрирует процесс создания драйвера блочного
устройства без лишних усложнений.

Перед подробным обсуждением, дадим определение двум
терминам. Блок – кусок данных фиксированной величины, размер
которого определяется ядром. Часто размер составляет 4096 байт, но
может меняться в зависимости от архитектуры и используемой файловой
системы. Сектор – это маленький блок, размер которого определяется
аппаратным обеспечением. Ядро полагает, что устройства реализуют 512-
байтный сектор. Если ваше устройство использует другой размер сектора,
то ядро может адаптироваться, и не генерировать запросы, которые не
могут быть обработаны. За это приходится платить. При взаимодействии с
ядром всегда используется 512-байтный сектор. Если вы используете
другой размер сектора, то необходимо производить масштабирование к
секторам ядра. Мы продемонстрируем, как это сделать в драйвере sbull.

Внимание! Этот перевод, возможно, ещё не готов.
Его статус: перевод редактируется

Переведено на Нотабеноиде
http://notabenoid.org/book/11832/38374

Переводчики: hardorsoft

Настройки

Готово:

100.00% КП = 1.0