zoukankan      html  css  js  c++  java
  • 第九章 虚拟存储器

    第九章 虚拟存储器

    概述:一个系统中的进程是与其他进程共享CPU和主存资源的。

    三个重要的能力

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

    理解虚拟存储器的原因

    • 虚拟存储器是中心的
    • 虚拟存储器是强大的
    • 虚拟存储器是危险的

    9.1 物理和虚拟寻址

    计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组。每字节都有一个惟一的物理地址(physical address,PA)。第一个字节地址是0,接下来的字节地址为1

    早期的PC使用物理寻址,而且诸如数字信号处理器,嵌入式微控制器以及Cray超级计算机这样的系统仍然继续使用这种寻址方式。而为通用计算机设计师的现代处理器使用的是虚拟寻址

    CPU芯片上叫做存储器管理单元

    9.2地址空间

    地址空间为非负整数地址的有序集合:{0,1,2,...}

    如果地址是连续的,则称为线性地址空间。如果计算机有n位地址总线,在一个带有虚拟存储器的系统中,CPU从一个有N = 2n个地址的地址空间中生成虚拟地址,这个地址称为虚拟地址空间:{0,1,2,...,N-1}
    物理地址空间,与物理存储器的M个字节相对应:{0,1,2,...M-1}
    M不要求是2的幂。

    9.3虚拟存储器作为缓存的工具

    概念上言,虚拟存储器被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组。
    每字节都有一个惟一的虚拟地址,这个惟一的虚拟地址是作为到数组的索引的。磁盘上数组的内容被缓存到主存中。和存储器层次结构中其他缓存一样,磁盘(较低层)上的数据被分成块,这些块作为磁盘和主存(较高层)之间的传输单元。VM系统通过将虚拟存储器分割成称为虚拟页(virtual page,VP)的大小固定的块,来处理这个问题。

    在任意时刻,虚拟页面的集合都分为三个不相交的子集:

    • 未分配的:VM系统还未分配或创建的页。未分配的块没有任何数据与它们相关联,因此也就不占用任何磁盘空间。
    • 缓冲存:当前缓存在物理存储器中的已分配页。
    • 未缓存的:没有缓存在物理存储器中的已分配页。

    9.3.2页表

    存放在物理存储器一个数据结构,叫做页表(page table)。页表将虚拟页映射到物理页。
    页表就是一个PTE(page table entry,页表条目)的数组。虚拟地址空间中的每个页在页表中的一个固定偏移量处都有一个PTE。

    9.3.3页命中

    9.3.4缺页

    定义:DRAM缓存不命中称为缺页

    9.3.5分配页面

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

    • 简化链接
    • 简化共享
    • 简化存储器分配
    • 简化加载

    9.6地址翻译

    是一个N元素的虚拟地址空间(VAS)中的元素和一个M元素的物理地址空间(PAS)中元素之间的映射。

    CPU中的一个控制寄存器,叫做页表基址寄存器(page table base register,PTBR)指向当前页表。N位的虚拟地址包含两个部分:一个p位的VPO(virtual page offset,虚拟页面偏移)和一个n-p位的VPN(virtual page number)。MMU利用VPN来选择适当的PTE。如VPN0选择PTE0。因为物理和虚拟页面都是p字节的,所以PPO(physical page offset物理页面偏移)和VPO是相同的,所以,将页表条目中PPN(physical page number,物理页号)和虚拟地址中的VPO串联起来,就是相应的物理地址。

    结合高速缓存和虚拟存储器来看

    首先,在既使用SRAM高速缓存又使用虚拟存储器的系统中,大多数系统选择物理寻址
    主要思路是地址翻译发生在高速缓存之前

    页表目录可以缓存,就像其他的数据字一样利用TLB加速地址翻译

    TLB:翻译后备缓冲器,是一个小的、虚拟存储的缓存,其中每一行都保存着一个由单个PTE组成的块

    9.7LINUX案例实例

    Linux虚拟存储器

    9.8存储器映射

    Linux通过将一个虚拟存储器区域与一个磁盘上的对象(object)关联起来,以初始化这个虚拟存储器区域的内容,这个过程称为存储器映射(memory mapping)。

    虚拟存储器区域可以映射到两种类型的对象:

    • unix文件系统中的普通文件:一个区域可以映射到一个普通磁盘文件的连续部分。
    • 匿名文件:一个区域也可以映射到一个匿名文件,匿名文件是由内核创建的,包含的全是二进制零。
      一旦一个虚拟页面被初始化了,它就在一个由内核维护的专门的交换文件(swap file)间换来换去。

    共享对象

    一个对象可以被映射到虚拟存储器的一个区域,要么作为共享对象,或作为私有对象。
    

    9.9动态存储器分配

    需要额外的虚拟存储器时,使用一种动态存储器分配器(dynamic memory allocator)。一个动态存储器分配器维护着一个进程的虚拟存储器区域,称为堆(heap)。在大多数的unix系统中,堆是一个请求二进制0的区域;对于每个进程,内核维护着一个变量brk,它指向堆的顶部。

    心得与体会

    这是本学期最后一次强制发博客的内容,内容很多,也很难,虽然在操作系统中学过虚拟存储的一些皮毛,但是相对于深入理解计算机系统中涉及的内容,那就是小巫见大巫了。书本不仅从原理上讲解了虚拟存储器。而且更多的是讲一些细节上的东西,所以看起来非常吃力。但是最后看完时觉得有非常大的成就感。我觉得通过这门课学到的不仅仅是一门知识,更重要的是一种对学习的态度,以及学习的方法,希望这种习惯能延续到我以后的学习中去。

    参考资料

  • 相关阅读:
    进度条
    html5 表单新增事件
    html5 表单的新增type属性
    html5 表单的新增元素
    html5 语义化标签
    jq 手风琴案例
    codeforces 702D D. Road to Post Office(数学)
    codeforces 702C C. Cellular Network(水题)
    codeforces 702B B. Powers of Two(水题)
    codeforces 702A A. Maximum Increase(水题)
  • 原文地址:https://www.cnblogs.com/5320zhq/p/5041936.html
Copyright © 2011-2022 走看看