内存映射文件加载到用户模式地址空间或进程的内核地址空间?

时间:2014-05-11 15:23:15

标签: c# .net memory-management memory-mapped-files

我一直在阅读memory mapped files,它允许在多个进程之间共享文件。

每个进程(32位具体)都有4GB的私有地址空间,分为 2GB的用户模式地址空间 2GB为内核保留,如上所述{ {3}} here。用户模式地址空间对每个进程都是私有的,不能被其他进程修改。

那么,这是否意味着 MMF被映射到内核模式地址空间,因为它在所有进程中共享?

我已经搜索了很多关于它被映射的MMF,但无法找到任何资源说明。所以,如果我的假设是正确的,或者我在这里遗漏了什么,请在这里发帖提问MSDN的任何资源都会很好。

2 个答案:

答案 0 :(得分:3)

进程无权访问内核地址空间。对于一个进程来说,高2GB只是因为一个未知的原因而无法访问。

内存映射进入地址空间的用户模式部分。

由于虚拟内存硬件,物理页面可以存在于多个进程中。

虽然所有内存都位于用户模式地址范围内,但不共享专用内存。内存映射由内核专门处理。它指示硬件使物理页面可用于多个进程。私有内存实际上是一种特殊情况,其中页面恰好只映射到一个进程。硬件不关心。实际上,如果需要,您可以将同一页面多次映射到同一个进程中。

答案 1 :(得分:3)

内存映射文件映射到用户模式地址空间。

以这种方式思考。假设您有一个4K内存映射到两个进程的文件。这仅意味着磁盘上的一个存储页面与两个进程中的每个进程中的特定虚拟地址空间页面相关联。

本页面的图3可能有所帮助:

http://msdn.microsoft.com/en-us/library/ms810613.aspx