3

1) 用户模式进程有自己的“地址上下文”,它将用户模式虚拟地址映射到唯一的物理页框集合。也就是说,任何特定虚拟地址的含义随着 Windows XP 调度程序切换线程而从一个时刻到另一个时刻发生变化。

“切换线程”的一部分工作是更改页表,以便它们引用传入线程的进程上下文。

_

2) Windows 内核模式驱动程序在“任意线程上下文”中执行。

驱动程序可以创建一个系统线程并在其上下文中工作……但我说的是不创建系统线程的情况。

驱动程序可以使用“ExAllocatePoolWithTag”来分配分页(易失性存储中的内存)。

_

3)那么驱动程序如何在没有任何上下文的情况下访问分页内存?

如第 1 点所示,分页内存是通过“特定于上下文”的页表访问的。

当驱动程序在其他一些线程上下文中运行时......即页表条目指向与线程相关的 phy。mem,那么驱动程序如何访问他的分页内存?

PS:我是内核编程的菜鸟。不要生气。

4

2 回答 2

7

使用的概念是“用户/内核地址空间拆分”。每个进程地址空间被分成较低的部分(通常为 2 GB),在用户模式下进程可以访问并且每个进程都不同,而较高的部分(剩余的地址空间)只能在内核模式下访问,并且是每个过程都一样

驱动分配分页内存时,分配在地址空间分割的内核侧,因此无论当时加载哪个进程的页表,它对内核代码都是可见的(因为这部分地址空间映射到每个过程都采用相同的方式)。

于 2010-08-04T00:31:20.703 回答
0

需要注意的要点是所有线程都具有相同的内核内存映射。因此,线程之间的上下文切换(几乎)对前 2GB 的虚拟内存没有任何影响。

于 2013-05-26T20:14:45.247 回答