精华内容
下载资源
问答
  • 关于虚拟存储器、虚拟内存和交换空间的理解

    千次阅读 多人点赞 2016-12-01 14:18:15
    虚拟存储器、虚拟内存和交换空间这三个概念从看CSAPP开始很长一段时间都在困扰着我,网上各说纷云,等快上完操作系统和计组课才算明白了! 先说虚拟存储器,CSAPP上介绍的是虚拟存储器是对主存的抽象概念,为每一个...

    虚拟存储器、虚拟内存和交换空间这三个概念从看CSAPP开始很长一段时间都在困扰着我,网上各说纷云,等快上完操作系统和计组课才算明白了!

    先说虚拟存储器,CSAPP上介绍的是虚拟存储器是对主存的抽象概念,为每一个进程提供了一致的地址空间形式,也就是虚拟地址空间(这个地址空间不是用什么数组存起来的,而是CPU要访问内存就产生一个虚拟地址,不断累积组成的虚拟地址空间),它是一种机制,一种将主存抽象成磁盘高速缓存的技术。当初构造虚拟存储器的两个主要动机:允许在多道程序之间有效而安全地共享存储器;消除一个小而受限的主存容量对程序设计造成的影响。40年后,第一条变成了主要设计动机。现代操作系统都支持虚拟存储器,所有的应用程序访问内存都需要地址翻译。

    虚拟内存和交换空间,这两个概念要和操作系统一起说,window下的“虚拟内存”实际上是存在磁盘上的页面文件,和linux的交换空间概念一样,都是物理上实际存在的东西,如果内存够用,没有缺页,你禁掉这两个东西不会影响虚拟存储器;然而撇开操作系统,只谈理论,虚拟内存还是一种技术,它允许执行进程不必完全放在内存中。这两种其实都属于交换技术,交换技术除了因为内存紧张要使用之外,还有在一些操作系统如分时系统中为了改善进程组合(CPU密集型和IO密集型)也要用它进行中期调度。

    总结一下,传统意义上的虚拟内存和交换空间就是指能实际分配的磁盘空间,而虚拟存储器是一种机制,是整个CPU访问内存过程的体现。其实内存管理、虚拟内存技术、虚拟存储器都是密不可分的概念,你可以说虚拟存储器就是虚拟内存技术,也可以说内存管理机制就是虚拟存储器,抠字眼都是无意义的,因为可能书的翻译不同,理解不同。但是只要知道它们只是内存管理分页机制的体现,从CPU生成虚拟地址到MMU翻译生成物理地址,到查找PTE,再到缺页,页置换,这整个过程需要CPU、内存和磁盘的参与,只要理解了这些就理解了内存分页管理机制,不必抠字眼。

    展开全文
  • 关于虚拟存储器和高速缓存的理解

    千次阅读 2017-05-25 09:51:26
    对于csapp中的高速缓存和虚拟存储器章节做个总结,这些可以帮助我更好的理解java中的NIO以及并发。 先记录下一些名称的英文缩写: PP(physical page)物理页 VP (virtual page)虚拟页 VA (Virtual Address)虚拟...

    对于csapp中的高速缓存和虚拟存储器章节做个总结,这些可以帮助我更好的理解java中的NIO以及并发。希望大家能多多评论,共同提高。

    昨天问一个要去美国读计算机博士的朋友研究哪个方面,他说做操作系统,并且他们导师对基础要求很严格,要他先补好基础,然后他也问了我几个问题,觉得问题对理解高速缓存和虚拟存储器这块有用就记录下来:

    问:一条load指令对应的地址是物理还是虚拟的
    答:虚拟的
    问:一条load指令可能会从哪里取值
    答:寄存器,高速缓存,主存,硬盘或者网络,不过后2者需要先进内存
    问:如果cache miss了,那么需要访问memory几次
    答:数据一定在主存吗?
    问:假定一定在
    答:一次?
    问:不对,如果tlb miss 了,就是2次,所以是1到2次。(所以我忽略了如果tlb没有存储对应的虚拟地址的pte,那么就先需要从内存中读取一个pt,
    获取到pa后,再去内存读数据)
    问:好,下个问题会更有意思,如果tlb miss 了,但是数据已经cache了,会不会访问主存
    答:会
    问:不一定,因为x86的cache是按照虚拟地址建立的,所以miss后可以从cache中读取到
    后来还说到了tlb的内容在process切换的情况下会不会清理掉,不清理的话如果proces1没有跑,又切换回去,那么就可以重复利用了,我yy了一种
    场景,如果不刷,会导致类似页不命中要换页的情况,这种就需要消耗单独的时间。当然最终在设计的时候,肯定不会是yy的,一定会有大量的数据
    作为支撑。


    先记录下一些名称的英文缩写:
    PP(physical page)物理页
    VP (virtual page)虚拟页
    VA (Virtual Address)虚拟地址              VPO(虚拟页面偏移)+VPN(虚拟地址页号)+TLBI(TLB索引)+TLBT(TBL标记)
    MMU(Memory management unit)存储器管理单元
    PA (physical address)物理地址             PPO(物理页面偏移)+PPN(物理页面页号)+CO(缓冲块内的字节偏移量)+CI(高速缓存索引)+CT(高速缓存标记)
    PTE(page table entry)页表条目
    segmentation fault 段错误
    PTBR(page table base register)页表基址寄存器
    PTEA(page table entry address)页表条目地址
    TLB (translation lookaside buffer)翻译后备缓冲器(包含在MMU中)

    什么是虚拟存储器呢?首先虚拟存储器概念是针对计算器的主存的一种抽象,如果没有这种抽象,那么物理主存就会暴露出来,这样不方便对主存进行统一的管理,也不方便进行系统的扩展。虚拟存储器提供了如下三个功能:
    1.高效的使用主存。它将主存看做磁盘的高速缓存,需要使用的数据缓存到主存,不需要的进行换出。
    2.对进程的主存一致性视图。每个进程看到的内存视图都是一致的,这样简化了存储器的管理
    3.保护了进程的地址空间数据的安全性,防止被其他的进行所破坏。

    虚拟存储器结合了计算器硬件,操作系统软件之间的交互,那么现在就说下具体是怎么运行的吧。
    cpu在执行指令的时候,拿到的是一个虚拟地址,所以就需要将该虚拟地址翻译为物理地址,翻译的过程是:cpu将虚拟地址传给MMU,MMU
    通过PTBR拿到PTE,如果该虚拟页号已经缓存,那么将PTE中记录的物理地址和虚拟地址中的地址偏移合成为物理地址然后去高速缓存或者
    主存中获取数据,最后将数据交给cpu。在这一个过程中,如果该虚拟地址没有被缓存,那么触发一个内核的缺页异常,由操作系统根据算法确定对应
    的牺牲页,然后将其换出,换入需要读入的页。这个过程完成后,缺页处理处理程序返回原来的进程,继续执行导致缺页的指令,然后cpu会再次发送
    虚拟地址出去,这个时候该页面已经缓存在主存了,所以就可以顺利拿到数据了。
    上面的步骤中,每个都要从高速缓存/主存中获取PTE,如果在高速缓存中速度还很快,但是如果在主存,那么速度就要下降很多。所以在MMU中就包含
    了一个PTE的缓存TLB,这样进行地址翻译的时候就直接看TLB就可以了。
    PTE是存放虚拟存储器地址对应的物理存储器地址的,对于一个32位机器来说,对应的内存大小是4GB,如果一个页的大小是4KB,那就需要1000000
    条数据来存放整个虚拟存储器对应的虚拟地址空间,一条页表数据4B,那就需要4MB来存储整个页表,注意这还只是一个进程的页表,针对这种情况,
    可以使用多级页表来进行存储。


    对于现有的存储部件,越是快的就越贵,当然也就越小,比如寄存器大小就是byte为单位的,而磁盘是100GB作为单位,而访问时间相比也是横跨了许多数量级。如果不加入缓存机制,那么程序运行起来速度可想而知会有多慢。现在的电脑中,一般的存储结构是这样的:
    寄存器
    L1高速缓存
    L2高速缓存
    L3高速缓存
    主存
    磁盘
    网络I/0
    上面一级的可以看做是下一级的缓存,经常会使用到的数据能够放在更高层次的存储结构中,这样读取速度变快程序也就能够变快了。虽然缓存的机制能够使得程序运行的更快,但是自己想下,如果仅仅是这样的话,一个只有几MB的高速缓存和几个GB的内存比起来也太小了,即使常用的数据能放在高速缓存中,那也放不了多少啊,所以一定是有别的什么拯救了程序的运行,这就是程序的局限性带来的好处。局限性分为2种类型:空间局限性和时间局限性。时间局限性是指一个数据在一段时间内会多次被访问,这样因为第一次访问已经缓存,所以后续的访问就会很快。空间局限性是指在进行高速缓存的时候,数据是按照块来进行缓存的,第一次访问的只是该块中的部分数据,这样会导致整个数据块都被缓存,那么程序很可能在不远的将来引用这个块中的其他的数据。


    高速缓存的组成结构一般是分为S个组,每个组E行,一行包含B个字节数据。所以总体容量C=S*E*B。下面是几种比较特殊的组成结构
    1.直接映射高速缓存
    这种高速缓存对应的E=1




    2.组相连高速缓存




    3.全相联高速缓存

    展开全文
  • 虚拟存储器

    2020-11-30 02:38:05
    虚拟存储器 为了给用户提供更大的随机存取空间而采用的一种存储技术。它将内存与外存结合使用,好像有一个容量极大的内存储器,工作速度接近于主存,每位成本又与辅存相近,在整机形成多层次存储系统。 虚拟存储器...
  • Linux虚拟存储器系统在了解了虚拟存储器的相关知识之后,我们通过Linux的虚拟存储器系统,来大致了解下操作系统是如何组织虚拟存储器的。 Linux进程的虚拟存储器 上图是一个Linux进程的虚拟存储器,与之前所示...

    Linux虚拟存储器系统

    在了解了虚拟存储器的相关知识之后,我们通过Linux的虚拟存储器系统,来大致了解下操作系统是如何组织虚拟存储器的。

    • Linux进程的虚拟存储器
      这里写图片描述
      上图是一个Linux进程的虚拟存储器,与之前所示虚拟存储器的区别在于,其展现方式不再是一个个独立的页,而是按照不同的功能组织成不同的区域。

    • 区域
      Linux将虚拟存储器组织成一些区域的集合。一个区域就是已分配的虚拟存储器的连续片,这些页是以某种方式相关联的。每个存在的虚拟页面都保存在某个区域中,而不属于某个区域的虚拟页是不存在的,并且不能被进程引用。

      内核为系统中的每个进程维护一个单独的任务结构。任务结构中的元素包含或者指向内核运行该进程所需要的所有信息(例如,PID、指向用户栈的指针、可执行目标文件的名字以及程序计数器)。
      这里写图片描述
      task_struct中的一个条目指向mm_struct,它描述了虚拟存储器的当前状态。其中pgd指向第一级页表(页全局目录)的基址,而mmap指向一个vm_area_struct(区域结构)的链表,其中每个vm_area_struct都描述了当前虚拟地址空间的一个区域(area)。

    • 缺页处理
      这里着眼点在于如何结合Linux的虚拟存储器结构进行缺页处理。当MMU翻译某个虚拟地址触发缺页时,则异常导致控制转移到内核的缺页处理程序,程序执行以下步骤:

      • 判断虚拟地址是否合法,即是否在区域结构定义的区域内。
      • 判断试图进行的存储器访问是否合法,即判断进程是否有读、写或执行这个区域内页面的权限。

      这里写图片描述

    • 存储器映射
      Linux虚拟存储器通过将虚拟存储器区域与一个磁盘上的对象关联起来,以初始化这个虚拟存储器区域的内容,这个过程称为存储器映射。
      虚拟存储器区域可以映射到两种类型的对象中的一种:

      • Unix文件系统中的普通文件:一个区域可以映射到一个普通磁盘文件的连续部分,例如一个可执行目标文件。
      • 匿名文件:匿名文件是由内核创建的,包含的全是二进制零。CPU第一次引用这样一个区域内的虚拟页面时,内核就在物理存储器中找到一个合适的牺牲页面,用二进制零覆盖牺牲页面并更新页表,将这个页面标记为是驻留在存储器中的。在磁盘和存储器之间并没有实际的数据传送。映射到匿名文件的区域中的页面有时也叫做请求二进制零的页。比如堆栈、未初始化的数据区域等,与磁盘无关了其实。
    • 共享对象
      一个对象可以被映射到虚拟存储器的一个区域,要么作为共享时象,要么作为私有对象。对私有对象的写操作不会反应在磁盘上的对象中,而对共享对象的写操作会。
      这里写图片描述

      私有对象使用一种写时拷贝技术,即在未进行写操作时,多个进程的虚拟存储器指向同一个对象,知道某个进程进行了写操作才拷贝一份。
      这里写图片描述

    • execve函数
      execve函数在当前进程中加载并运行包含在可执行目标文件a.out中的程序,用a .out程序有效地替代了当前程序。加载并运行a .out需要以下几个步骤:

      • 删除已存在的用户区域。
      • 映射私有区域。
      • 映射共享区域。
      • 设置程序计数器。

      这里写图片描述

    展开全文
  • 虚拟存储器虚拟存储器是一个抽象的概念,主要目的是为多个程序之间有效而安全地共享存储器。它为每个进程提供了一个大的、一致的和私有的地址空间。 虚拟地址与物理地址 把主存看成是由连续字节单元组成的大数组,...

    虚拟存储器

    虚拟存储器是一个抽象的概念,主要目的是为多个程序之间有效而安全地共享存储器。它为每个进程提供了一个大的、一致的和私有的地址空间。

    • 虚拟地址与物理地址
      把主存看成是由连续字节单元组成的大数组,并且用物理地址来标识每个数组的单元。那么物理寻址如下图:
      这里写图片描述

      虚拟寻址如下图:
      这里写图片描述

    • 虚拟存储器与物理存储器
      虚拟存储器被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组。和存储器层次结构中其他缓存一样,磁盘(较低层)上的数据被分割成块,这些块作为磁盘和主存(较高层)之间的传输单元。虚拟存储器分割为虚拟页,物理存储器被分割为物理页。其映射关系如下:
      这里写图片描述

    • 页表
      页表是一个页表条目(PTE)的数组,维护了虚拟地址与物理地址的映射关系:
      这里写图片描述
      虚拟地址空间中的每个页在页表中一个固定偏移量处都有一个PTE,每个PTE是由一个有效位和一个n位地址字段组成。有效位表明了该虚拟页当前是否被缓存在DRAM中。根据有效位及地址段的不同情况,有如下三种可能:

      • 设置了有效位,那么地址字段就表示DRAM中相应的物理页的起始位置,这个物理页中缓存了该虚拟页。
      • 未设置有效位,地址段为空,表示这个虚拟页还未被分配。
      • 未设置有效位,地址段不为空,则地址指向该虚拟页在磁盘上的起始位置。
    • 页命中与缺页
      这个可以参照高速缓存,不进行过多解释了。
      页命中:
      这里写图片描述

      缺页:
      这里写图片描述
      缓存不命中称为缺页,缺页异常调用内核中的缺页异常处理程序,该程序会选择一个牺牲页。当异常处理程序返回时,会重新启动导致缺页的指令。

      牺牲页是针对物理存储器的,对于页表来说其大小是固定的

      如果工作集的大小超过了物理存储器的大小,会不断的导致缓存不命中,产生颠簸状态,页面将不断的换进换出。

    • 虚拟存储器与存储器
      操作系统为每个进程提供了一个独立的页表,因而也就是一个独立的虚拟地址空间:
      这里写图片描述

      任何现代计算机系统必须为操作系统提供手段来控制对存储器系统的访问。通过在PTE上添加一些额外的许可位来控制对一个虚拟页面内容的访问:
      这里写图片描述
      SUP位表示进程是否必须在内核模式下才能访问该页,READ与WRITE位控制对页面的读写访问。

    地址翻译

    • 地址翻译(虚拟地址–>物理地址)
      过程见图:
      这里写图片描述

      其中,存储器管理单元(MMU)负责请求页表条目及翻译地址和缺页处理。MMU利用VPN来选择PTE,如VPN0选择PTE0。

      这里写图片描述

    • 高速缓存及TLB缓存PTE
      在地址翻译的过程中,有一个步骤是通过页表条目地址来查找PTE,我们可以通过结合高速缓存来提高其查找速度:
      这里写图片描述

      TLB是专门用于虚拟寻址的缓存,称为翻译后备缓冲器:
      这里写图片描述

    • 多级页表
      我们知道,页表存储了虚拟地址与物理地址的映射关系,并且对于页表映射了全部的虚拟地址空间。假如是32位的地址空间、4KB的页面和一个4字节的PTE,那么也总是需要4MB的页表驻留在存储器中。并且很多情况下,我们只会引用虚拟地址空间中的一小部分。
      常用压缩页表的方法是使用多级页表。以一个二级页表为例:
      这里写图片描述
      一级页表中的每个PTE负责映射虚拟地址空间中一个4MB的片,如果片i中的每个页面都未被分配,那么一级PTEi就为空。二级页表中的每个PTE都负责映射一个4KB的虚拟存储器页面。
      这种方法从两个方面减少了存储器要求。第一,如果一级页表中的一个PTE是空的,那么相应的二级页表就根本不会存在,这代表着一种巨大的潜在节约,因为对于一个典型的程序,4GB的虚拟地址空间的大部分都将是未分配的。第二,只有一级页表才需要总是在主存中;虚拟存储器系统可以在需要时创建、页面调人或调出二级页表,这就减少了主存的压力,只有最经常使用的二级页表才需要缓存在主存中。

      使用多级页表的地址翻译如下图:
      这里写图片描述
      在这种情况下,在确定PPN之前,MMU必须访问k个PTE。

    • 优化地址翻译
      在地址翻译我们描述了两个步骤的过程:1) MMU将虚拟地址翻译成物理地址;2)将物理地址传送到Ll高速缓存。然而,实际的硬件实现中允许这些步骤部分重叠,当MMU向TLB请求一个页表条目时,Ll高速缓存正忙着利用VPO查找相应的组,并读出这个组里的八个标记和相应的数据字。当MMU从TLB得到PPN时,缓存已经准备好试着把这个PPN与这八个标记中的一个进行匹配了。

    最后建议做一下《深入理解计算机系统(原书第2版)》547页的例题,可以对高速缓存及虚拟存储器的地址翻译有一个整体的认识。

    展开全文
  • 采用虚拟存储器的目的是:扩大内存的容量(即寻址空间)。 一般而言,计算机的RAM容量越大,程序运行得越快。若计算机的速率由于RAM可用空间匮乏而减缓,则可尝试通过增加虚拟内存来进行补偿。本教程操作环境:windows...
  • 14虚拟存储器

    2021-08-05 14:21:16
    3.7 虚拟存储器 主存和联机工作的辅存共同构成了虚拟存储器,二者在硬件和系统软件的共同管理下工作.对于应用程序员而言,虚拟存储器是透明的.虚拟存储器具有主存的速度和辅存的容量,提高了存储系统的性价比 3.7.1 ...
  • 《计算机组成原理 第18讲_虚拟存储器》由会员分享,可在线阅读,更多相关《计算机组成原理 第18讲_虚拟存储器(36页珍藏版)》请在人人文库网上搜索。1、计算机组成原理 Principles of Computer Organization 广义双语...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,768
精华内容 26,707
关键字:

关于虚拟存储器