HELP [ DPC APC IRQL ]

Тема в разделе "WASM.WIN32", создана пользователем netex, 5 дек 2005.

  1. netex

    netex New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    114
    Адрес:
    Russia
    Привет! Читаю книгу Соломона и Руссовича и не очень понял

    как работает механизм DPC и APC, а именно их посылка и назначение (объясните по-понятнее)



    И еще, как я понял IRQL это просто еще одна шкала приоритетов в которую включены аппаратные прерывания от контроллера прерываний и так называемые уровни приоритетов программ.
     
  2. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Не путай прерывания аппаратные и программные. Для примера есть два потока, которые должны выполняться, у них есть свои приоритеты (кто главнее) диспетчер памяти, н-р на уровне DISPATCH_LEVEL (DPL для краткости), другой может быть на уровне PASSIVE_LEVEL (PSL) система обнаружила, что поток PSL слишком долго ждал и должен проснуться, а в этот момент вмешивается диспетчер памяти -> поток с PSL не пробуждается до тех пор, пока поток с DPL не отработает свой квант или не вернёт квант потоку с PSL. За приоритетами следит ядро. Если н-р вызывать ExAllocatePool, то надо в DDK посмотреть на каком приоритете должна вызываться эта ф-ция "Callers of ExAllocatePool must be running at IRQL <= DISPATCH_LEVEL"

    DPC - очередь. н-р есть аппаратное прерывание от клавиатуры. Драйвер должен очень быстро считать код из порта и отложить обработку этого кода на потом, т.к. это очень высокий IRQL и долгая обработка может затормозить систему. При падении IRQL ниже DPL вызывается отложенная процедура, в которой он и обработает код.

    APC - тоже самое, только уровень ниже DPL

    Как-то несвязанно, но смысл может и дойдёт :) Лучше всего ответит Four-F возможно и я неверно понял :)
     
  3. netex

    netex New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    114
    Адрес:
    Russia
    Спасибо! почти дошло.

    P.S.

    Я учусь на 3 курсе университета «Дубна», направление «Информатика и вычислительная техника». Интересуюсь системным программированием, работой ядра ОС Windows. Хочу найти интересную работу и товарищей по интересам. Куда можно обратиться?
     
  4. EvilsInterrupt

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

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

    Это не совсем так.



    DPC - Это функция , выполняющая системную задачу менее критичную по времени в сравнении с текущей.



    Но это всего лишь набор правил, разработчику никто не мешает написать всю работу DPC в ISR !



    ТО что ты говорил об очереди, это очередь куда складываются все прерывания, которые должно выполнить ядро.



    В идеале должно работать так, срабатывает Аппаратное прерывание, тогда ISR инициализурует DPC объект куда сует адрес DPC-обработчика и в зависимости от приоритета, а его может указывать драйвер, DPC-объект помещается в очередь или же направляется конкретному процессору.



    to Four-F

    Если я не прав, то в чем?
     
  5. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Теримином DPC могут обозначаться функция, очередь и объект.



    При запуске инициализируется DPC-объект (структура _KDPC), т.е KeInitializeDpc пихает адрес DPC-функции в структуру _KDPC.



    IRS ставит этот DPC-объект в DPC-очередь, вызовом KeInsertQueueDpc. DPC-очередь - это просто двусвязный список в структуре _KPRCB.



    Кто-то там просматривает эту DPC-очередь, когда IRQL понизится, отвязывает _KDPC, смотрит в неё и вызывает DPC-функцию там прописанную.



    А если вообще, то DPC - это способ отложить обработку прерывания на время, когда IRQL упадёт ниже DISPATCH_LEVEL.



    См. "DPC Objects and DPCs" в DDK, а ещё лучше dpcobj.c