如何将计算机有限的内存分配给多个程序使用

版权声明:本文为博主原创文章,转载请附上原文链接。 https://blog.csdn.net/Raito__/article/details/83869395

如何将计算机有限的内存分配给多个程序使用

需要解决下列问题:

  1. 地址空间不隔离
  2. 内存使用效率低
  3. 程序运行的地址不确定

增加中间层,使用间接的地址访问方法。我们将程序给出的地址看成一种虚拟地址(Virtual Address),然后通过某种映射的方法,将虚拟地址转换成实际的物理地址。

分段(Segmentation)

比如程序A需要10MB内存,我们假设有一个地址从0x00000000到0x00A00000的10MB大小的一个虚拟空间,然后由操作系统映射到实际的物理内存如0x00100000到0x00B00000,实际的地址转换由硬件完成,当程序A访问地址0x00001000,CPU会将这个地址转换成实际的物理地址0x00101000。

分段可以解决上述问题1和问题3。首先它做到了地址隔离,不同的程序会被映射到不同的物理地址,如果程序访问被分配的物理空间外面,硬件将会判断这是一个非法地址,并将请求报给操作系统或监控程序,由它处理。另外,对于程序来说,它被分配到哪个地址段是透明的,它无需关心地址的变化。

但是分段依然没有解决内存使用效率低的问题,如果内存不足,换入换出的是整个程序,从而影响速度,分页(Paging)可以较好地解决这个问题。

分页(Paging)

  • 虚拟页:虚拟空间的页(VP,Virtual Page)
  • 物理页:物理内存中的页(PP,Physical Page)
  • 磁盘页:磁盘中的页(DP,Disk Page)

分页的基本方法是把地址空间人为地划分成固定大小的页,内存中放置需要使用的页,部分没有用到的页可能在磁盘中,当程序运行时,根据虚拟地址计算出实际的物理内存地址,当需要的页不在内存中时,即引发页错误(Page Fault),此时将由操作系统接管,将相应的页装入内存。不同程序的虚拟页可以映射到同一物理页,实现内存共享。

  • MMU(Memory Management Unit):进行页映射的硬件,一般集成在CPU中

猜你喜欢

转载自blog.csdn.net/Raito__/article/details/83869395