【问题标题】:Why is there an OS segment reserved in virtual memory为什么在虚拟内存中保留一个 OS 段
【发布时间】:2015-12-04 03:17:02
【问题描述】:
  1. 为什么要为操作系统保留一部分虚拟内存?为什么限制在一定的大小?这似乎是一个众所周知的事实,因为当我用谷歌搜索时,我没有发现有人问过类似的问题。
  2. 如果访问 OS 段(VM 中为 OS 保留的部分),会发生什么?
  3. OS 段如何影响虚拟内存和物理内存之间的转换?
  4. 例如,如果您的虚拟内存为 128KB,则前 32KB 分配给 seg 0,最后 32KB 分配给 seg 1。然后将前 16KB 保留给 OS seg。 seg 0 会发生什么?它的大小是否因为 16KB 已更改为 OS seg 而缩小到 16KB?还是保持不变?

【问题讨论】:

  • 如果没有并且您的 VM 用完了怎么办。内核只有这么大。
  • OS segment 是什么意思?
  • @Jasen 抱歉,我指的是 VM 中为 OS 保留的部分

标签: operating-system segmentation-fault virtual-memory


【解决方案1】:

为什么要为操作系统保留一部分虚拟内存?为什么限制在一定的大小?这似乎是一个众所周知的事实,因为当我用谷歌搜索时,我没有发现有人问过类似的问题。

为操作系统保留逻辑地址空间的某些区域的原因是所有进程共享相同的物理内存并且它需要位于相同的位置。

当中断发生时,任何进程都可以运行。所以内核模式处理程序需要在同一个位置。

通常保留的 OS 区域非常大,以至于实际的 OS 永远不会接近使用它。所以它的大小并没有真正的限制。

如果访问 OS 段,会发生什么?

这取决于访问方式。如果一个进程在内核模式下访问它(系统调用、中断、异常),那是正常的。如果它以用户模式访问保留区域,通常会触发某种访问冲突。一些系统可能使系统内存的某些区域在用户模式下可读,但通常都是写保护的。

操作系统段如何影响虚拟内存和物理内存之间的转换?

这取决于系统。一些系统使用户页表可分页。然后,用户页表可以位于系统地址空间的可分页区域中。换句话说,页表位于虚拟/逻辑内存中,为用户地址提供了额外的转换,而系统地址不会发生这种转换

对系统地址空间做同样的事情会导致先有鸡还是先有蛋的问题。在这样的系统中,系统页表将位于物理位置(另一个原因是每个人都使用相同的地址范围作为系统空间)。

其他系统对所有页表都使用物理地址。以防万一,他们的翻译是一样的。

例如,如果您的虚拟内存为 128KB,则前 32KB 分配给 seg 0,最后 32KB 分配给 seg 1。然后您将前 16KB 保留给 OS seg。 seg 0 会发生什么?它的大小是否因为 16KB 已更改为 OS seg 而缩小到 16KB?还是保持不变?

这不是一个很好的例子。虚拟内存从未如此小。想象一个 32 位系统。虚拟地址空间为 4GB。系统将前 3 GB 分配给用户用户空间,最后 1 GB 分配给系统空间。

所有进程共享相同的 1GB 系统空间。他们有自己的、唯一的 3 GB 用户空间。

【讨论】:

  • 谢谢!这是一个非常详细的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 2011-02-22
  • 2022-08-16
  • 2017-12-08
  • 2012-11-27
相关资源
最近更新 更多