驱动基本概念

IRQ-介绍   

      IRQ全称为Interrupt Request,即是“中断请求”的意思。IRQ的作用就是在我们所用的电脑中,执行硬件中断请求的动作,用来停止其相关硬件的工作状态,比如我们在打印一份图片,在打印结束时就需要由系统对打印机提出相应的中断请求,来以此结束这个打印的操作。在每台电脑的系统中,是由一个中断控制器8259或是8259A的芯片(现在此芯片大都集成到其它的芯片内)来控制系统中每个硬件的中断控制。目前共有16组IRQ,去掉其中用来作桥接的一组IRQ,实际上只有15组IRQ可供硬件调用。

      IRQ主要是就外部设备而言的。声卡、调制解调器等外部设备,在一般情况下并不使用,也就是说,不占用CPU的工作时间。当我们播放声音文件、上网时,声卡、调制解调器就会向 CPU发出申请,要求CPU分配一些工作时间给它们。但这时往往 CPU正在进行其他工作,怎么办呢?这时“中断”就起作用了。
      CPU会给发出中断申请的外部设备一个中断号,也就是IRQ号码,以后这个外部设备就使用这个中断号来工作,一旦有工作要求,CPU就会响应,暂时拿出一段时间为这个外部设备工作。IRQ号码是分等级的,而且CPU一次只能响应一个中断请求,如果有好几个设备不小心使用了同一个IRQ号码,系统就会出现问题。在DOS下声卡不能发声,多半就是IRQ号码分配得不对造成的。在Windows系统里,系统会自动为外部设备分配IRQ号,如果有冲突会自己进行调整,尽量满足要求,实在不行才会发出警告。


IRQL- 概念   
IRQL是Interrupt ReQuest Level中断请求级别。一个由windows虚拟出来的概念,划分在windows下中断的优先级,这里中断包括了硬中断和软中断,硬中断是由硬件产生,而软中断则是完全虚拟出来的。处理器在一个IRQL上执行线程代码。IRQL是帮助决定线程如何被中断的。在同一处理器上,线程只能被更高级别IRQL的线程能中断。每个处理器都有自己的中断IRQL。我们在调用NDIS API时,在DDK帮助文档中都有该API函数的所在级别。

 

IRQL- 各级别概述   

PASSIVE_LEVEL  IRQL最低级别,没有被屏蔽的中断,在这个级别上,线程执行用户模式,可以访问分页内存。
APC_LEVEL  在这个级别上,只有APC级别的中断被屏蔽,可以访问分页内存。当有APC发生时,处理器提升到APC级别,这样,就屏蔽掉其它APC,为了和APC执行一些同步,驱动程序可以手动提升到这个级别。比如,如果提升到这个级别,APC就不能调用。在这个级别,APC被禁止了,导致禁止一些I/O完成APC,所以有一些API不能调用。
DISPATCH_LEVEL  这个级别,DPC 和更低的中断被屏蔽,不能访问分页内存,所有的被访问的内存不能分页。因为只能处理分页内存,所以在这个级别,能够访问的Api大大减少。
DIRQL (Device IRQL)一般的,更高级的驱动在这个级别上不处理IRQL,但是几乎所有的中断被屏蔽,这实际上是IRQL的一个范围,这是一个决定某个驱动有更高的优先级的方法。


 分页池和非分页池

   1 页面一直锁定在物理内存中,不会被换出到页面交换文件中
   2 Windows把虚拟地址分为用户地址空间和系统地址空间,用户地址空间是给应用程序使用的,系统地址空间是给系统核心和驱动程序使用的。系统地址空间分为分页池和非分页池分页池是指映射到分页文件的虚拟地址,当要使用该地址时才交换到物理内存中,由系统来调度;非分页池是指直接在物理内存中分配的内存。页面缓冲池”就是进程占用的分页池中的虚拟内存,是进程调用某些系统功能时,由系统核心或者驱动程序分配的。如果一个程序占用的页面缓冲池内存不断增大,就是内存泄露,通常应该是创建或打开了句柄没有关闭。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值