The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Глава 16, Блочные драйверы

Глава 16, Блочные драйверы

Предыдущая  Содержание  Следующая V*D*V

Глава 16

 

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

 

Блочный драйвер обеспечивает доступ к устройствам, которые передают доступные для произвольного выбора данные в блоках фиксированного размера - в первую очередь, это дисковые драйверы. Видение ядром Linux блочных устройств в корне отличается от символьных устройств; в результате чего блочные драйверы имеют особый интерфейс и свои особые проблемы.

 

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

 

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

 

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

 

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

Предыдущая  Содержание  Следующая