Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программа, драйвера и контексты 
V
    Опции темы
Hagrael
Дата 4.8.2011, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Здравствуйте, уважаемые форумчане. Мне не очень понятно, что из себя представляют драйверы и контексты. Как я понял:

Драйвер - программа, обеспечивающая работоспособность устройства. Умеет подавать нужные сигналы устройству, которые Windows не знает.

Контекст устройства - программа, работающая с драйвером... А она-то зачем? Посылает драйверу нужные сигналы? smile 

Схема действия, как я понимаю, такая:
Программа => Windows => Контекст => Драйвер => Устройство
И Windows в этой схеме предоставляет библиотеку GDI. Что она делает, тоже не до конца понятно.

Заранее благодарен за объяснения.

Это сообщение отредактировал(а) Hagrael - 4.8.2011, 08:09
PM MAIL   Вверх
bsa
Дата 4.8.2011, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Драйвер - это прослойка между устройством и операционной системой. Что такое контекст я не знаю (подозреваю это что-то Windows-специфичное). Скорее всего, это просто идентификатор, который позволяет однозначно определить устройство (в *nix - это файл, или дескриптор файла, если он открыт).
Когда тебе необходимо общаться с устройством, ты запрашиваешь его контекст у операционной системы. Если устройство свободно, то ОС его тебе выделяет. Есть определенный набор операций, доступный данному устройству (обычно, он стандартен для каждого типа устройств). Когда ты применяешь какую-либо операцию к контексту, то система перенаправляет запрос драйверу, а тот уже транслирует эту операцию в команды отправляемые устройству. Соответственно, результат выполнения команд обратно преобразуется в стандартную для операции форму и возвращается ОС, которая уже передает ее твоей программе.
PM   Вверх
Hagrael
Дата 4.8.2011, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Т. е. в схеме, приведенной выше, пункты Windows и Контекст можно объединить?

P.S.: Ну и названия придумывают...
PM MAIL   Вверх
xvr
Дата 5.8.2011, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Hagrael @  4.8.2011,  14:04 Найти цитируемый пост)
Т. е. в схеме, приведенной выше, пункты Windows и Контекст можно объединить?

В 'схеме, приведенной выше' совершенно непонятно, что имеется в виду под Windows и Контекст. 
 smile 

PM MAIL   Вверх
shara
Дата 5.8.2011, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 29.6.2004
Где: печенье?

Репутация: 2
Всего: 2



Во первых драйвер это НЕ программа в привычном для нас смысле. Это скорее набор функций, которые подсовываются ОС, и которые она использует для выполнения неких действий. Посему драйвер лучше сравнивать с ДИНМИЧЕСКОЙ библиотекой функций.


Рискну предположить что вышеупомянутый "контекст устройства" это собсно программа которая его (драйвер) использует\обращается.
К примеру, при попытке некой программы прочесть некий файл, функции драйвера жесткого диска реализующие чтение будут вызваны непосредственно в адресном пространстве этой программычитай драйверу будет видно всю память программы которая к нему обращается




--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
borisbn
Дата 5.8.2011, 14:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Можно ещё предположить, что контекст устройства - это структура с данными о конкретном устройстве (шина, номер слота и т.п.). Дело в том, что для всех устройств одного типа создаётся один драйвер, в который приподключении устройства ОС передаёт этот самый контекст.
Код

NTSTATUS DriverEntry(IN DRIVER_OBJECT* pDriverObject, IN UNICODE_STRING* pRegistryPath)
{
...
    pDriverObject->DriverExtension->AddDevice = AddDeviceDispatch;
...
    return STATUS_SUCCESS;
}

Цитата

NTSTATUS AddDeviceDispatch(DRIVER_OBJECT* pDriverObject, DEVICE_OBJECT* pPDO)




--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Hagrael
Дата 9.8.2011, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Драйвер - набор функций, посылающих нужные сигналы устройству
Контекст устройства - структура данных, содержащая информацию об устройстве. Используется для взаимодействия с драйвером (но почему нельзя напрямую использовать функции драйвера?)
GDI - библиотека, дающая программе контекст видеокарты?

Не мог бы кто-нибудь из участников форума сделать схему взаимодействия программы и видеокарты?
PM MAIL   Вверх
borisbn
Дата 9.8.2011, 10:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(Hagrael @  9.8.2011,  09:54 Найти цитируемый пост)
Драйвер - набор функций, посылающих нужные сигналы устройству

 smile 
Цитата(Hagrael @  9.8.2011,  09:54 Найти цитируемый пост)
Контекст устройства - структура данных, содержащая информацию об устройстве. Используется для взаимодействия с драйвером 

 smile 
Цитата(Hagrael @  9.8.2011,  09:54 Найти цитируемый пост)
но почему нельзя напрямую использовать функции драйвера?

Ф-ции драйвера (в Windows) работают на уровне ядра. Напрямую вызывать ф-ции, работающие на уровне ядра можно только из ядра. Из пользовательского режима они "не видны". Для того, чтобы их всё-таки вызвать, существует API-функция DeviceIoControl. Вот почитай http://ru.wikipedia.org/wiki/Кольца_защиты
Вообще, схема общения программы с устройством практически всегда такая:
Цитата

HANDLE hDevice = CreateFile( <символическое имя устройства>, ... );
DeviceIoControl(
    hDevice,
    <код команды>,
    <входные данные команды>,
    <кол-во вх.дынных>,
    <выходные данные команды>,
    <кол-во вых.дынных>
);
CloseHandle( hDevice );

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

Добавлено @ 11:06
Предположим, что драйвер видеокарты создаёт symlink "video" и умеет выполнять одну команду "нарисовать точку". Входные параметры команды: x, y, color. Выходных нет.
В GDI есть ф-ции "установить цвет", "переместить указатель рисования" и "нарисовать линию от указателя до точки (x,y)" (псевдо(очень псевдо)код):
Код

#define IOCTRL_SET_PIXEL 42
struct Pixel {
    int x;
    int y;
    int color;
};

SetColor( context, color ) {
    context->color = color;
}
MoveTo( context, x, y ) {
  context->cur_x = x;
  context->cur_y = y;
}
LineTo( context, x, y ) {
    HANDLE hVideo = CreateFile( "\\\\.\\video", ... );
    int cur_x = context->cur_x;
    int cur_y = context->cur_y;
    do {
        // вычисление очередной точки (cur_x, cur_y)
        Pixel pix;
        pix.x = cur_x;
        pix.y = cur_y;
        pix.color = context->color;
        DeviceIoControl( hVideo, IOCTRL_SET_PIXEL, &pix, sizeof( pix ), NULL, 0 );
    }
    while ( cur_x != x && cur_y != y );
    context->cur_x = cur_x;
    context->cur_y = cur_y;
    CloseHandle( hVideo );
}


Это сообщение отредактировал(а) borisbn - 9.8.2011, 11:11


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Hagrael
Дата 12.8.2011, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Цитата(borisbn @  9.8.2011,  10:54 Найти цитируемый пост)
не зная кода команды, сколько и каких данных эта команда требует и т.п., обращаться к драйверу нельзя, поэтому часто делают "прослойку" (набор библиотек/ф-ций) между драйвером и пользовательскими программами. GDI - как раз такая "прослойка"

А откуда GDI узнает о том, какая команда у драйвера что требует? Ведь драйвера же разные бывают... Ведь разные?  smile 
PM MAIL   Вверх
borisbn
Дата 12.8.2011, 15:11 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(Hagrael @  12.8.2011,  14:37 Найти цитируемый пост)
А откуда GDI узнает о том, какая команда у драйвера что требует?

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

Цитата(Hagrael @  12.8.2011,  14:37 Найти цитируемый пост)
Ведь драйвера же разные бывают...

для однотипных устройств драйвера "выглядят" для ОС (вернее для GDI) одинакого. Отличаются они внутренней начинкой.

Плюс к тому, наверняка у Microsoft имеется договорённость с nVidia, ATI, Intel, etc. о том, что если они хотят расширить список команд и/или параметров, то они сообщают об этом в Microsoft, а те в очередной версии учитывают эти расширения.




--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Hagrael
Дата 12.8.2011, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



borisbn, понятно! А GDI предоставляет ну совсем уж верхоуровневый API, я правильно понял? И, получается, для каждой ОС свои драйвера?

Цитата(borisbn @  12.8.2011,  15:11 Найти цитируемый пост)
Плюс к тому, наверняка у Microsoft имеется договорённость с nVidia, ATI, Intel, etc. о том, что если они хотят расширить список команд и/или параметров, то они сообщают об этом в Microsoft, а те в очередной версии учитывают эти расширения.

Т. е. на старых версиях GDI эти новые драйвера будут:
а) пахать не в полную мощь
б) вообще не будут пахать

P.S.: Тут, как я понял, идет речь о драйверах, выпускаемых nVidia, ATI и Intel, а не самих устройствах. Я правильно понял?
PM MAIL   Вверх
borisbn
Дата 12.8.2011, 20:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(Hagrael @  12.8.2011,  18:35 Найти цитируемый пост)
А GDI предоставляет ну совсем уж верхоуровневый API, я правильно понял? 

 smile 
Цитата(Hagrael @  12.8.2011,  18:35 Найти цитируемый пост)
И, получается, для каждой ОС свои драйвера?

а ты когда-нить слышал о кроссплатформенных драйверах ? Я - нет.

Цитата(Hagrael @  12.8.2011,  18:35 Найти цитируемый пост)
а) пахать не в полную мощь

не уверен, т.к. всю поднаготную драйверов/ОС/GDI не знаю, но думаю, что да, все ф-ции новых драйверов работать не будут на старом ГДИ

Цитата(Hagrael @  12.8.2011,  18:35 Найти цитируемый пост)
Тут, как я понял, идет речь о драйверах, выпускаемых nVidia, ATI и Intel, а не самих устройствах. Я правильно понял?

а вот это я не понял. чойта ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
alexvs11
Дата 12.8.2011, 21:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 2
Всего: 10



Цитата(Hagrael @  12.8.2011,  18:35 Найти цитируемый пост)
borisbn, понятно! А GDI предоставляет ну совсем уж верхоуровневый API, я правильно понял? И, получается, для каждой ОС свои драйвера?

кроме того, что это API - это HAL

Цитата(borisbn @  12.8.2011,  20:32 Найти цитируемый пост)
а ты когда-нить слышал о кроссплатформенных драйверах ? Я - нет.

а какже виндовские сетевые драйвера, отлично в никсах работают, только через ndiswrapper smile 
PM MAIL   Вверх
Hagrael
Дата 13.8.2011, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Цитата(borisbn @  12.8.2011,  20:32 Найти цитируемый пост)
а вот это я не понял.

Я имел в виду, что компании Microsoft не интересны нововведения в "API видеокарты" (если так можно назвать самые низкоуровневые команды, посылаемые непосредственно видеокарте от драйвера), что компанию Microsoft интересуют исключительно нововведения в драйверах данных фирм, т. к. GDI будет работать именно с ними. GDI ведь не будет абсолютно никак взаимодействовать напрямую с видеокартой? И, выходит, что у API видеокарты нет никаких стандартов и спецификации, правильно? А с появлением новых версий GDI контекст устройства ведь тоже может принять новые возможности, ведь так?
PM MAIL   Вверх
borisbn
Дата 13.8.2011, 09:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(Hagrael @  13.8.2011,  07:50 Найти цитируемый пост)
И, выходит, что у API видеокарты нет никаких стандартов и спецификации, правильно?

Не совсем. Минимальное API как-то стандартизировано. Когда ты только ставишь винду или заходишь в Windows в безопасном режиме включается "универсальный" драйвер от самих мелкомягких. Он знает о видеокарте только то, что она умеет отображать пикселы в нужном месте и нужным цветом. Никаких 3D-акселераций не используется.




--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1095 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.