驱动中的内存管理

A、 物理内存

B、 虚拟内存

C、 Ring0地址和Ring3地址

D、 驱动程序和进程的关系

E、 分页和非分页内存

F、 分配内核内存

以下概念针对 32位Windows操作系统(32位及以上的CPU)

A物理内存:(Physical Memory Address)

目前主流的操作系统还是32位的XP,而32位的系统提供的寻址能力是232
个字节,用户最多可以使用4GB的真实物理内存。0-0xFFFFFFFF 2G+0.5G+0.1 (2.75-3.25) 2G

B虚拟内存:(Virtual Memory Address)

虽然可以寻址4GB的内存,但在PC里往往没有如此多的真实物理内存,现在的主流电脑一般是2G左右内存,操作系统和硬件为供了虚拟内存的概念。

虚拟内存的作用:

1 不管PC是否有足够的物理内存,操作系统总会有4GB的虚拟内存。这就允许使用者申请更多的内存,当物理内存不够的时候,可以通过将不常用的虚拟内存页交换成页面文件,等需要的时候再去读取。

2 不同进程的虚拟内存互不干扰,为了让系统可以同时运行不同的进程,Windows操作系统让每个进程看到的虚拟内存都不同,这个方法就使不同的进程会有不同的物理内存到虚拟内存的映射。例如 进程A和进程B的内存地址 0x400123会完全不同。修改进程A的这个地址,不会影响到进程B,因为A进程的这个地址可能映射的是一段物理内存地址,而B进程是映射的另一段物理内存地址.

C、Ring0地址和Ring3地址

用户模式地址:

在32位Windows操作系统中,把虚拟内存4GB的低2GB也就是虚拟地址0-0x7FFFFFFF这个范围的地址 划给用户模式。

内核模式地址:

而0x80000000-0xFFFFFFFF之间虚拟内存划给内核模式,也就是高2GB.Windows系统还规定在用户态(Ring3层)的程序,只能访问用户模式地址,而在内核态(Ring0层)的程序,可以访问整个4GB虚拟内存,即用户模式和内核模式的地址。

D 、Windows驱动程序和进程的关系

驱动可以看成是一个特殊的DLL函数库,只不过加载的地址是内核模式地址,只是这个DLL可以访问整个4GB的虚拟内存。

再来看看驱动和进程的关系:

Window驱动程序里的不同例程运行在不同的进程中。DriverEntry例程是运行在系统(System)进程中,而其它的例程如IRP_MJ_READ,IRP_MJ_WRITE,IRP_MJ_IRP_MJ_CREATE 及IRP_MJ_DEVICE_CONTROL之类的例程则运行于某个进程的环境中,所能访问的虚拟是这个进程的虚拟地址.

32课中的代码

// 如果是被保护的PID,则拒绝访问,并将句柄设置为空

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值