您好、欢迎来到现金彩票网!
当前位置:2019欢乐棋牌 > 执行例程 >

驱动开发(11)中断请求级

发布时间:2019-07-08 21:36 来源:未知 编辑:admin

  。请注意,中断请求级和线程优先级是两个不同的概念。线程优先级是让操作系统进行线程调度的,换句话说,是用来操作系统决定如何分配给各个线程分配的时间片段的长度等。而中断请求级是用来让操作系统决定判断是否需要在某个中断出现时打断当前的工作的。

  举个例子,系统调度两个线程,系统会优先调度线程优先级高的线程,线程是用户模式的线程,CPU 在执行这个线程时,处于最低的中断请求级,这时候一个中断出现了,它的中断请求级为 0x0C(假设,下同),CPU 会去执行这个中断,假设这个时候出现了一个中断请求级为 0x09 的中断,那么 CPU 不会去理睬这个中断,等到0x0C的中断处理完毕后,CPU 才会执行 0x09 的中断,执行完毕后恢复到原来的线程,如果这时候还有同样优先级的线程,操作系统通过调度使这两个线程“并行执行”,当这个线程执行完毕后,系统去调度更低优先级的线程。

  驱动程序可以提升/降低中断请求级,通过调用 KeRaiseIrql/KeLowerIrql 内核函数。驱动程序还可以通过 KeGetCurrentIrql 函数得到当前中断请求级。

  1。中断服务例程(ISR)。在最早的计算机上,若需要访问硬件,是需要“轮询”的,即 CPU 给硬件发送一个指令后,就定时询问硬件是否完成请求,显而易见这样效率很差,后来有了“中断设备”,即 CPU 不需要对硬件进行轮询,而是对硬件发送指令后去做其他事情,当硬件完成操作后,会给 CPU 发送一个“中断”,属于“外部中断”,最早的 PC 可以接收16个中断信号,每个信号有他约定的用途,比如0号中断给系统时钟使用,3、4中断是串口设备,14号中断是主硬盘的 ATA 控制(主要 IDE 硬盘)等。然而,“高级可编程中断控制器”(APIC)将中断数量增加到24个,Windows 又对中断的概念进行了扩展,定义了“中断请求级”这一个概念,其中0-2为软件中断,3-31为硬件中断,优先级逐渐递增。当为硬件开发驱动程序时,我们有必要处理硬件的中断信号,当然和裸机编程不同,在 Windows 上我们只需要开发驱动程序并编写“中断服务例程”,即可处理中断。需要注意的是,中断服务例程运行在硬件中断级别!意味着高于任何软件中断,所以在中断服务例程中不要处理太耗时的操作,当然我们有解决方法,但这都是以后博客中需要说的了。

  2。驱动程序的某些代码是工作在比较高的中断请求级上的,并非和应用程序一样都工作在最低的中断请求级上。这意味着在开发驱动程序时,我们需要考虑中断请求级给编写代码带来的影响。比如:DriverEntry工作在 IRQL PASSIVE_LEVEL ,一些派遣函数工作在 IRQL APC_LEVEL, StartIo 例程工作在 IRQL DISPATCH_LEVEL 。

  3。中断请求级等于或高于 IRQL DISPATCH_LEVEL 的代码中不能使用分页内存,只能使用非分页内存。如果不低于 IRQL DISPATCH_LEVEL 中断请求级而使用分页内存,就会引发页故障而导致蓝屏死机。

  这是为什么呢?我们访问的内存都是虚拟内存(线性地址空间),虚拟内存通过处理器的分页机制实现。虚拟内存分为非页内存和分页内存,非页内存不能交换到磁盘上,而分页内存可以暂时转储到磁盘上,一旦一个虚拟内存页面被转储到文件,那么此页面就被打上一个“脏的”标志,一旦程序访问这样的内存页面,就会触发一个“缺页中断”,从而引发异常处理程序,异常处理程序会将页面从磁盘移到物理内存中,并映射到程序试图访问的虚拟内存地址上。

  1。缺页中断工作在 IRQL DISPATCH_LEVEL 中断请求级上,分页内存有可能会被转储到磁盘上的页面文件上,如果 IRQL DISPATCH_LEVEL 的代码访问这些虚拟内存,需要缺页中断来重新将数据放回到物理内存才行,而缺页中断显然是软件中断,工作在 IRQL DISPATCH_LEVEL ,此时缺页中断无法打断当前线程的执行!因此我们的程序访问脏页时就会被系统映射到错误的物理内存,可能会破坏系统,引发系统崩溃,因此高于 IRQL DISPATCH_LEVEL 中断请求级的代码不能使用分页内存。

  2。还有一种说法, IRQL DISPATCH_LEVEL 上的线程不能被线程调度,因为线程调度程序也运行在 IRQL DISPATCH_LEVEL ,因此不能进行没有超时的线程等待操作(这很好理解,线程不能被调度,也就是说必须一直执行当前线程,如果是没有超时的等待,此时就不能转而执行其他线程了),分页内存有可能会被转储到磁盘上的页面文件上,如果 IRQL DISPATCH_LEVEL 的代码访问这些虚拟内存,需要重新将磁盘上的数据放回到物理内存才行,这个过程是调用了 MmReadFromSwapEntry 内核函数,这个函数通过磁盘 I/O 读取被转储磁盘的数据,它会创建一个 IRP 发送到文件系统驱动程序,进而转发到磁盘驱动程序, MmReadFromSwapEntry 会调用 KeWaitForSingleObject 等待 I/O 的完成,而 Timeout 参数设置为0!此时如果为 IRQL DISPATCH_LEVEL ,那么后果可想而知,在 IRQL DISPATCH_LEVEL 无限等待是非法操作,系统直接崩溃。

  4。一些内核函数有中断请求级的要求,使用这些内核函数一定要注意,内核函数可以从它的 MSDN 文档上查找到他能工作的中断请求级范围。

  中断请求级 在设计windows的时候,设计者3将中断请求划分为软件中断和硬件中断,并将这些中断都映射成不同级别的中断请求级(IRQL)。同步处理机制很大程度上依赖于中断请求级。 1.中断请求(IRQ...博文来自:125096

  作者: 郑萌等 出版社: 电子工业出版社 出版年: 2013-9 页数: 284 装帧: 平装 ISBN: 93 本书针对特定硬件平台从零构建Android系统,包括平台移植、应用开发、内核开发以及驱动...

  实现程序在驱动层面的保护;一份用于隐藏进程及其线程的rootkit驱动程序源代码.

  实现程序在驱动层面的保护;分享一份用于隐藏进程及其线程的rootkit驱动程序源代码.

  一、MTK平台和高通平台在器件选型时都要求选择已经验证过的器件,第一步需要QVL验证1)根据硬件原理图和EMMC和DDR厂家的芯片资料,确定EMMC和DDR 64+4,型号如下:EMMC: Samsu...博文来自:zhangbijun1230的专栏

  我要更改某设备(如:MODEM)的“中断请求”,可是当我进入该设备“属性”里面的“资源”选项时,“使用自动配置”的选项框前面打了一个钩,且和“更改设置...”按钮一样,都为灰色、不可按状态。请问该怎样更改?论坛

  协议驱动的开发流程:首先,一个协议驱动调用函数ndisRegisterProtocol()先把自己注册为协议驱动,此举的意义告诉windows,我是一个ndis协议驱动,并将约定好的回调函数的列表告诉...博文来自:keepdoingit的专栏

  本文主要介绍“如何入门Windows驱动开发”和“新手需要掌握哪些知识和动手技能”,大部分是本人探索Windows驱动开发近一月时间的经验之谈。大致包括如下几个方面:1,开发工具、调试工具和调试手段;...博文来自:Sagittarius_Warrior的博客

  PosgtreSQL11支持分区表上的FOREACHROW触发器。目前,只能创建AFTER触发器,还不支持BEFORE触发器。另外,定义触发器时不能指定WHEN子句,也就是不能指定触发条件。...博文来自:Tony.Dong的专栏

  外部中断作业一、填空题1、MCS-51的外部中断有两种触发方式,分别是电平触发方式和边沿 触发方式。在电平触发方式下,当采集到INT0、INT1的有效信号为低电平 时,激活外部中断。2.一个89C51...博文来自:hjf161105的博客

  假设你现在正在爬楼梯,楼梯有n级。每次你只能爬1级或者2级,那么你有多少种方法爬到楼梯的顶部?格式:第一行输入一个数n(n...博文来自:无形的专栏

  1、建立Linux驱动骨架(装载和卸载Linux驱动)  装载卸载 module_init和moudle_exit宏指定。  装载时进行初始化,如:建立设备文件,分配内存地址空间  卸载时进行释放驱动...博文来自:一只奋斗的菜鸟的专栏

  《Windows7设备驱动程序开发》是美国RonaldD.Reeves著的一本关于WDF模型的Windows驱动程序开发教程,适用于Win7和Win10。本文我学习该书的一些笔记,目前主要是一些知识点...博文来自:Sagittarius_Warrior的博客

  某计算机主频是50MHz,采用定时查询的方式控制设备A的I/O,查询程序运行一次所用的时钟周期至少是500.在设备A工作期间,为保证呢个数据不丢失,每秒需要对其查询至少200次,则CPU用于设备A的I...博文来自:Bings Blog

  A、开始;B、PIEIFRx.y=1?是,转到C,否则等待;C、PIEIERx.y=1?是,转到D,否则等待;D、PIEACKx=0?是,转到E,否则等待;E、中断请求发送到CPU;F、IFRx位置1...博文来自:的博客

  项目中遇到个问题,客户端要等服务端操作3到4秒后才能返回结果,这时候用户退出页面ajax请求还在进行,会影响性能。axios中提供了两种方式解决中断ajax问题,这里我就说我用的这种。在main.js...博文来自:的博客

  虚拟键盘驱动的实现和鼠标的相似,如果需要源代码的可以加我的QQ商谈。博文来自:Drifter的专栏

  1、中断屏蔽技术:主要用于多重中断多重中断:(中断嵌套)当CPU正在执行某个中断服务程序时,另一个中断源又提出了新的中断请求,而CPU又响应了这个新的请求,暂时停止正在运行的服务程序,转去执行新的中断...博文来自:dongyanxia1000的专栏

  linux驱动笔试题总结试题取之于网络,用之于民。最近在学习linux驱动,驱动开发在笔试的时候考的知识点是有规律可循的,并且这些面点也是平时驱动工作中的理论指导,深刻的理解这些面点还是很有必要的,所...博文来自:黑色幽默的专栏

  前面所说的中断向量表IDT,有两种表项:一种是保留专用于CPU本身的中断门,主要用于CPU产生的异常以及由用户程序长生的系统调用,这些中断向量处系统调用的0x80之外都在0x20之下。从0x20之上就...博文来自:幸福的杂货铺

  关于中断的优先级有三条原则:1、CPU同时接收到几个中断时,首先响应优先级最高的中断请求;2、正在进行的中断过程不能被新的同级或低行优优先级的中断请求所中断;3、正在进行的低行优优先级中断服务,能被高...博文来自:的博客

  中断响应优先级是由硬件排队线路或中断查询程序的查询顺序决定的,不可动态改变;而中断优先级可以由中断屏蔽字来改变,反映的是正在处理的中断是否比新发生的中断的处理优先级低(屏蔽位为‘0’,对新中断开放),...博文来自:姜兴琪的博客

  1.产品要求裁剪KO,干掉了无用函数和变量,占内存大的数组变量改成了动态申请。感受:其实KO大了也有好处,静态申请效率高啊,KO的大小,大一点嘛,但是产品的需求。。2.产品要求出1G版本,裁剪内次哦,...博文来自:放狼的爷们

  1.Android设备设计之五层结构:第一层:硬件;第二层:linux内核层;或者说是:驱动层主要包含:外设驱动;内存管理;进程管理;电源管理;其实这些都是linuxkernel具有的功能。第三层:C...博文来自:htob_workstation的博客

  本书根据作者多年的从业经验,从开发实战出发,全面深入地讲解了Android驱动开发。本书以Android驱动本质为源,深入浅出地剖析了Android驱动程序开发要用到的DMA、中断、同步、等待队列与signal等多项技术。本书还从系统的角...

  Windows内核安全与驱动开发pdf+源码 Windows内核安全与驱动开发pdf+源码

  python图片处理类之~PIL.Image模块(ios android icon图标自动生成处理)

  jquery/js实现一个网页同时调用多个倒计时(最新的)nn最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!nnnn//jsn...博文来自:Websites

  前言:前面几章都是分析MediaCodec相关源码,有收到提问,说MediaCodec到底是硬解码还是软解码?看下今天的Agenda:nMediaCodec到底是硬解码还是软解码nMediaMuxer...博文来自:何俊林

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗!nnDocker的三大核心概念:镜像、容器、仓库n镜像:类似虚拟机的镜像、用俗话说就是安装文件。n容器:类似一个轻量...博文来自:我走小路的博客

  突发奇想:n  今天坐在工位上,玩着电脑,突然回想起自己刚开始接触计算机的画面,很是感慨。感慨时光飞逝的同时,也感慨自己从事计算机行业原来都是有渊源的呀。n  想起了那么多珍贵的回忆,决定写篇文章记录...博文来自:赵亚兰的博客

  Old_Dri_Yue:都不看看看自己复制的是什么东西吗???就这还能上百度搜索前3?百度也真是完了

http://nicolashsiung.com/zhixinglicheng/225.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有