首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >每个进程的内核虚拟内存包含什么?

每个进程的内核虚拟内存包含什么?
EN

Stack Overflow用户
提问于 2018-05-21 02:19:03
回答 1查看 0关注 0票数 0

我有以下问题:

  1. 虚拟内存的概念是否仅限于用户进程?因为,我想知道操作系统内核、驱动程序在哪里?它的内存布局如何?我想了解更多关于内核端内存的信息。
  2. 虚拟内存的概念是否是每个进程的基础?我的意思是说4GB的进程1+4GB的Process 2+4GB的Process 3=12 GB的虚拟内存(对于所有进程)是正确的。这听起来不对。或者从总共4GB的空间中,1GB由内核占用&REST 3GB是共享的b/w所有进程。
  3. 他们说,在一台32位的机器上,地址空间为4GB。其中一半(或最近的1GB)被内核占用。在这个图表中,我可以看到“内核虚拟内存”占用了0xc000000-0xffffffff(=1GB)。他们在谈论这个吗?还是别的什么?
  4. 是否Kernel Virtual Memory这些过程中的每一个都包含?它的布局是什么?
  5. 当我们使用IPC时,我们会谈到共享内存。我没有看到这些进程之间共享任何内存。它住在哪里?
  6. 资源(Windows中的文件、注册表)对所有进程都是全局的。因此,资源/文件句柄表必须位于某个全局空间。
  7. 我在哪里可以了解更多关于内核方面的东西。
EN

回答 1

Stack Overflow用户

发布于 2018-05-21 11:49:25

  1. 当系统使用虚拟内存时,内核也使用虚拟内存。Windows将使用更高的2GB(如果已经在Windows引导程序中指定了/3GB开关,则使用1GB)供自己使用。这包括内核代码、数据(或者至少是被分页的数据-没错,Windows可以将内核地址空间的一部分页到硬盘)和页表。
  2. 每个进程都有自己的VM地址空间。当发生进程切换时,页面表通常会与另一个进程的页表交换。这在x86处理器上很简单-更改CR3控制寄存器就足够了。整个4GB地址空间被替换为表替换一个完全不同的4GB地址空间。话虽如此,通常在进程之间会有共享地址空间的区域。
  3. 正如我前面提到的,内核的代码、数据和页表本身需要位于某个地方。此信息位于内核地址空间中。可以根据需要将内核代码、数据和页表的某些部分交换到磁盘。有些部分被认为比其他部分更重要,根本就没有被换掉。
  4. 见(3)
  5. 这要看情况了。用户模式共享内存位于用户模式地址空间中.内核模式地址空间的一部分也很可能在进程之间共享。例如,内核的代码在系统中的所有进程之间共享并不少见。内存所在的位置不精确。我在这里使用任意地址,但共享内存位于0x100000在一个进程中,可能位于0x101000在另一个过程中。不同地址空间中的两页,地址完全不同,可以指向相同的物理内存。
  6. 我不知道你在这里是什么意思。打开的文件句柄并不是对所有进程都是全局的。存储在硬盘上的文件系统对所有进程都是全局的。在Windows下,文件句柄由内核管理,对象存储在内核地址空间中,由内核对象管理器管理。
  7. 对于基于WindowsNT的系统。

对评论的答复:

现在这3GB是共享的b/w所有进程?还是每个进程有4GB的空间?

在Windows上,每个进程都有自己的页表。记住,即使每个过程都可能有自己的虚拟地址空间,这并不意味着物理记忆总是不同的。例如,用于kernel32.dll在进程A中加载的kernel32.dll在进程B中,许多内核地址空间也在进程之间共享。

为什么每个进程都有内核虚拟内存?

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

https://stackoverflow.com/questions/-100003353

复制
相关文章

相似问题

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