The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Семантика read из device driver-а (Рубини и LDD3)"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Семантика read из device driver-а (Рубини и LDD3)"  
Сообщение от geekkoo email(ok) on 03-Апр-08, 13:43 
Продолжаю читать Linux Device Drivers 3 ed

Вопрос про чтение фиксированного числа отсчетов из драйвера. Данные прибывают квантами по 4096 байт. Если пользователь запросил из драйвера точно 128 кБайт, что должен делать драйвер? Хотелось бы, чтобы драйвер попеременно спал и получал данные до тех пор пока не наберётся запрошенное юзером число байт.

Но Рубини в 6 Главе утверждает, что это не соглачуется с юниксной семантикой, а правильное поведенеие должно быть таким:

If a process calls read but no data is (yet) available, the process must block. The process is awakened as soon as some data arrives, and that data is returned to the caller, even if there is less than the amount requested in the count argument to the method.

Как в этом случае выходить из положения? Буферизовать данные в user-land? Хочется ятобы последовательность собранных данных была непрерывной.

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Семантика read из device driver-а (Рубини и LDD3)"  
Сообщение от vshemm on 04-Апр-08, 12:06 
>Продолжаю читать Linux Device Drivers 3 ed

А в чем вопрос? Вы сами все случаи описали. Можно сделать как говорит Рубини, тогда придется в юзерспейсе читать в цикле пока не наберется 128к. Можно этот цикл переместить в драйвер, и ждать там, пока не наберется нужное количество данных. Причем записывать их можно как в юзерский буфер (что не очень хорошо, при получении сигнала буфер будет изменен), так и в ядерный буфер (что тоже нехорошо, т.к. при каждом запросе на чтение его нужно будет выделять-освобождать).
Имхо, лучше не менять семантику read() и делать как говорит Рубини :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Семантика read из device driver-а (Рубини и LDD3)"  
Сообщение от geekkoo email(??) on 04-Апр-08, 12:50 
>[оверквотинг удален]
>семантикой, а правильное поведенеие должно быть таким:
>
>If a process calls read but no data is (yet) available, the
>process must block. The process is awakened as soon as some
>data arrives, and that data is returned to the caller, even
>if there is less than the amount requested in the count
>argument to the method.
>
>Как в этом случае выходить из положения? Буферизовать данные в user-land? Хочется
>ятобы последовательность собранных данных была непрерывной.

Ага, это в третьей главе обсуждалось, я пропустил. Нужно просто в вызове read возвращать число фактически переданных байт. Тогда при чтении девайса с помощью библиотечной функции fread пользователь даже не заметит квантования, поскольку система будет повторять чтение с девайса пока не наберётся запрошенное число байт.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру