虚拟内存详解

一、虚拟内存(VM)概述

  1. 物理寻址(PA,physical addressing):计算机的主存被组织一个由M个连续的字节大小的单元组成的数组。每个字节都有一个唯一的物理地址;直接使用物理地址访存的方式为物理寻址;早期的PC使用物理寻址,而且诸如嵌入式微控制器等这样的系统仍继续使用这种寻址方式。
  2. 虚拟寻址(VA,Virtual Address):现代的处理器使用的寻址形式,CPU通过生成一个虚拟地址来访问主存,这个虚拟地址在被传送到内存之前先转换成适合的物理地址。将一个虚拟地址转换为物理地址的任务叫做地址翻译(MMU,内存管理单元)在这里插入图片描述
  3. 地址空间:地址空间是一个非负整数地址的有序集合:{0,1,2……},如果地址空间中的整数是连续的,那么我们就说它是一个线性地址空间。
    1. 在一个带虚拟内存的系统中,CPU从一个有N=2^n个地址的地址空间中生成虚拟地址,这个地址空间称为虚拟地址空间:{0,1,2,……,N-1},为一个n位地址空间。现代操作系统
      2)一个系统还有一个物理地址空间,对应于系统中物理内存的M个字节:{0,1,2,……,M-1},M不要求是2的幂,但是我们假设M=2^m
      3)地址空间区分了数据对象(字节)和它们的属性(地址)。我们允许每个数据对象有多个独立的地址,其中每个地址都选自一个不同的地址空间,这就使虚拟内存的基本思想。

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

  1. 虚拟内存的内容:虚拟内存被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组,每字节都有一个唯一的虚拟地址,作为到数组的索引。
  2. 主存与虚拟内存的关系:主存可以看做是虚拟内存的缓存;虚拟内存被分割为虚拟页(VP,virtual page),其以虚拟页为单位进行缓存,每个虚拟页的大小为P=2^p个字节。物理内存也被分割为物理页(PP,physical page),每个物理页大小也为P字节
  3. 虚拟页的分类:任一时刻,磁盘上的虚拟页都分为三个不相交的子集
    1)未分配的,VM系统还未分配的页。其没有任何数据与它们关联,不占任何磁盘空间。
    2)缓存的,当前已经缓存在物理内存的已分配页
    3)未缓存的,分配了,但是没有缓存到物理内存中的已分配页
  4. 页表
    1)页表是存放在物理内存中的一个数据结构(可以看做一个数组),其反映了虚拟页和物理页之间的映射关系。
    2)其数据单位为页表条目(PTE,page table entry),虚拟页在页表中都有一个PTE,PTE内有一个有效位、各种许可位和一个n位地址字段组成。
    3)有效位表明该虚拟页是否缓存在了内存中。如果是未分配的,则有效位为0,地址为NULL;如果未缓存的,有效位为0,且地址为虚拟页在磁盘上的起始位置;如果是缓存的,则有效位为1,地址为内存中物理页的起始位置。
    4)页命中:地址翻译硬件将得到的虚拟地址访问内存,虚拟页是缓存的,则为页命中,找到对应的物理地址
    5)缺页:地址翻译硬件将得到的虚拟地址访问内存,虚拟页是未缓存的,即未命中,产生缺页异常,调用内核的缺页异常处理程序。然后操作系统来进行按需页面调度,把未命中的虚拟页缓存到内存中,然后重新执行导致缺页的指令。

三、虚拟内存作为内存管理的工具

  1. 操作系统为每个进程提供了一个独立的页表,因而也就是一个独立的虚拟地址空间。多个虚拟页面可以映射到同一个共享物理页面上。
  2. 按需页面调度和独立的虚拟地址空间的结合,对系统中内存的使用和管理造成了深远的影响。特别地,VM简化了链接和加载、代码和数据共享,以及应用程序的内存分配
    1)简化链接,独立的地址空间允许每个进程的内存映像使用相同的基本格式,而不管代码和数据实际存放在物理内存的何处。
    2)简化加载,加载器从不从磁盘到内存实际赋值任何数据。要把目标文件中的.text和.data节加载到一个新创建的进程中,Linux加载器为代码和数据段分配虚拟页,并把他们标记为无效的(即未被缓存但分配了的),将页表条目指向目标文件中适当的位置。
    3)简化共享,独立地址空间为操作系统提供了一个管理用户进程和操作系统自身之间共享的一致机制。
    4)简化内存分配,虚拟内存为向用户进程提供一个简单的分配额外内存的机制。当一个运行在用户进程中的程序要求额外的堆空间时,操作系统分配一个适当的数字(例如k)个连续的虚拟内存页面,并且将他们映射到物理内存中任意位置的k个任意的物理页面。也就是,页面可以随机地分配在物理内存中。

四、虚拟内存作为内存保护的工具

  1. 任何现代计算机系统必须为操作系统提供手段来控制对内存系统的访问。
  2. 提供独立的地址空间使得区分不同进程的私有内存变得容易。但是,地址翻译机制可以以一种自然的方式扩展到提供更好的访问控制——每次CPU生成一个地址时,地址翻译硬件都会读一个PTE,所以通过在PTE上添加一些额外的许可位来控制对一个虚拟页面内容的访问十分简单。
  3. 如果一条指令违反了这些许可条件,那么CPU就会触发一个一般保护故障,将控制传递给一个内核中的异常处理程序。——Linux shell一般称之为“段错误”

五、一些名词缩写

  1. PA:物理地址
  2. VA:虚拟地址
  3. VP:虚拟页
    1. 未分配的、缓存的、未缓存的
  4. PP:物理页
  5. PTE(页表条目):由一个有效位和一个n位地址字段组成
  6. PTEA:页表条目地址
  7. 地址翻译的一些缩写
    1. 基本参数:N=2n虚拟地址空间中的地址数量,M=2m物理地址空间中的地址数量,P=2^p页的大小(字节)
    2. 虚拟地址的组成部分:VPO虚拟页面偏移量(字节),VPN虚拟页号,TLBI TLB索引,TLBT TLB标记
    3. 物理地址的组成部分:PPO物理页面偏移量(字节),PPN物理页号,CO缓冲块内的字节偏移量,CI高速缓存索引,CT高速缓存标记

六、地址翻译(MMU)讲解

  1. 形式上来讲,地址翻译是一个N元素的虚拟地址空间(VAS)中的元素和一个M元素的物理地址空间(PAS)中元素之间的映射

  2. CPU中的一个控制寄存器——**页表基址寄存器(PTBR)**指向当前页表。n位的虚拟地址包含一个p位的虚拟页面偏移VPO和一个n-p位的虚拟页号VPN。MMU利用VPN选择适当的PTE

  3. 物理地址与虚拟地址的关系如下图所示

  4. 页面命中,执行如图所示的步骤
    在这里插入图片描述

  5. 页面未命中,执行如图所示的步骤。第⑦步代表再次执行导致缺页的指令
    在这里插入图片描述

七、加上高速缓存与快表(TLB)

  1. 结合高速缓存
    在这里插入图片描述

  2. 快表(TLB,Translation Lookaside Buffer):
    1)TLB是一个小的、虚拟寻址的缓存,其中每一行都保存着一个由单个PTE组成的块,TLB通常有高度的相联度。
    2)TLB位于MMU中(位于硬件中,所以与MMU交互速度很快),可以理解为页表的缓存
    3)TBLT(TLB标记,用于索引到对应组后的查找) TLBI(TLB索引,如果TBL有2^t各组,则其长度为t)构成VPN,VPN和VPO构成VA
    在这里插入图片描述
    4)TBL命中与TBL不命中
    在这里插入图片描述

八、综合:端到端的地址翻译(虚拟地址如何一步一步转化为物理地址)

1. 场景描述
问题描述

2. 页表展示
在这里插入图片描述

  1. L1高速缓存中的数据

在这里插入图片描述

  1. 得到的VA为0x03d4
    1)VA为14位,VPN(VPN虚拟页号)8位,VPO(虚拟页面偏移量,一个页面64位,2^6为64)所以VPO6位;TLB四组相连,所以TBLI需要2位;TBLT,为8-2=6位 ,如下图
    在这里插入图片描述
    2)查找TLB,TLB第三组第二个命中,然后将缓存的PPN返回给MMU
    3)得到PPN后,先访问高速缓存,高速缓存物理寻址、直接映射,行大小4字节、总共16组,得到下列关系

    在这里插入图片描述
    4)在高速缓存中寻找数据,第5组,第0个,标记为0x0d,数据为36,将其返回给MMU,随后MMU将它传递回CPU

九、一点思考

  1. 通过这个虚拟内存到物理内存的结构,可以看到一层一层的层级结构来进行优化,应验了一句话:计算机里的大部分问题都可以通过引用中间层解决,诸如页表、快表、高速缓存、内存等都是中间层,一步一步的构成了体系结构;所以我们需要养成一些找中间层的思维
  2. 可以感受到设计的魅力,设计不仅仅是理论就可以了,还得有很多因素需要考虑。像分块、局部性、虚拟地址的产生等,都能够感受到一些设计的思维,需要细细品味。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Toser

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值