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

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

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

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

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

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

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

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

Online Online
Пол: Мужской

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
Технический
Администратор

Online Online
Пол: Мужской

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