![]() |
|
|
![]()
|
|
| netex |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 7.3.2006 Репутация: нет Всего: нет |
Нужен совет. Немного поясню задачу. Хочу сделать обработчик физического прерывания.
Сделать его не зависимым от Windows, т.е. пришло прерывание, процессор перешел по IDT, и никакие IRQL не мешали. Обработчик не на уровне ОС, а на уровне "железа" и работы процессора. Вот примерный план действий: В однопроцессорной системе делаем обработчик прерывания. Изменяем соответствующий вектор в IDT.(изменяем адрес обработчика, тип - шлюз прерывания) В обработчике НЕ разрешаем прерывания.(sti сделаем при выходе) Значит ли это, что система не сможет получить управление до команды sti? (т.е. Windows переключить задачу) В случае аппаратного прерывания в APIC будут ли маскироваться прерывания с меньшим(таким же) приоритетом, что и текущее, которое мы обрабатываем?(в i8259A маскируются и после обработки нужно послать 20h в порт 20h) Можно ли вызывать из такого обработчика (с запрещенными прерываниями) вызывать функции ОС (например: поместить DPC в очередь или RaiseIRQL)? Если у вас есть другие идеи, расскажите о них, буду только благодарен. |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Модификация IDT недостаточна - windows (по крайней мере в 98 система использует РАЗНЫЕ idt). Необходимо отслеживать сообщения системы и следить за IDT.
Если приоритет твоего прерывания меньше, чем у, скажем прерывания таймера, то такой обработчик может быть прерван другим прерыванием (по крайней мере так пишут...). Конечно, можно маскировать контроллер. sti само будет сделано на выходе - ведь обычная команда iret восстанавливает флаги. Не очень понял в чем задача - но полагаю что нужно разобрать какой-нибудь несложный драйвер устройства и посмотреть как это делают другие... см. также статьи Four-F на wasm.ru -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| netex |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 7.3.2006 Репутация: нет Всего: нет |
В однопроцессерной системе ОДНА IDT, так как процессор один.
А прерывания таймера просто маскируем cli. Обработчик прерывания должен быть независим от винды. (никаких структур данных или вспомогательных вызовов для "регистрации" в системе) После обработки прерывания нужно ли что-то делать с APIC, как например с i8259A (послать 20h в порт 20h)? Вообще хотел получить побольше информации как сделать обработчик на многопроцессорной системе. Каким образом можно поправить все IDT на всех процессорах? |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |