DPC
Відкладений виклик процедури (англ. Deferred Procedure Call, DPC) — механізм операційної системи Microsoft Windows, який дозволяє відкласти високопріоритетні завдання (наприклад, обробника переривань) для подальшого виконання заради потрібних, але менш пріоритетних завдань, таким чином, щоб уникати тривалої роботи при підвищених рівнях IRQL. Це дозволяє швидко обробити драйвери пристроїв та інших споживачів подій низького рівня, і планувати некритичну додаткову обробку для виконання з більш низьким пріоритетом.
Суть DPC
При виникненні переривання, управління передається обробнику переривання. Існує ряд факторів, що обмежують можливості коду обробника переривання :
- Загальною практикою є вимога мінімізації часу роботи обробника переривання. Тому необхідно утриматися від виконання ресурсоємних та довгих дій безпосередньо всередині обробника переривання.
- В ОС Windows код обробника переривання виконується на високому IRQL, що сильно обмежує набір доступних оброблювачу ядерних функцій : багато функцій вимагають набагато нижчого IRQL для свого виклику.
Розв'язанням цієї проблеми є підхід, при якому безпосередньо в обробнику виконуються лише найкритичніші операції, а інші дії відкладаються до тих пір, поки не з'явиться відносно вільний процесорний час, а IRQL не опуститься до допустимого значення (DISPATCH_LEVEL). Тоді ці дії будуть виконані в рамках виклику відкладеної (її виконання було відкладене до цього моменту) процедури.
На відміну від звичайного виклику процедури, при якому, фактично, управління відразу ж передається коду процедури, при DPC-виклику передача керування процедурі не відбувається — замість цього адреса процедури і параметри поміщаються в спеціальну чергу, звану DPC черга. Коли настає «сприятливий» час, відкладена процедура викликається по-справжньому.
Таким чином, обробник переривання виконує тільки найнеобхідніші дії і здійснює відкладений виклик процедури, яка виконає всі інші дії, потрібні в рамках обробки переривання, але не потребують підвищеної терміновості.