Page 1 of 1

Драйверы устройств

Posted: Mon Jan 09, 2006 7:53 pm
by Violinier
Я тут задумался, каким драйверы устройств должны "общаться" с системой. И вот, что я придумал:
Драйверы работают к кольце 0
1.Ядро загружает файл драйвера и запускает процедуру инициализации
(entry-point)
2. Драйвер перехватывае прерывания от той аппаратуры, которую обслуживает и возможно некоторые программные прерывания.
Таким образом драйвер становится частью системы.
Возможно, я не понятно написал, так что спрашивайте, поясню.

Posted: Tue Jan 10, 2006 10:54 am
by halyavin
Это все не ново. Проблема с "некоторыми программными прерываниями". Нафиг нужен драйвер, который работает с аппаратурой, если ядро представления не имеет как работать (и зачем вообще нужен) этот драйвер? Основная проблема на данный момент - спроектировать интерфейсы взаимодействия с драйверами для всех типов устройств. Следует так же заметить, что нестандартным устройствам (видеокамеры, фотоаппараты, usb-вентиляторы, ...) требуется не только драйвер, но и user-mode программы для взаимодействия с ними.

На данный момент я проектирую интерфейс взаимодействия драйверов файловых систем и дисковых устройств.

Posted: Tue Jan 10, 2006 1:00 pm
by halyavin
Если интересно - посмотри на рабочую версию моего предложения по внедрению драйверов дисковых систем: http://shade.msu.ru/~msu-se/driversystem.html
Предложения/вопросы приветствуются. Если их много - можешь связаться со мной по icq (если, конечно, у тебя инет не повременный).

Posted: Thu Jan 12, 2006 12:22 am
by Mario79
halyavin
Андрей ты хотел конструктивных предложений? Ну, я попытаюсь не критиковать :-)
1) Я не совсем согласен с концепцией - один драйвер файловой системы на каждый существующий раздел. Представь, насколько раздуется код? Пусть даже и подгружаемые драйвера.
Ты плохо представил ситуацию, на самом деле на каждый накопитель (на каждое IDE устройство) достаточно всего 1 копии драйвера определенной файловой системы, если она присутствует в структуре данных физического устройства. Ведь все равно на одном устройстве мы не можем параллельно обрабатывать 2 запроса, приходится разделять их по времени, причем перемещение головки займет больше времени, чем изменение стека дополнительных 100-1000 байт в которых, будут содержаться данные выбранного раздела.
Другой вопрос если обращение производиться к другому физическому устройству. Вот тут уж действительно нужен отдельный драйвер присутствующих файловых систем. Опять же по 1 копии на одно физическое устройство.
2) В твоей концепции есть один неучтенный момент - параллельная работа 2-х приложений возможна лишь при обращении к двум разным физическим устройствам (я уже не беру в расчет 3 и более приложений ломящихся на одно физическое устройство). Нету разделения по времени доступа. Конечно, ее нету и в существующей системе, поскольку изначально все разрабатывалось с учетом монопольной работы одного приложения. Остальные приложения вынуждены были ждать. Но это очень даже плохо, так как мы видим печальные последствия, например если запустить АС97 плеер и запустить Doom, то в результате либо не загрузиться игра, либо плеер станет нервно заикаться, а потом вообще отключиться.

Posted: Thu Jan 12, 2006 1:08 pm
by halyavin
Mario79 wrote: ...один драйвер файловой системы на каждый существующий раздел.
Один экземпляр драйвера файловой системы - то есть одна структура данных, описывающая раздел и информация об фс на нем. Код драйвера файловой системы будет один, даже если есть 100 разделов на 10 устройствах.

На счет 2 пункта - параллельная работа с винтом является проблемой драйверов, а не концепции. Никто не мешает драйверу устройства или файловой системы позволять обрабатывать несколько запросов параллельно. Изначально все будет работать в последовательном режиме, как сейчас. Потом, возможно, я улучшу драйвера, позволив более параллельно исполнять запросы.

Re: Драйверы устройств

Posted: Fri Feb 24, 2006 6:32 pm
by VaStaNi
Violinier wrote:Я тут задумался, каким драйверы устройств должны "общаться" с системой. И вот, что я придумал:
Драйверы работают к кольце 0
1.Ядро загружает файл драйвера и запускает процедуру инициализации
(entry-point).
А можно услышать аргументы в пользу такого выбора?
Кроме того что это проще реализовать плюсы какие?
А вот на счет глюков и убиения ядра так оно прямо таки рядом, т.к. "...запускает процедуру инициализации" и она при критических ошибках делает систему, скажем "конвульсивной". Тогда что? Плюсов маловато будет, пожалуй при таком раскладе.