Про опустошение очереди DPC (теория)

Тема в разделе "WASM.WIN32", создана пользователем EvilsInterrupt, 27 апр 2006.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Вот из Руссиновича на стр 114:

    "Обычно ядро начинает опустошение очереди DPC с прерывания уровня DPC/Dispatch"



    Интересно, а это как? Сам же в книге пишет, что нельзя прервать поток прерыванием DISPATCH,таким же прерыванием



    Из оригинала:

    "NT usually initiates DPC queue draining with a software interrupt whose associated IRQL is Dispatch Level. "



    Блин из труда на оригинальном языке, лучше выражено. Как я понял DPC объекты еще содержат IRQL, если да то вопрос отпадает.



    Но нет же:

    nt!_KDPC

    +0x000 Type : Int2B

    +0x002 Number : UChar

    +0x003 Importance : UChar

    +0x004 DpcListEntry : _LIST_ENTRY

    +0x00c DeferredRoutine : Ptr32

    +0x010 DeferredContext : Ptr32 Void

    +0x014 SystemArgument1 : Ptr32 Void

    +0x018 SystemArgument2 : Ptr32 Void

    +0x01c Lock : Ptr32 Uint4B

    нету тута IRQL никакого!
     
  2. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    И что тут непонятного? Обработка DPC начинается после понижения IRQL до DISPTCH_LEVEL (имеется в виду, что до этого DPC был задан в ISR с более высоким IRQL). Если DPC задается на IRQL < DISPATCH, то его обработка начинается немедленно. Никакие потоки на DISPTCH_LEVEL при этом не прерываются.



    З.Ы. тебе еще не надоело учить голую теорию? Имхо давно пора с ней заканчивать и переходить к практике.
     
  3. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Ms Rem

    >тебе еще не надоело учить голую теорию?

    Как же возводить стены, если еще надежного фундамента нет. Пример тому мой дом, где я живу. Вроде обычная 5ти этажка, а по проекту 9ти этажка, почему так? Да потому что фундамент Ху..й вот и 5ти этажка получилась!



    >И что тут непонятного?

    Смотрю запись в книге:





    Исходные данные:

    сейчас выполняется поток1 и его IRQL равен DISPATCH.



    Факт:

    любое аппратное прерывание его может прервать! ибо DIRQL > DISPATCH_LEVEL.



    Вывод:

    Следовательно когда я двину мышью поток забэкапится, и начнет выполняться рутина закрепленная за конкретным IRQ, после завершения работы рутины, поток1 вновь продолжает работу.



    Это-то понятно.



    Нюанс:

    но позавершению любой DPC ядро прежде чем понизить IRQL глядит, а нету ли DPC?



    Почему они могут там находиться:

    Во время выполнения потока1 в DPC-очередь могли заполнить рутины постарше с IRQL > DISPATCH_LEVEL.



    Вот смотрит оно и начинает опустошать ее, в случае если там есть эти объекты. Но ведь ядро еще не понижает IRQL!

    (стр. 113 "Системные механизмы" М.Руссинович,Д.Соломон 2005 год)



    А тут Руссинович пишет:



    "Обычно ядро начинает опустошение очереди DPC с прерывания уровня DPC/Dispatch"



    Вопрос:

    Зачем ядро, по словам Руссиновича, должно генерировать DPC, если оно уже имеет IRQL равный DISPATCH_LEVEL.



    ЗЫ:

    Сорцы винды, будут еще не скоро, а матчасть читаю и усиленно-внимательно!
     
  4. ________

    ________ Дзынь Дзынь Дзэ Линь

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    24
    Адрес:
    GetAllocPlace{x,y,z}
    Этот руссинович тут такого наворотил что черт ногу сломит.В его рисунках столько загадок.В от в этом например что значит молния?
    [​IMG]
     
  5. defaultplayer

    defaultplayer New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    214
    генерация прерывания