Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Аппаратные прерывания  (Прочитано 7609 раз)
0 Пользователей и 1 Гость смотрят эту тему.
netex
Гость
« : 08-03-2006 04:00 » 

Немного поясню задачу. Хочу сделать обработчик физического прерывания.
Сделать его не зависимым от Windows, т.е. пришло прерывание, процессор перешел по IDT, и никакие IRQL не мешали.
Обработчик не на уровне ОС, а на уровне "железа" и работы процессора.
Вот примерный план действий:
В однопроцессорной системе делаем обработчик прерывания.
Изменяем соответствующий вектор в IDT.(изменяем адрес обработчика, тип - шлюз прерывания)
В обработчике НЕ разрешаем прерывания.(sti сделаем при выходе)

Значит ли это, что система не сможет получить управление до команды sti? (т.е. Windows переключает задачи именно по таймеру irq0?)
В случае аппаратного прерывания в APIC будут ли маскироваться прерывания с меньшим(таким же) приоритетом, что и текущее, которое мы обрабатываем?(в i8259A маскируются и после обработки нужно послать 20h в порт 20h)

После обработки прерывания нужно ли что-то делать с APIC, как например с i8259A (послать 20h в порт 20h)?

Можно ли вызывать из такого обработчика (с запрещенными прерываниями) вызывать функции ОС (например: поместить DPC в очередь или RaiseIRQL)?

Если у вас есть другие идеи, расскажите о них, буду только благодарен.

Вообще хотел получить побольше информации как сделать обработчик на многопроцессорной системе.
Каким образом можно поправить все IDT на всех процессорах?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 08-03-2006 09:21 » 

netex, а цель то какова? Я думаю, тебе стоит обратится в раздел драйверов.

Цитата
Значит ли это, что система не сможет получить управление до команды sti?
Через аппаратные исключения, программные прерывания и прямые вызовы.

Цитата
В случае аппаратного прерывания в APIC будут ли маскироваться прерывания с меньшим(таким же) приоритетом...
Ну, так это же маскируемые прерывания и ты их уже вырубил через sti.

Цитата
После обработки прерывания нужно ли что-то делать с APIC...
Да - сбросить это прерывание.

Опять же, ты ставишь сложные задачи, а цели не видно. Зачем все это? Чем тебя не устраивает ОС?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
netex
Гость
« Ответ #2 : 09-03-2006 02:04 » 

Цель - перехват прерывания ДО операционки.
Да это будет использоваться в драйвере. Будет сидеть процедурка, которая по приходу прерывания произведет действия, а далее вернет управление на стандартный обработчик операционки. ОС не должна ничего знать об этом.
ОС не устраивает (win2000) своей ужасно непонятной функцией IOConnectInterrupt, и тем более она не дает полного перехвата, а лишь сообщает о произошедшем прерывании.
Вообще при разработке простого перехватчика в защищенном режиме столкнулся с кучей вопросов.

"После обработки прерывания нужно ли что-то делать с APIC... Да - сбросить это прерывание."
Что значит сбросить? Каким образом?

P.S.    RXL можешь перекинуть тему в раздел Driver...

Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 09-03-2006 18:19 » 

Могу порекомендовать, как пример драйвера APIC, исхлдники Linux. См. в исходниках файл arch/i386/kernel/io_apic.c

Тему перенес.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 10-03-2006 13:03 » 

IoConnectInterrupt - пример использования есть подчти в любом примере DDK... а так - вы гораздо больше намучаетесь, и с совместимостью наверняка будут проблеммы.
ИМХО
а функция в общем то регестрит ваш калбэк на данное прерывание. вот и все) далее все зарегестренные калбэки на это прерывание вызываются поочереди пока кто первый не скажет что "это мое" и не обработает его.

PS и это не самая ужасно непонятная функция ОС Ага
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #5 : 10-03-2006 16:30 » 

Если у вас есть другие идеи, расскажите о них, буду только благодарен.

У меня по этому только одна идея- в будущих версиях и в 64 разрядных текущих это работать не будет, а будет вызывать BSOD, так как переписан IDT что система засечет и упадет.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines