Понятие "Отложенный IRQ"

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

  1. EvilsInterrupt

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

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Который день перечитываю стр.100 и 101 книги М.Руссиновича,Д.Соломона. Но так и не могу понять понятие "Отложенный IRQ".



    Также не понятны действия на след. ситуацию:

    К примеру произошло аппаратное прерывание, тогда ядро сохранило текущую ситуацию в стек ядра, передало управление на обработчик. Последний поднял IRQL, но как я понял не маскирует прерывания. После обработки он обратно восстанавливает IRQL, но тут между исходным и когда был повышенный IRQL возникает прерывание с более низким IRQL, все повторяется и для него. Но ведь проц может находиться в таком режими довольно долго!



    Как из этой ситуации выходят? То есть ли лимит на количество обработанный прерываний?
     
  2. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Ищи сатьи "Exploring Irql" и "Understanding IRQL" - читай. Потом читай пост "Device Interrupt priority - Reviewing Jose Flores" на http://www.osronline.com Там Jake Oshins ( дядька из "NT Kernel Team" ) разъясняет кое-что, в том числе и что такое "Lazy IRQL".



    На http://www.osronline.com, кстати есть как минимум две статьи по этой теме:

    "Interrupt Handling Changes in Windows"

    "Stop Interrupting Me -- Of PICs and APICs"
     
  3. EvilsInterrupt

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

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

    Я с горем пополам разобрался куда че жать и вроде доступны NTDEV,NTFSD, поиска не нашел поэтому вопрос - где искать топик?
     
  4. EvilsInterrupt

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

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

    Спасибо,разобрался! :)


    Код (Text):
    1. You asked for an evaluation....
    2.  
    3. I wish that Jose had talked to me, or somebody who actually works on the
    4. code, before he wrote that.  He missed some pretty fundamental points.


    Это?
     
  5. EvilsInterrupt

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

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

    Разобрался вроде, проверь если не трудно:

    В IMR PIC8259A было: Маска0 и IRQL(0)

    1.Произошло прерывание с более высоким приоритетом IRQ(1), тогда HAL повышает IRQL до IRQL(1) но не трогает IMR(регистр масок).

    2. Пришло прерывание по IRQL(2) < IRQL(1) тогда HAL ставит маску2 в соответствии IRQL(1) и откладывает его обработку.



    Прерывание не теряется, т.к. пришедшие прерывания хранятся в регистре прерываний(не знаю какой регистр).



    Отсюда:

    Если не приходило прерываний ниже текущего IRQL, то и контроллеру 8259A не зачем обращаться!



    Так все происходит?



    И еще: для каждого прерывания в контроллере прерываний, регистре масок есть свой бит чтобы именно это прерывание запрещать, так?
     
  6. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    EvilsInterrupt

    У тебя каша в голове... Обработчики этих прерываний должны оооочень быстро их обрабатывать, если не получается, то ставят эти задания в очередь, чё бы позже их обработать с пониженным IRQL. А за приоритетом следит не HAL.DLL, а сам контроллер, в зависимости от того, как запрограммирован и IRQL тут не причём. IRQL - это, если проще выразиться, уровень вытиснения потоков ;)
     
  7. EvilsInterrupt

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

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

    Еще бы ее не было! :)))
     
  8. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    <font color="gray][ EvilsInterrupt</font><!--color--><font color="gray]: Так все происходит? ]</font><!--color-->



    EvilsInterrupt, пост именно тот. Насчёт "к контроллеру 8259A не зачем обращаться!" по сути верно. Запись в его порты требует времени и lazy IRQL пытается это время сэкономить. IRQ и IRQL - это разные вещи. IRQL(1) - это вообще программное прерывание APC_LEVEL. Используется для синхронизации Asynchronous Procedure Calls. Насчет масок и "своих битов" - хрен знает.
     
  9. EvilsInterrupt

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

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

    А блин, каждый раз моргаю кнопку нижнего индекса :) IRQL(1) это IRQL<sub>1</sub> :) Еще почитаю, напишу подробный механизм, а ты проверишь, если конечно не влом.



    ЗЫ:

    За линки респект, так блин глаза открыли шустро, хотя и суп в голове сварили :)))
     
  10. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    EvilsInterrupt Ты же сам линк выложил "Микропроцессоры", там есть глава "Организация прерываний в микроЭВМ", вот и читай. На 59-ом контроллере ещё в прошлом веке делали компы ;) И нового, практически, ничего не изобрели, только добавили второй, типа, не 8, а 15 (не 16) входов сделали :)))
     
  11. EvilsInterrupt

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

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



    Есть Контроллер прерываний(PIC 8259A) или совместимый с ним, даже

    APIC и то работает так, как будто он 8259А ! Хоть и дает 256 штук

    прерываний. В дальнейшем КП.

    Для объяснения:

    IRQ - аппартное

    IRQL - "приритет прерывания", так выразился Руссинович и в принципе,

    довольно точно, если судить по другим ссылкам

    Номерами в нижнем индексе, буду обозначать состояние а не номер или

    значение!



    Исходная ситуция:

    IRQL<sub>0</sub> и Маска<sub>0</sub>



    1. КП дает IRQ<sub>1</sub>, системный код не маскирует прерывания, то есть маска в IMR регистре КП, как была равно так и остается равной маска<sub>0</sub>!

    Но системный код повышает IRQL до уровня соответствующий аппаратному

    IRQ<sub>1</sub>.



    2. Возникает аппаратное IRQ<sub>2</sub>, оно по рангу младше IRQ<sub>1</sub>,

    тогда, системный код, правит регистр IRM КП устанавливая значения с

    маски<sub>0</sub> на маску<sub>1</sub>, тем самым маскируя Это IRQ<sub>2</sub>

    прерывание, но в другом регистре КП,оно то запоминается!



    3. Обработка IRQ<sub>2</sub>, начинается тогда, когда IRQL понизится.



    Выигрыш:

    Если во время ситуации п.2 не было, то системный код не будет обращаться

    к КП, а это выигрыш!



    Four-F

    прав?
     
  12. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Ты настолько мудрЁно выражаешься, что ввязываться, честно говоря, уже неохота ;) Но поскольку вопрос адресован мне лично...



    Вобщем прав.
     
  13. EvilsInterrupt

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

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

    Спасибо, приму твои слова к сведению и постараюсь выражаться проще

    Вот еще наткнулся на: http://www.ntkernel.com/ тама форум, как на русском так и русском
     
  14. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Там заточка под сеть и посещать его имеет смысл не чаще одного раза в месяц. Иди лучше в "Низкоуровневое программирование" на rsdn.ru