DPC和ISR的理解
首先来说中断
计算机的中断分为软中断和硬中断,即IRQL和DIRQL,共32个级别,从0~31级别依次提升,0~2属于软中断
一般线程运行于PASSIVE_LEVEL级别,如果不想在运行时切换到其他线程,可以将中端级别提升致DISPATCH_LEVEL,但线程在这个中端级别下运行无法使用分页内存,因为无法触发分页中断。可能有些内存地址访问不了,蓝屏。
当硬件的中断信号发给CPU之后,CPU会把IRQL级别提升致DIRQL,操作系统开始执行ISR(中断服务例程)。流程大概是这个样子
但是如果ISR的代码过于复杂,我理解的是首先会影响系统的正常运行,PASSIVE_LEVEL级别的代码根本不会执行。其次影响其他硬件中断的响应。所以这时引入了DPC执行例程。ISR会把一些不重要的代码,放入DPC队列,当执行程序从DIRQL降到DISPATCH_LEVEL时,会自动执行DPC队列里面的代码。
DPC和ISR的理解的更多相关文章
- CreateFileMapping使用方法
CreateFileMapping的MSDN翻译和使用心得 測试创建和打开文件映射的时候老是得到"句柄无效"的错误, 细致看了MSDN以后才发觉是函数认识不透, 这里把相关的解 ...
- IO Processing
Types of IO IRP Buffer Management 首先区分一下page的内存与nonpaged的内存,内存如果用页管理,就难免面对被swap out的命运:但是如果用nonpaged ...
- 第二十七篇:Windows驱动中的PCI, DMA, ISR, DPC, ScatterGater, MapRegsiter, CommonBuffer, ConfigSpace
近期有些人问我PCI设备驱动的问题, 和他们交流过后, 我建议他们先看一看<<The Windows NT Device Driver Book>>这本书, 个人感觉, 这本书 ...
- 理解和使用NT驱动程序的执行上下文
理解Windows NT驱动程序最重要的概念之一就是驱动程序运行时所处的“执行上下文”.理解并小心地应用这个概念可以帮助你构建更快.更高效的驱动程序. NT标准内核模式驱动程序编程的一个重要观念是某个 ...
- Linux内核分析之理解进程调度时机跟踪分析进程调度与进程切换的过程
一.原理分析 1.调度时机 背景不同类型的进程有不同的调度需求第一种分类I/O-bond:频繁的进行I/O:通常会花费很多时间等待I/O操作的完成CPU-bound:计算密集型:需要大量的CPU时间进 ...
- 通过源码理解UST(用户栈回溯)
UST原理:如果gflags标志中包含了UST标志,堆管理器会为当前进程分配一块内存,这个内存区域就是UST数据库(user-mode stack trace database),并建立一个STACK ...
- systick优先级的理解
sysTick系统嘀嗒定时器并非STM32独有的,它是Cortex内核的部分,CM3为它专门开出一个异常类型,并且在中断向量表中占有一席之地(异常号15).这样它可以很方便的移植到不同厂商出CM3内核 ...
- 分布式:2PC,3PC,Paxos,Raft,ISR [转]
本文主要讲述2PC及3PC,以及Paxos以及Raft协议. 两类一致性(操作原子性与副本一致性) 2PC协议用于保证属于多个数据分片上的操作的原子性.这些数据分片可能分布在不同的服务器上,2PC协议 ...
- kafka 日常使用和数据副本模型的理解
kafka 日常使用和数据副本模型的理解 在使用Kafka过程中,有时经常需要查看一些消费者的情况.Kafka健康状况.临时查看.同步一些数据,又由于Kafka只是用来做流式存储,又没有像Mysql或 ...
随机推荐
- 分布式之Zookeeper使用
在zookeeper中可分为单一模式和集群模式. 具体详细的配置与操作,可参见:http://blog.csdn.net/shatelang/article/details/7596007. 单一模式 ...
- Vi命令备忘
备忘 Ctrl+u:向文件首翻半屏: Ctrl+d:向文件尾翻半屏: Ctrl+f:向文件尾翻一屏: Ctrl+b:向文件首翻一屏: Esc:从编辑模式切换到命令模式: ZZ:命令模式下保存当前文件所 ...
- 2014ACM/ICPC亚洲区北京站
1001 A Curious Matt 求一段时间内的速度单位时间变化量,其实就是直接求出单位时间内的,如果某段时间能达到最大那么这段时间内必定有一个或一小段单位时间内速度变化是最大的即局部能达到最 ...
- resharper 改为VS自带的F12功能(转到定义)
1:如何设置vs默认的快捷键方式: 2:重新设置resharper的F12及其其它选项设置: 3.如果还需要使用快捷键 Alt+ENTER 1.帮你实现某个接口或抽象基类的方法 2.提供你处理当 ...
- plsql配置远程连接数据库
1.先安装plsql.地址:http://pan.baidu.com/s/1hqGbATI 2. 解压缩 instantclient_11_2(这个客户端可以在网上找精简版的),找到以下路径 \i ...
- 使用sublimehighlight 将文本 转化html
a = "aaa" b = "bbb" c = "ccc" final = a + b + c print final import sys ...
- jQuery获取输入框并设置焦点
$(':input:enabled:visible:first').focus(); $("input:text:visible:first").focus(); 表单元素选择器: ...
- STL插入删除和查询测试
博客园的markdown不知道怎么插入C++代码,只好放弃了..本文在我的blog发布:http://jwk000.github.io/2015/09/02/20150902/
- Vue - 在v-repeat中使用计算属性
1.从后端获取JSON数据集合后,对单条数据应用计算属性,在Vue.js 0.12版本之前可以在v-repeat所在元素上使用v-component指令 在Vue.js 0.12版本之后使用自定义元素 ...
- C# 解析JSON的几种办法
欲成为海洋大师,必知晓海中每一滴水的真名. 刚开始只是想找一个转换JSON数组的方法,结果在MSDN翻到一大把. 搜索过程中免不了碰到一大堆名词:WCF => DataContract => ...