понедельник, 18 октября 2010 г.

3.1. Проектирование scull

Перевод с английского на русски


3.1. Проектирование scull

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

Чтобы сделать scull полезным в качестве шаблона написания реальных драйверов для реальных устройств, мы покажем, как реализовать различные абстракции устройств в верхней части памяти компьютера, каждую со своей индивидуальностью.

Исходные коды scull реализуют описанные ниже устройства. Каждый вид устройства обслуживается модулем названного типа.

scull0 до scull3

Четыре устройства каждое из которых состоит из глобальной и постоянной области памяти. Глобальная обозначает, что если устройство открыто несколько раз, данные, содержащиеся в устройстве, являются общими для всех файловых дискрипторов, которые открыли его. Постоянная обозначает, что если устройство будет закрыто или открыто вновь, данные не пропадут. С этим устройством может быть интересно работать, потому что оно может быть доступно и протестировано с использованием обычных команд, таких как cp, cat, и оболочки перенаправления ввода/вывода.

scullpipe0 to scullpipe3

Четыре FIFO (first-in-first-out - первый внутрь - первый наружу) устройства, которые работают как каналы. Один процесс читает то, что написал другой. Если несколько процессов читают одно и то же устройство, они начинают соперничать за данные. Внутренности scullpipe покажут, как может быть реализовано блокирующее и неблокирующее чтение без необходимости прибегать к прерываниям. И хотя реальные драйвера синхронизируются со своими устройствами при помощи аппаратных прерываний, тема блокирующих и неблокирующих операций важна сама по себе отдельно от рассмотрения обработки прерываний (рассматривается в главе 10).

scullsingle
scullpriv
sculluid
scullwuid

Эти устройства похожи на scull0, но имеют некоторые ограничения по правам открытия. Первое (scullsingle) позволяет только одному процессу одномоментно использовать драйвер, в то время как scullpriv является выделенным для каждой виртуальной консоли (или X-терминальной сессии), потому что каждая консоль/терминал получает свои области памяти. Sculluid and scullwuid могут быть открыты многократно, но только одним пользователем одновременно; первое возвращает ошибку "Устройство занято", если устройство блокировано другим пользователем, в то время как второе реализует блокирующее открытие. Эти варианты scull представляются довольно запутанными в смысле политики и механизмов действия, но это стоит того, потому что некоторые реальные устройства требуют такого рода управления.

Каждое из устройств scull демонстрирует различные возможности драйвера и существующие трудности. Эта глава посвящена внутреннему устройству scull0 to scull3; более продвинутые устройства рассматриваются в главе 6. scullpipe описывается в разделе 3.4, остальные - в разделе 6.6.

Переведено на сайте www.notabenoid.com
http://notabenoid.com/book/11832/38269
Внимание! Этот перевод, возможно, ещё не готов,
так как модераторы установили для него статус
"перевод редактируется"

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.