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

时间:2015-12-04 03:17:03

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

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

1 个答案:

答案 0 :(得分:0)

  

为什么会为操作系统保留一部分虚拟内存?为什么限制在一定的范围内?这似乎是一个众所周知的事实,因为当我用Google搜索时,我没有发现任何人提出类似的问题。

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

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

通常,保留的操作系统区域太大,以至于实际操作系统永远不会接近全部使用。所以它的大小并没有受到限制。

  

如果访问操作系统段,会发生什么?

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

  

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

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

对系统地址空间执行相同操作会导致鸡和蛋问题。在这样的系统中,系统页表将位于物理位置(每个人都使用相同的系统空间地址范围的另一个原因)。

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

  

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

这不是一个好例子。虚拟内存永远不会那么小。想象一下32位系统。虚拟地址空间为4GB。系统将前3 GB分配给用户用户空间,将最后1 GB分配给系统空间。

所有进程共享相同的1GB系统空间。他们拥有自己独特的3 GB用户空间。