VirtualCopy和VirtualAlloc

来源:互联网 发布:淘宝上的裤尺码对照表 编辑:程序博客网 时间:2024/04/29 04:53

首先要了解VirtualCopy和VirtualAlloc这两个函数的实现和目的,以及wince下动态虚拟内存映射和静态虚拟内存映射。

先说VirtualAlloc和VirtualCopy

VirtualAlloc首先会从我们的虚拟地址空间中申请一块虚拟空间,准备接下来要用它。此时可用的物理内存并没有减少,只是虚拟地址少了一块可用的区域。

真正把这块之前reserved的虚拟空间映射到物理内存区域的就是由VirtualCopy来干的,此时,MMU的页表就会增加一个entry,来表示物理--虚拟的映射关系。

再说动态虚拟内存映射和静态虚拟内存映射

OEMaddressTable只是建立了一个一级的静态虚拟--物理的映射关系,一般给kernel通过直接访问的形式来(OALPAtoVa)

MmMapIOSpace(VirtualAlloc和VirtualCopy)是一种动态虚拟映射的手段。

所以

即可以通过OEMaddressTable做物理----虚拟映射,供kernel来访问
也可以用VirtualAlloc+VirtualCopy来直接给寄存器的物理地址映射虚拟空间,只需要在VirtualCopy的参数中指定PAGE_PHYSICAL

摘自:http://topic.csdn.net/u/20080918/18/f1dbb82a-dfac-484b-b298-ecdb61505ff8.html

原创粉丝点击