五.计算机系统之虚拟存储器

一、简介

  • 为了更加有效的管理存储器并少出错,现代系统提供了一种对主存的抽象概念,叫做虚拟存储器。虚拟存储器是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的,一致的和私有的地址空间.

  • 计算机系统通过页表来控制虚拟存储器上的虚拟地址和物理存储器上的物理地址来做DRAM(主存)和磁盘的数据交换、缓存、进程管理、进程安全。(高度抽象来设计现代操作系统核心思路)

一、功能

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

二、理解的好处

  • 虚拟存储器是中心的。其涉及到了计算机系统所有层面
  • 虚拟存储是强大的。可以将存储器映射到磁盘文件的某部分,以及与其他的进程共享存储器
  • 虚拟存储器是危险的。每次应用程序引用一个变量、间接引用一个指针、或者调用一个malloc这样的动态分配程序时,它就会和虚拟存储器发生交互。如果虚拟存储器使用不当,应用将遇到复杂危险的与存储器有关的错误

三、内容

  • 物理和虚拟寻址

    • 1.1 计算机主存被组织成一个由M个连续的字节大小的单元组成的数组。每个字节都有一个唯一的物理地址。(每次CPU操作字长都是操作多个字节,例如:16位<2字节>,32位<4字节>,64位<8字节>)
    • 1.2 CPU访问存储器的最自然的方式使用物理地址,这就是物理寻址。(汇编器和连接器编译后的执行目标文件,除了直接数外,都是些变量、函数的虚拟地址)
    • 1.3 最初PC使用物理寻找,现代处理器使用的是虚拟寻址
      • 虚拟寻址:CPU通过生成一个虚拟地址来访问程序信息,这个虚拟地址在被送到存储器之前先转换成适当的物理地址。将一个虚拟地址转换成物理地址的任务叫做地址翻译,CPU芯片上叫做 存储器管理单元 的专用硬件,利用存放在主存中的查询表来动态翻译虚拟地址,该表的内容由操作系统管理的。
  • 地址空间

    • 2.1 在带虚拟存储器的的系统中,CPU从一个有N=2^n个地址的地址空间中生成虚拟地址,这个地址空间叫虚拟地址空间:{0,1,2,...,N-1}。由 虚拟存储器(PV) 管理

    • 2.2 地址空间描述:由最大地址所需的位数来描述。eg:32位或者64位虚拟地址空间

    • 2.3 物理地址空间:与系统中的物理存储器的M个字节相对应:{0,1,2,...,M-1},由 物理存储器(pp) 管理。

    • 2.3 主存中的每个字节都有一个或多个(共享数据在多个程序中)选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址。物理地址是硬件上的MMU才操作,虚拟地址是有程序单独持有,系统管理,每个程序的值都不一样。

    • 2.4 共享数据(动态库):允许每个数据对象在不同的地址空间有不同的地址,这就达到了共享公共库的标准。

  • 虚拟存储器(pv)作为存储器缓存的工具(虚拟存储器工作方式)

    • 虚拟存储器(VM):被组织为一个有存放在磁盘上的N个连续的字节大小的单元组成的数组,就是虚拟地址总称。每个字节都有唯一个的虚拟地址,这个地址是作为数组的索引的,磁盘上数组的内容有部分缓存在主存中。磁盘上(较低层)上的数据呗分割成块,这些块作为磁盘和注册(较高层)之间的传输单元。
    • 3.1 虚拟页:VM系统通过将虚拟存储器分割为大小固定的块来实现磁盘和主存的传输。虚拟页的大小为P=2^p字节

    • 3.2 物理页(页帧--主存):物理存储器被分割为物理页,大小也为P字节

    • 3.3 虚拟页面的集合

      • a. 未分配:VM系统还未分配(或创建页)。未分配的块没有任何数据和他们相关联。
      • b. 缓存的:当前缓存在物理存储器中的已分配页。
      • c. 为缓存的:没有缓存在物理存储器中的已分配页。
    • 3.4 页表:系统为每个进程分配一个页表,将虚拟页映射到物理页,每次地址翻译硬件将一个虚拟地址转换为物理地址时会读取页表,操作系统复制维护页表的内容,以及在磁盘与DRAM之间来回传页。

      • 页表作用方式:同任何缓存一样,进程的虚拟存储器系统必须有某个方法来判断一个虚拟页是否存放在DRAM中的某个地方。如果是,系统必须确定这个虚拟页存放在哪个物理页中。如果不命中,系统必须判断这个虚拟页存放在磁盘的哪个位置,在物理存储器中选择一个牺牲页,并将虚拟页从磁盘拷贝DRAM中,替换这个牺牲页。这种过程由MMU(存储器管理单元)中的地址翻译硬件和一个存放在物理存储器中的页表数据结构 组成。
    • 3.5 页命中:地址翻译硬件将蓄力地址作为索引来定位物理存储器地址

    • 3.6 缺页:DRAM缓存不命中,触发一个缺页异常。选择一个牺牲页,然后确定它的磁盘地址,将其拷贝到DRAM中。

    • tips: 程序是存放在磁盘上,所有的代码和数据都用虚拟存储器管理 <虚拟地址空间+系统管理程序> ,操作系统在读取数据和指令时,通过MMU来读取物理地址上的数据(物理地址:寄存器、主存(物理存取器:主存物理地址+硬件管理+系统管理程序)、磁盘),为了提高性能,系统通过页表来映射虚拟存储器和物理存储器的数据。

  • 虚拟存储器作为存储器管理的工具

    • 操作系统为每个进程提供了一个独立的页表,就是一个独立的虚拟地址空间。(可以将多个虚拟页面映射到同一个物理页面上--共享对象)
    • 4.1 简化连接:单独的虚拟地址空间,一致性极大地简化了连接器的设计和实现,允许连接器生成全链接的可执行文件,这些执行文件是独立于物理存储器中代码和数据的最终位置的。
    • 4.2 简化加载:虚拟存储器还使得容易向存储器中加载可执行文件和共享对象文件。
    • 4.3 简化共享:独立地址空间为操作系统提供了一个管理用户进程和操作系统自身之间共享的一致机制。
    • 4.4 简化存储器分配:虚拟存储器为用户进程提供一个简单的分配额外存储的机制。当一个运行在用户进程中的进程要求额外的堆空间时(malloc调用),操作系统分配一个适当数字,K个连续的虚拟存储器页面,并将他们映射到物理存储器中任意位置的K个任意的物理页面。
  • 虚拟存储器作为存储器保护的工具

    • 任何现代计算机系统必须为操作系统提供手段来控制对存储器系统的访问。
  • 存储器映射

    • linux将一个虚拟存储器区域与一个磁盘上的对象关联起来,以初始化这个虚拟存储器区域的内容,这个过程叫存储器映射
    • 6.1 unix文件系统的普通文件:一个区域可以映射到一个普通磁盘文件的连续部分,例如一个可执行目标文件。
    • 6.2 匿名文件:一个区域也可以映射到一个匿名文件,匿名文件是有内核创建的,包涵的是二进制零。
    • 6.3 交换空间:无论哪种情况下,一旦一个虚拟页面被初始化,它就在一个由内核维护的专门的交换文件直接来回切换,这限制了当前运行进程分配的虚拟页总数。
    • 一个对象可以被映射到虚拟存储器的一个区域,要么做共享对象,要么做私有对象
    • 6.4 一个映射到共享对象的虚拟存储器区域叫做共享区域。同样有私有区域
    • 6.5 私有对象使用一种叫做 写时拷贝(copay-on-write) 的巧妙技术被映射到虚拟存储器中,如果一个只读的对象被执行写操作就会触发一个保护故障(快照:将被修改的公有部分重新分配内存存储,保证共享部分数据不会变动)。
  • 垃圾收集

    • C程序在运行时需要额外虚拟存储器时,使用动态存储器分配器,其维护一个进程的虚拟存储器区域()
    • 7.1 分配器有两种风格:
      • 显示分配器malloc分配,free释放
      • 隐式分配器(垃圾收集器):要求分配器检测一个已分配块何时不在被程序使用,就释放。自动释放为使用的已分配块的过程叫做垃圾收集.
    • 7.2 可达图:垃圾收集器将存储器视为一张有向可达图。该图的节点被分成一组根节点和一组堆节点。(根节点不再堆中,在寄存器、栈里的变量,虚拟存储器中读写区域内的全局变量)
  • 页表(PTE)的作用

    • 8.1 页面命中:
      • 第一步:处理器从ELF文件中获取需要的 虚拟地址,将其发送给MMU
      • 第二步:MMU生成PTE地址,并从高速缓存/主存中请求得到她
      • 第三步:高速缓存/主存向MMU返回PTE。
      • 第四步:MMU构造 物理地址,并把它传给告诉缓存/主存
      • 第五步:高速缓存/主存返回所请求的数据给处理器

输入图片说明

  • ** 8.2 缺页:** * 第一步:处理器从ELF文件中获取需要的 虚拟地址,将其发送给MMU * 第二步:MMU生成PTE地址,并从高速缓存/主存中请求得到她 * 第三步:高速缓存/主存向MMU返回PTE。 * 第四步:由于PTE中的有效位是零,所以MMU触发了一次异常,传递CPU中的控制到操作系统内核中的去也异常处理程序。 * 第五步:缺页处理程序确定物理存储器中的牺牲页,如果这个也面已经被修改,则把它换到磁盘。
    * 第六步:缺页处理程序页面调入新的页面,并更新存储器中的PTE。 * 第七步:缺页处理程序返回到原来的进程,再次执行导致缺页的指令。CPU将引起去也的虚拟地址重新发送给MMU。重新页面命中的步骤.

输入图片说明

猜你喜欢

转载自my.oschina.net/u/2246410/blog/1801487