计算机系统内存管理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/meivan330/article/details/83957560

计算机系统内存管理

虚拟内存与物理内存

在计算机系统中进程之间是共享物理内存和其他系统资源的。为了更加有效管理内存和减少出错,现代系统提供了一种对主存的抽象概念,叫做虚拟内存,它为每个进程提供了一个大的、私有的和一致的内存空间。物理内存通常是具有掉电就丢失的高速RAM构成,而虚拟内存通常是指在硬盘上开辟的一块区域。虚拟内存有三个主要的作用:

1.它将主存看成是一个存储磁盘上的地址空间数据的高速缓存,在主存中只保存活动区域,根据需要在主存和磁盘之间来回交换数据,这样可以高效利用内存。
2.它为每个进程提供了一致的地址空间,这样便于内存管理,以及便于链接器链接和加载器加载代码到内存中运行。
3.虚拟内存还可以保证每一个进程的地址空间不被其他的进程破坏。

物理寻址和虚拟寻址

物理寻址
在这里插入图片描述
CPU通过直接发送物理地址到主存读取所在地址的数据内容的方式称为物理寻址,物理寻址速度快,简单直接,在大多数嵌入式处理器中都采用的是这种方式寻址。

虚拟寻址
在这里插入图片描述
在虚拟寻址系统中,CPU将虚拟地址传递给内存管理单元MMU,MMU将虚拟地址翻译成物理地址传递给主存来读取对应物理地址的数据内容到CPU。这种寻址方式常用于比较复杂的系统中,CPU中必须具有硬件MMU才能使用这种寻址方式。一般能够跑操作系统的CPU都具有硬件MMU并且采用这种寻址方式。

虚拟寻址过程

虚拟页面
在这里插入图片描述
虚拟寻址过程实际上是一个从虚拟地址空间到物理地址空间的映射。虚拟地址空间对应的是磁盘上一块连续的地址空间。物理地址空间对应的是主存的地址空间。通常将一块大的虚拟空间分割成一个个等大小称为虚拟页面(VP)的块,将物理空间也分割成和VP等大小的物理页(PP)。
VP有三种状态:

  • 未分配:表明该虚拟页并没有存放数据内容,即它是空闲的并且不占磁盘空间。
  • 未缓存:表明该虚拟页已经存放了数据内容,但是没有缓存到主存中。
  • 已缓存:表明该虚拟页已经存放了数据内容,并且数据已经缓存到主存中了。

物理页面
为了使系统判定一个虚拟页面是否已经缓存到内存中,在物理内存上开辟了一块区域称为页表(Page table)用来存放一组页表条目(PTE),PTE实际上反映的是虚拟地址到物理地址的映射以及访问物理页面的一组状态控制。
在这里插入图片描述
每个PTE条目由有效位和一个地址域构成,有效位表明该位置对应虚拟页面是否已经缓存到内存中,如果缓存了即为1,并且地址域存放的即为该虚拟页面对应的物理页面地址。如果没有缓存即为0,此时地址域存放的是虚拟页面地址或者为空(虚拟页面未分配时)。

页命中在这里插入图片描述
如上图,当CPU给出一个虚拟地址准备访问VP2中的一段区域时,首先会根据虚拟地址到主存的页表中找到对应的PTE,然后查阅有效位为1,表明该虚拟页面已经缓存到主存中了,此时读出地址域的物理地址。即所需的数据在主存中称为页命中。

缺页
在这里插入图片描述
当CPU给出一个虚拟地址准备访问VP3中的一段数据时,首先在主存的页表中找到对应的PTE,然后查阅该PTE的有效位为0,即VP3并没有缓存到主存中,此时内核会触发缺页异常,然后内核在主存中找出一个牺牲页(页中数据已经被更改)将它复制回磁盘,然后空出该牺牲页的位置。在上图中即为物理页面PP3。然后内核将虚拟页面VP3复制到内存中并且修改PTE3的状态和物理地址域,此时再重新通过虚拟地址访问即可页命中。

地址翻译
MMU将虚拟地址映射到物理地址的过程称为地址翻译。
在这里插入图片描述
虚拟地址由虚拟页号(VPN)以及虚拟页偏移(VPO)构成。根据VPN可以在主存的页表中找到对应的PTE,然后查阅该PTE的状态控制字以及地址域,可以获取到对应物理页的物理地址,将得到的物理地址加上虚拟页偏移(也是物理页偏移)即可得到完整的物理地址。然后通过该物理地址来读取数据。

访问效率优化

  • 采用多级页表可以减小页表占据的主存大小,因为虚拟地址的大部分都是空的,因此不需要给它们分配PTE,只有等到需要分配的时候才给它们分配。
  • 在主存和MMU之间增加高速缓存,将最活跃的数据放在高速缓存中,可以加快访问效率,当高速缓存没有命中的时候再去主存中访问并且将数据复制到高速缓存中,充分利用局部性原则。
  • 在MMU中增加TLB缓存存放最近访问的PTE,可以加快地址的翻译。

猜你喜欢

转载自blog.csdn.net/meivan330/article/details/83957560