Реализация DPC

Тема в разделе "WASM.NT.KERNEL", создана пользователем xerox, 21 авг 2008.

  1. xerox

    xerox New Member

    Публикаций:
    0
    Регистрация:
    21 авг 2008
    Сообщения:
    3
    Привет!

    Собственно, есть несколько неясностей насчет того, как это устроено в винде

    Т.е., работает какой-то поток, тут приходит прерывание от таймера. Процессор переходит на адрес обработчика в записи IDT для таймера.
    Тут сразу вопрос: как сопоставляются прерывания и номера записей в IDT? Т.е., есть некоторый стандартный список прерываний, что таймер, это допустим номер 13(условно), а как моему устройству сопоставляется, к примеру номер 55?

    Дальше. Обработчик таймера смотрит, вышло ли время потока (наверно, в объекте потока?), если вышло, то генерирует прерывание DPC, создает объект DPC и ставит его в очередь.

    Дальше, IRQL процессора (кстати, как реализовано — просто какая-то глобальная переменная?) падает от TIMER_LEVEL до PASSIVE_LEVEL
    И тут... как процессор узнает, что было прерывание DPC? Он же отбрасывал прерывания ниже уровня TIMER_LEVEL?

    И что значит отбрасывал? Есть прерывание и обработчик, процессор все равно же вызывает обработчик, если у него не вызвана команда cli, только смотрит на текущий уровень IRQL?

    Каша...

    Соломона и Руссиновича читал ))
     
  2. reversecode

    reversecode Guest

    Публикаций:
    0
    rsdn.ru хватит