DPC和ISR的理解

首先来说中断

计算机的中断分为软中断和硬中断,即IRQLDIRQL,共32个级别,从0~31级别依次提升,0~2属于软中断
这里写图片描述
一般线程运行于PASSIVE_LEVEL级别,如果不想在运行时切换到其他线程,可以将中端级别提升致DISPATCH_LEVEL,但线程在这个中端级别下运行无法使用分页内存,因为无法触发分页中断。可能有些内存地址访问不了,蓝屏。

当硬件的中断信号发给CPU之后,CPU会把IRQL级别提升致DIRQL,操作系统开始执行ISR(中断服务例程)。流程大概是这个样子
这里写图片描述

但是如果ISR的代码过于复杂,我理解的是首先会影响系统的正常运行,PASSIVE_LEVEL级别的代码根本不会执行。其次影响其他硬件中断的响应。所以这时引入了DPC执行例程。ISR会把一些不重要的代码,放入DPC队列,当执行程序从DIRQL降到DISPATCH_LEVEL时,会自动执行DPC队列里面的代码。


ISR:Interrupt Service Routines (中断服务例程

必须马上做的事情,比如硬件中断,响应鼠标点击

DPC:Deferred Procedure Call Details(延迟过程调用

可以推迟做的事情,比如大数据拷贝,U盘拷贝电影。

APC: Asynchronous Procedure Calls(异步过程调用

An asynchronous procedure call (APC) is a function that executes asynchronously in the context of a particular thread. When an APC is queued to a thread, the system issues a software interrupt. The next time the thread is scheduled, it will run the APC function. An APC generated by the system is called a kernel-mode APC. An APC generated by an application is called a user-mode APC. A thread must be in an alertable state to run a user-mode APC.

Windows中断请求级别

IRQLInterrupts Masked OffDriver Routines
PASSIVE_LEVELNonePASSIVE_LEVEL
APC_LEVELAPC_LEVEL interruptsAPC_LEVEL
DISPATCH_LEVELDISPATCH_LEVEL ,APC_LEVEL interruptsDISPATCH_LEVEL
DIRQLAll interrupts at IRQL<= DIRQLDIRQL
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值