首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >windows进程的用户内核模式划分

windows进程的用户内核模式划分
EN

Stack Overflow用户
提问于 2010-09-06 02:08:37
回答 3查看 216关注 0票数 0

在windows中,如何在用户模式和内核模式模块之间分配进程地址空间(4 4GB)

当我在进程资源管理器中检查explorer.exe时,较低的2 2GB被用户模式dll占用,较高的3-4 2GB系统进程地址范围由驱动程序(*.sys文件)加载。

所以我的问题是,每个进程的所有这些3-4 4GB的地址范围是共享的,还是每个进程都是重复的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-06 02:39:27

高千兆字节是操作系统内核、所有驱动程序和附加模块以及I/O缓冲区和其他仅用于内核的数据内存的位置。这是由所有进程共享的,实际上必须是内核才能工作。页表位于一个称为超空间的区域中,该区域位于3 GB的边界上,并且是超过2 GB的内存中唯一未在进程之间共享的部分。默认情况下,内核使用第三个3GB,但是如果您构建的程序具有3 3GB的用户模式内存,那么这个区域将属于进程。

这些都是我想不到的,所以请随时纠正我。

票数 0
EN

Stack Overflow用户

发布于 2010-09-06 03:33:56

提供简短的答案:

(虚拟)内存布局取决于您的操作系统。当然,windows的32位和64位版本之间存在差异,但不同版本之间也存在差异。

参见here (MSDN)here (MS blogger)

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2010-09-07 16:30:06

默认情况下,内核最多使用XP 2 GB,其余2 GB可用于所有程序。在使用/3GB command line witch启动XP时,使用/LARGEADDRESSAWARE标志链接的程序最多可以使用3 GB的虚拟地址空间

这意味着每个应用程序最多可以管理3 GB。32位窗口可以将内存交换到一个页面文件,并且这个大小很可能会超过4 GB。因此,两个应用程序一起分配的总容量可能远远超过3 3GB。

我刚刚在一台4 GB的XP32位机器上进行了测试。我启动了3个应用程序,每个应用程序使用VirtualAlloc并使用memset填充2 GB。任务管理器显示虚拟分配的内存总量为7 GB。这当然是不太实际的。如果这些应用程序中的两个试图同时使用它们的所有内存,那么当系统挂起时,机器将减慢速度,直到感觉到

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3647151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档