为什么在虚拟内存中保留了 OS 段

Why is there an OS segment reserved in virtual memory

  1. 为什么要为OS保留一部分虚拟内存?为什么它被限制在一定的尺寸?这似乎是一个众所周知的事实,因为当我用谷歌搜索时,我没有发现任何人问类似的问题。
  2. 如果OS段(VM中为OS保留的部分)被访问,会发生什么?
  3. OS 段如何影响虚拟内存和物理内存之间的转换?
  4. 例如,如果您的虚拟内存为 128KB,则前 32KB 分配给 seg 0,最后 32KB 分配给 seg 1。然后您为 OS seg 保留前 16KB。 seg 0 会发生什么?它的大小是否缩小到 16KB,因为 16KB 已更改为 OS 段?还是保持不变?

Why is there a portion of virtual memory reserved for OS? Why is it limited to a certain size? This seems to be a universally known fact because when I googled I didn't find anyone asking similar questions.

逻辑地址 space 的某些区域为 OS 保留的原因是因为所有进程共享相同的物理内存,它需要位于相同的位置。

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

通常保留的 OS 区域很大,实际的 OS 永远不会用完。所以它并没有真正限制大小。

If the OS segment is accessed, what happens?

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

How does the OS segment affect the translation between virtual and physical memory?

这取决于系统。一些系统使用户页表可分页。然后用户页表可以位于系统地址 space 的可分页区域中。换句话说,页表在 virtual/logical 内存中,为用户地址提供了额外的转换,而系统地址

不会发生

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

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

For example if your virtual memory is 128KB, the first 32KB is allocated for seg 0 and the last 32KB for seg 1. Then you reserve the first 16KB for the OS seg. What happens to seg 0? Does its size shrink to 16KB because 16KB has been changed to OS seg? Or does it stays the same?

这不是一个很好的例子。虚拟内存从来没有这么小。想象一个 32 位系统。虚拟地址space是4GB。系统将前 3 GB 分配给用户 space,将最后 1 GB 分配给系统 space。

所有进程共享同一个 1GB 系统 space。他们有自己独特的 3 GB 用户 space.