2021-01-30

1、虚拟内存介绍

虚拟内存概念:

虚拟内存是一个抽象概念,它为每个进程提供了一个假象,即每个进程都在独占地使用主存。每个进程看到的内存都是一致的,称为虚拟地址空间。虚拟内存的运作需要硬件和操作系统软件之间精密复杂的交互,包括对处理器生成的每个地址的硬件翻译。基本思想是把一个进程虚拟内存的内容存储在磁盘上,然后用主存作为磁盘的高速缓存。

主存的概念:

主存是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。从物理上来说,主存是由一组动态随机存储器(DRAM)芯片组成的。从逻辑上来说,存储器是一个线性的字节数组,每个字节都有其唯一的地址(数组索引),这些地址从0开始。

虚拟内存提供了以下的三个关键能力:

  • 它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效地使用了主存
  • 它为每个进程提供一致的地址空间,从而简化了内存管理
  • 它保护了每个进程的地址空间不被其他进程破坏

2、物理和虚拟寻址

虚拟内存主要是一种地址扩展技术,主要是建立和管理两套地址系统:物理地址虚拟地址。由虚拟地址空间(硬盘上)装入进程,其实际执行是在物理地址空间(内存上)承载进程的执行。虚拟地址空间比物理地址空间要大的多,操作系统同时承担着管理者两套地址空间的转换。

2.1、物理寻址

​ 主存的每个地址都是唯一的,第一个字节地址为0,接下来为2,以此类推。CPU使用这种访问方式就是物理寻址。下图所示就是CPU通过地址总线传递读取主存中4号地址开始处的内容并通过数据总线传送到CPU的寄存器中。

image

​ 当然地址总线也不是无限大的,我们通常所说的32位系统,其寻址能力是2^32 = 4 294 967 296B(4GB)也就是说内存条插的再多也没有用,地址总线只能最多访问到4GB的地址内容

2.2、虚拟寻址

我们前面说过4GB的物理内存空间其实并不大(如果是独占的话)。这时候科学家们想到了一个很好的方法,建立虚拟寻址方式,使用一个成为MMU的地址翻译工具将虚拟地址翻译成物理地址在提供访问,如下图:

image

使用虚拟寻址的时候,cpu先是生成一个虚拟地址:4100再经过地址翻译器,将4100翻译成物理地址。

我们说过虚拟地址要比物理地址大的多,为啥还要麻烦的将物理地址转成虚拟地址呢?虚拟地址的发明究竟是为了什么,我们知道对内存的访问要比硬盘的访问快10000倍,如果我们在内存中没有找到相应的内容(不命中),而需要到硬盘上找的话,我们必须要提供相对来说高效率的访问方式。这时候就创建了一个虚拟存储器,管理着磁盘,以每页的方式进行整合,每个页面的大小4kb-2mb不等,加上偏移量就成为了一个虚拟地址。比如4100,说明的就是页4编号,偏移100处的位置。这就比挨个挨个单独寻址要快的多。

2.3、地址空间

地址空间是一个非负数地址的有序集合:如果地址空间的整数是连续的,那么我们说它是一个线性地址空间。那么一个拥有虚拟寻址的CPU,也就会有一个虚拟地址空间。内存中的一个字节,就会有一个物理地址和一个虚拟地址。如果CPU有N个虚拟地址空间,那么该字节就有N个虚拟地址。

3、虚拟内存作为缓存的工具

你可能感兴趣的:(2021-01-30)