Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

системные сообщения

252
26 января 2007 года
koderAlex
1.4K / / 07.09.2005
интересуюсь , кто какой формат использовал , и какой механизм передачи ? и что из этого вышло (в смысле производительности) ? ) .
261
28 января 2007 года
ahilles
1.5K / / 03.11.2005
ты про какие сообщения спрашиваешь?
252
29 января 2007 года
koderAlex
1.4K / / 07.09.2005
межпроцессные сообщения . обращение к оси .
261
29 января 2007 года
ahilles
1.5K / / 03.11.2005
говори нормально! сообщения через какие функции?
вообще то таких функций нет...
а какие ещё обращения к оси (sysenter что ли?)
252
31 января 2007 года
koderAlex
1.4K / / 07.09.2005
и sysenter тоже )
а дос и линух через прерывания обращаются .
ещё можно через шлюзы . это механизмы сообщений .
а формат : дос через регистры и иногда буфер в памяти .
выньдос через стек .
вот меня и интересует что лучше в смысле быстродействия .
261
31 января 2007 года
ahilles
1.5K / / 03.11.2005
через регистры быстрее будет чем через стек
разницы нет через что ты вызываешь сервисы всё равно в результате их вызова произойдёт переход в режим нулевого кольца
в досе совсем прерывания обрабатываются быстрее потому в нём нет колец защиты
349
31 января 2007 года
Phantom-84
656 / / 27.10.2005
Системные сообщения (сигналы) - это нечто другое!
koderAlex, ты спрашиваешь о передаче параметров при обращении к системному сервису?
349
31 января 2007 года
Phantom-84
656 / / 27.10.2005
Я использую 16-байтный формат системных сигналов: id (dword), p1 (dword), p2 (dword), p3 (dword).
252
01 февраля 2007 года
koderAlex
1.4K / / 07.09.2005
а если надо блок инфы передать (получить ) ? например драйвер ус-ва запрашивает у PCI драйвера карту устройств на шине .
349
01 февраля 2007 года
Phantom-84
656 / / 27.10.2005
Системные сигналы нужны для оповещения о некотором событии, например, источник сигнала передает его получателю сигнал "Буфер полон", получатель в свою очередь возвращает сигнал "Подтверждаю", что говорит о принятии пред. сигнала и начале фазы чтения, ну и т.д. А буферы настраиваются предварительно, возможно также с помощью синхронизирующих сигналов. Короче, работа сигналов немного похожа на работу аппаратных прерываний, но их назначение определяется только исходя из нужд программ, которыми они используются. Что касается обмена большими блоками информации между отдельными драйверами, то у меня, например, один драйвер свободно может обратиться к устройству, обслуживаемому другим драйвером, передав в качестве параметра адрес буфера, в котором нужно сохранить или из которого нужно считатать данные. Если все в порядке, данные будут переданы.
252
01 февраля 2007 года
koderAlex
1.4K / / 07.09.2005
не считаю такую схему хорошей . представь такую ситуацию : устройсво с дма . прога просит инфу у драйвера . драйвер запускает устройство на запись инфы в буфер проги . во время записи прога умирает . устройство продолжает писать и убивает систему .
349
01 февраля 2007 года
Phantom-84
656 / / 27.10.2005
Во-первых, я имел в виду виртуальное устройство, а во-вторых я не говорил о буфере физического устройства, а говорил о буфере драйвера! Расскажу, как у меня работает конкретно DMA... Если, например, дисковый драйвер собирается осуществлять ввод/вывод посредством DMA, он резервирует участок системной памяти (находящийся в первом меге физической памяти - с недавних пор я перестал использовать диапазон со 2-го по 16-ый мег для чисто системных нужд), удовлетворяющий всем требованиям канала DMA, на котором собирается работать, и мапит его в свое адресное пространство. Также дисковый драйвер резервирует сам канал DMA. В процессе работы с диском дисковый драйвер может работать с DMA как напрямую (если это не влияет на работу других каналов), так и посредством того интерфейса, с помощью которого он изначально резервировал канал (управление DMA у меня реализовано в ядре, но интерфейс с этим модулем все равно сделан, как взаимодействие с вирт. контроллером DMA). Самое главное, что используется буфер, принадлежащий дисковому драйверу. Теперь, когда прикладная программа обращается к дисковому драйверу для осуществления операции ч/з (такое возможно далеко не всегда, а лишь в спец. режиме работы системы; обычно приложения контакрируют с дисковым драйвером через VFS и драйвер конкретной ФС), она естественно передает ему адрес своего буфера, драйвер же работает с устройством через свой собственный буфер, а потом или сначала (если осуществляется запись) выполняет обмен между своим буфером и прикладным буфером! Direct output от приложений у меня используется пока лишь для вывода на экран, однако может быть адаптирован и под другие цели, но там действует совершенно другой защитный механизм...
252
02 февраля 2007 года
koderAlex
1.4K / / 07.09.2005
не только дисковые устройства работают в дма режиме .
для контроллера дма тип F не используешь ?
я обдумываю такой вариант : приложение (без разницы - драйвер или нет) посылает запрос на операцию в лбщем виде : лба адрес , выровненный логический адрес , размер буфера .
система пересылает запрос девайс менеджеру если у приложения есть права доступа . девайс менеджер создаёт буфер и посылает запрос конкретному драйверу передавая ему физический адрес .
драйвер инит уст-во . по окончании передачи посылает сигнал девайс менеджеру . девайс менеджерпроверяет присутствие процесса запросившего обмен и если он ещё активен посылает запрос менеджеру оперативки на обмен страниц , иначе буфер убивается . это вариант для чтения данных .
349
04 февраля 2007 года
Phantom-84
656 / / 27.10.2005
Цитата:
не только дисковые устройства работают в дма режиме .
для контроллера дма тип F не используешь ?

Для медленных устройств лучше использовать совместимый тип (ISA-compatible), а для быстрых, тех же дисков, UltraDMA-режимы.

Цитата:
я обдумываю такой вариант : приложение (без разницы - драйвер или нет) посылает запрос на операцию в лбщем виде : лба адрес , выровненный логический адрес , размер буфера .
система пересылает запрос девайс менеджеру если у приложения есть права доступа . девайс менеджер создаёт буфер и посылает запрос конкретному драйверу передавая ему физический адрес .

По-моему, все-таки должна быть разница между непосредственно управляющим устройством драйвером и инициатором запроса на работу с устройством (посторонним драйвером/приложением). Зачем постороннему драйверу/приложению оперировать физическим адресом буфера? Лучше пусть сам "родной" драйвер посредством ядра связывает логический адрес с физическим адресом буфера!

Цитата:
драйвер инит уст-во . по окончании передачи посылает сигнал девайс менеджеру . девайс менеджерпроверяет присутствие процесса запросившего обмен и если он ещё активен посылает запрос менеджеру оперативки на обмен страниц , иначе буфер убивается . это вариант для чтения данных .

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

252
05 февраля 2007 года
koderAlex
1.4K / / 07.09.2005
Цитата: Phantom-84
Для медленных устройств лучше использовать совместимый тип (ISA-compatible), а для быстрых, тех же дисков, UltraDMA-режимы.


8 мегов/сек - маловато . а скорость обмена определяется устройством а не дма контроллером .

Цитата: Phantom-84

По-моему, все-таки должна быть разница между непосредственно управляющим устройством драйвером и инициатором запроса на работу с устройством (посторонним драйвером/приложением). Зачем постороннему драйверу/приложению оперировать физическим адресом буфера? Лучше пусть сам "родной" драйвер посредством ядра связывает логический адрес с физическим адресом буфера!


я ж специально отметил что в запросе передаётся логический адрес . запрос передаётся через ядро , а уж оно знает какой физический адрес соответствует заданному логическому .

Цитата: Phantom-84

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


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

349
05 февраля 2007 года
Phantom-84
656 / / 27.10.2005
Цитата:
8 мегов/сек - маловато . а скорость обмена определяется устройством а не дма контроллером .

А я не говорил, что скорость определяется DMA-контроллером! Но DMA может наложить свои ограничения на скорость передачи, тот же тип F имеет вполне конкретный предел, который для жестких дисков совсем не подходит! Кстати, у совместимого типа макс. скорость варьируется в пределах 1-2 мег/сек, но существует ряд устройств, которым этого вполне достаточно!

Цитата:
я ж специально отметил что в запросе передаётся логический адрес . запрос передаётся через ядро , а уж оно знает какой физический адрес соответствует заданному логическому .

А что тогда такое "лба адрес"? Я думал, что ты так назвал физический адрес!

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

Я все нормально понял! Повторяю, физические буферы (резервируемые для работы участки памяти) часто создаются драйверами на все время их работы и мапятся по запросу в адресные пространства разных процессов, а чтобы не возникало проблем с раздельным доступом к этому буферу, используется механизм блокировки буфера (для приложений непосредственно блокируется сам буфер, для драйверов проще использовать какой-нибудь синхронизирующий объект). Если процесс завершается, по каким-то причинам не разблокировав буфер, то это делает система в процессе "сборки мусора" за этим процессом. Таков примерный расклад... В каждом конкретном случае своя специфика. У меня, например, нет как такового диспетчера драйверов, а есть диспетчер (виртуальных) устройств, который не выполняет каких-то сверх интеллектуальных функций, а лишь отвечает за доставку параметров драйверу конкретного устройства и при опред. условиях выполняет блокировку устройства.

261
05 февраля 2007 года
ahilles
1.5K / / 03.11.2005
парни, парниии.... не паримся, в чём проблема......
самый быстрый метод передачи инфы драйверу это METHOD_NEITHER, а если нужна защита METHOD_BUFFERED
349
05 февраля 2007 года
Phantom-84
656 / / 27.10.2005
ahilles, я уже говорил, что не вижу никаких проблем для передачи драйверу блока данных! Алекса похоже интересует ситуация, когда эти данные без изменений должны транслироваться прямо на устройство...
349
05 февраля 2007 года
Phantom-84
656 / / 27.10.2005
...или межпроцессное взаимодействие, целью которого является передача данных, например, когда приложение и драйвер являются отдельными процессами и приложение хочет выполнить обмен данными с драйвером.
252
06 февраля 2007 года
koderAlex
1.4K / / 07.09.2005
Цитата: Phantom-84
А я не говорил, что скорость определяется DMA-контроллером! Но DMA может наложить свои ограничения на скорость передачи, тот же тип F имеет вполне конкретный предел, который для жестких дисков совсем не подходит! Кстати, у совместимого типа макс. скорость варьируется в пределах 1-2 мег/сек, но существует ряд устройств, которым этого вполне достаточно!


встроенные в проц дма контроллеры не должны накладывать ограничения .

Цитата: Phantom-84

А что тогда такое "лба адрес"? Я думал, что ты так назвал физический адрес!


LBA . параметр запроса (у меня) . драйвером диска транслируется в номер кластера (к примеру). может игнорироваться другими драйверами .

349
06 февраля 2007 года
Phantom-84
656 / / 27.10.2005
Цитата:
LBA . параметр запроса (у меня) . драйвером диска транслируется в номер кластера (к примеру). может игнорироваться другими драйверами .

Сразу бы так и сказал, что это конкретный пример передачи параметров для диска! Я бы тут про физический ардес и не теоретизировал! Другие драйверы будут требовать другие параметры, поэтому лучше обозначать их как-то абстрактно!

252
06 февраля 2007 года
koderAlex
1.4K / / 07.09.2005
например ?
349
06 февраля 2007 года
Phantom-84
656 / / 27.10.2005
Ну как в ioctl-функциях в общем виде param1, param2 и т.д., а в конкретной ситуации эти обобщенные параметры имеют вполне определенные псевдонимы, имена которых задаются в соответствии с тем, что передается через эти параметры...
252
06 февраля 2007 года
koderAlex
1.4K / / 07.09.2005
меня больше волнуют нестандартизированные и/или специальные устройства .
349
06 февраля 2007 года
Phantom-84
656 / / 27.10.2005
Все равно, какие устройства! Интерфейс взаимодействия с драйверами этих устройств должен быть универсальным! Ну или по крайней мере в самой системе все устройства нужно разделить на несколько абстрактных типов (например, символьные и блочные) и для каждого типа использовать свой универсальный интерфейс.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог