内核模式转换

时间:2009-11-11 19:38:14

标签: windows

如果我理解正确,系统空间中的内存加法器只能从内核模式访问。这是否意味着当执行系统空间中映射的组件时,处理器必须被切换到内核模式?

例如:虚拟内存管理器是一个经常使用的组件,并映射到系统空间中。每当VMM在用户进程的上下文中运行时(假设它转换了一个地址),处理器是否必须转换为内核模式?

谢谢, 苏雷什。

2 个答案:

答案 0 :(得分:1)

以虚拟内存管理器为例,它实际上从未在用户空间中运行。要分配内存,用户模式应用程序会调用Win32 API(NTDLL.DLL作为示例)来调用VirtualAlloc等例程。

关于地址转换,以下是其工作原理的摘要(基于 Windows Internals第5版的内容)。

VMM使用页表,CPU使用它来将虚拟地址转换为物理地址。页表存在于系统空间中。每个表包含许多PTE(页表条目),它们存储虚拟地址映射到的物理地址。我不会在这里详细介绍,但重点是所有VMM的工作都是在系统空间而不是在用户空间中执行。

对于上下文切换 - 当在用户空间中运行的线程需要在系统空间中运行时,将发生上下文切换。由于内存管理器存在于系统空间中,因此它的线程永远不需要进行上下文切换,因为它已经存在于系统空间中。

为简单化解释道歉,这是一个相当复杂的讨论话题。我强烈建议您选择 Windows Internals 的副本,因为这听起来对您来说非常方便。

答案 1 :(得分:1)

通常,涉及2个部分.MMU(内存管理单元)是一个硬件组件,它执行从虚拟地址到物理地址的转换。和操作系统VM子系统。

操作系统部分需要以特权模式(例如内核模式)运行,并根据用户空间需求设置/更改MMU中的映射。

E.g。要请求更多(虚拟)内存,或将文件映射到内存,需要转换到内核模式,VM子系统可以更改进程的映射。

在这周围,通常会有大量的技巧 - 例如e-g。将内核的整个地址空间映射到用户进程虚拟空间,但更改其访问权限以使进程无法使用该内存 - 这意味着无论何时转换到内核模式,您都不需要重新加载内核的映射。