N
netex
Немного поясню задачу. Хочу сделать обработчик физического прерывания.
Сделать его не зависимым от Windows, т.е. пришло прерывание, процессор перешел по IDT, и никакие IRQL не мешали.
Обработчик не на уровне ОС, а на уровне "железа" и работы процессора.
Вот примерный план действий:
В однопроцессорной системе делаем обработчик прерывания.
Изменяем соответствующий вектор в IDT.(изменяем адрес обработчика, тип - шлюз прерывания)
В обработчике НЕ разрешаем прерывания.(sti сделаем при выходе)
Значит ли это, что система не сможет получить управление до команды sti? (т.е. Windows переключает задачи именно по таймеру irq0?)
В случае аппаратного прерывания в APIC будут ли маскироваться прерывания с меньшим(таким же) приоритетом, что и текущее, которое мы обрабатываем?(в i8259A маскируются и после обработки нужно послать 20h в порт 20h)
После обработки прерывания нужно ли что-то делать с APIC, как например с i8259A (послать 20h в порт 20h)?
Можно ли вызывать из такого обработчика (с запрещенными прерываниями) вызывать функции ОС (например: поместить DPC в очередь или RaiseIRQL)?
Если у вас есть другие идеи, расскажите о них, буду только благодарен.
Вообще хотел получить побольше информации как сделать обработчик на многопроцессорной системе.
Каким образом можно поправить все IDT на всех процессорах?
Сделать его не зависимым от Windows, т.е. пришло прерывание, процессор перешел по IDT, и никакие IRQL не мешали.
Обработчик не на уровне ОС, а на уровне "железа" и работы процессора.
Вот примерный план действий:
В однопроцессорной системе делаем обработчик прерывания.
Изменяем соответствующий вектор в IDT.(изменяем адрес обработчика, тип - шлюз прерывания)
В обработчике НЕ разрешаем прерывания.(sti сделаем при выходе)
Значит ли это, что система не сможет получить управление до команды sti? (т.е. Windows переключает задачи именно по таймеру irq0?)
В случае аппаратного прерывания в APIC будут ли маскироваться прерывания с меньшим(таким же) приоритетом, что и текущее, которое мы обрабатываем?(в i8259A маскируются и после обработки нужно послать 20h в порт 20h)
После обработки прерывания нужно ли что-то делать с APIC, как например с i8259A (послать 20h в порт 20h)?
Можно ли вызывать из такого обработчика (с запрещенными прерываниями) вызывать функции ОС (например: поместить DPC в очередь или RaiseIRQL)?
Если у вас есть другие идеи, расскажите о них, буду только благодарен.
Вообще хотел получить побольше информации как сделать обработчик на многопроцессорной системе.
Каким образом можно поправить все IDT на всех процессорах?