返回首页

我想了解进程的地址空间。

我们知道,在32位操作系统的每个进程都有AA 4GB的内存地址块也被称为虚拟地址空间。必须保留为OS交互的内核虚拟地址空间的一个部分。因此,此地址空间分为用户空间(2/3 GB)和内核空间(2/1 GB)。

假设我有两个我的系统上运行的应用程序,1)的notepad.exe 2)word.exe
这意味着每一个都的NOTEPAD.EXE与word.exe 4 GB空间,将被分配。
我understanig是既NOTEPAD.EXE和word.exe的,将有单独的2 GB的用户空间和单独的2 GB的系统空间。
我的理解是否正确?

现在在http://msdn.microsoft.com/en-us/library/windows/hardware/hh439648网站(V = VS.85)。ASPX它写道:"每个用户模式进程都有自己的私有的虚拟地址空间,但所有的代码运行在内核模式下股份称为一个单一的虚拟地址空间系统的空间。"

我不能够得到所有的代码运行在内核模式下共享一个单一的虚拟地址空间称为系统空间"声明"。

与上面的例子中不尊重,这意味着NOTEPAD.EXE和word.exe将有单独的用户空间每个2 GB。但是,双方将共享2 GB的系统空间?
PLS的澄清我的疑问。

回答

评论会员:游客 时间:2012/02/06
CPallini:声明"所有的代码运行在内核模式下共享一个单一的虚拟地址空间称为系统空间":Stefan_Lang:"虚拟地址"的手段,你可以在程序中使用的地址是不实际的物理地址,但有被转换为真正的地址。这是MMU的任务。MMU的最初,作为一个额外的芯片在主板上,但一段时间将在20世纪90年代的CPU集成。除其他事项外,MMU的需要照顾的分页,并仿效大的连续的内存块分配的物理内存,即使是找到一个足够大的空间过于分散。该系统的空间是系统DLL和被加载到物理内存的一部分。为了节省空间,所有的进程将分享这个系统空间,因此MMU,将这个物理空间映射到系统功能的所有进程访问。如果从不同进程的虚拟地址空间来看,这些系统功能的地址仍可能出现不同,但产生的MMU确定的物理地址将是相同的所有进程:SafarTimura
|我只有了解WinCE的编程而且是您正确的精髓,在这一进程共享同一块的内核内存。
然而这部分地址空间是不正常访问过程和这样可以不被在进程空间的其他部分一样处理,因为你应该得到一个访问冲突如果要读或写从或到它。{ BR}
这就是为什么你必须要非常小心,一块代码的内核级别的访问时,通常非常低级别的代码,如司机可能访问。
或远程调试工具,因为它有时是有用的核心区寻找到一个正在运行的进程列表和进程的堆栈。

但作为一般规则,内核访问,我认为应限制在尽可能多fukehot
评论会员:游客 时间:2012/02/06
__only_one__系统空间存在,这是所有进程和内核共享有些链接可能帮助:imgsrc={A}{A2}{A3的}]
PrafullaVedante
评论会员:游客 时间:2012/02/06
一个进程的系统空间包含过程specific.THIS空间,如句柄表,表等各种数据结构的不能共享但代码(而不是数据),通过各种进程访问共享(即在各进程加载同一个DLL的情况下)