virtual cache基本概念

Virtual cache的引入

      

  • TLB只是加速了从虚拟地址到物理地址的转换,可以很快地得到所需要的数据(或指令)在物理内存中的位置,也就是得到了物理地址
  • 但是,如果直接从物理内存中取数据(或置指令),显然也是很慢的,因此可以使用在以前章节提到的Cache来缓存物理地址到数据的转换过程。
  • 实际上,从虚拟地址转化为物理地址之后,后续的过程就和前文讲述的内容是一样的了。
  • 因为这种Cache使用物理地址进行寻址,因此称为物理Cache(Physical Cache),使用 TLB 和物理 Cache 一起进行工作的过程如图 3. 26 所示。

存在的问题

        现在需要先访问TLB, 再访问physical cache, 必然会增加流水线的延迟;

        解决方式: 用虚拟地址来寻址cache;

            

        此时这个cache称之为virtual cache;

        既然使用虚拟Cache,可以直接从虚拟地址得到对应的数据,那么是不是就可以不使用TLB了呢?

  • 当然不是这样,因为一旦虚拟Cache发生了缺失,仍旧需要将对应的虚拟地址转换为物理地址,
  • 然后再去物理内存中获得对应的数据, 因此还需要TLB来加速从虚拟地址到物理地址的转换过程。

virtual cache带来的问题:

Aliasing 问题

       

        不同的虚拟地址,对应相同的物理地址;

        这样就会引入一个问题,虚拟地址不同,在virtual cache中会占用不同的way,但是实际上这些虚拟地址都对应的是同一个物理地址,最终导致:

        ● 浪费了宝贵的cache空间,造成cache等效容量的减少,降低了整体的性能;

        ● 当执行store时,会将数据写入虚拟地址(tag)对应的way中,但是,实际上当前cache中,有很多tag都对应的是同一个物理地址,那么其他va来读时,读不到最新的数据;

是不是所有的virtual cache都有alising问题?

         这取决于page的大小和cache的大小;

  • 假设page的大小为4KB, 则VA/PA的低12bits是完全相同的;
  • cache的大小,<=4KB, direct-mapped cache;
  • 此时索引cache的地址范围,只能在低12bit范围内;
  • 此时即使VA不同,但是他们最终索引到的way是一样的,所以,不会出现不同VA,占用多个cache entry的情况;
  • 只有cache size > 4KB时,才会出现aliasing问题;

怎么解决aliasing问题 

考虑8KB, 直接相连结构的cache的alising 问题;

         

当两个虚拟地址映射到同一个物理地址时,两个虚拟地址的第 12 位可能是 0、也可能是 1。

也就是说,此时在虚拟Cache中会有两个不同的地方存储着同一个物理地址的值;

解决方式一:

        当一个虚拟地址写Cache时,将Cache中可能出现同义问题的两个位置都进行更新,这就相当于将它们作为一个位置来看待;

  • 要实现这样的功能,就需要使用物理地址作为Cache的Tag部分(VIPT),并且能够同时将虚拟Cache中两个可能重名的位置都读取出来,这就要在Cache中使用bank的结构,
  • 例如图3.29所示的大小为8KB、直接相连结构的Cache就需要两个bank,使用虚拟地址VA[11:0]进行寻址。
  • 在写Cache时,两个bank中对应的位置都需要更新,这样在读取Cache时,也就会从两个bank中得到同一个值了;
  • 但是这样的方法相当于将Cache的容量减少了一半,显然无法在实际当中使用。

解决方式二: 分bank处理

        同样考虑8KB, 直接相连的cache; 内部分为两个4KB的bank;

    

  •  读取时:
    • 两个bank的对应位置,数据和tag都读出来;
    • VA经过TLB转换后,得到PA, 将PA和tag进行比较,和谁比得上,读谁的数据;
    • (由于物理地址需要经过TLB才可以得到,所以当Cache中两个bank输出的值送到多路选择器的时候,物理地址可能还没有从TLB中得到,这样在一定程度上增加了处理器的周期时间)
  • 写入时:其实可以同理,都比较一下,判断是否hit;

这种方式需要增加额外的逻辑,比如bank的增加,选择电路的增加;

Homonyms问题

        即相同的VA, 对应不同的PA;

        这是因为,不同的进程,会存在很多相同的虚拟地址,这些虚拟地址实际上对应的物理地址是不同的,当进程之间进行切换时,如果还是映射到上一个进程的物理地址,肯定是会有问题;

解决方式:

1. 在进程切换的时候,直接invalid所有的TLB entry;

        当进程切换很频繁时,就需要经常将TLB和虚拟Cache的内容清空,这样可能浪费了大量有用的值,降低了处理器的执行效率。

2. 给每一个进程,都赋一个ID, 称之为PID/ASID

        使用ASID相当于扩展了虚拟存储器的空间,此时仍然是每个进程可以看到整个的4GB的虚拟存储器空间,而且每个进程的4GB都互相不交叠。

        例如,当使用8位的ASID时,那么虚拟存储器就有28=256 个4GB的空间,就相当于此时虚拟存储器的空间为256×4GB=1024GB,也就是说,使用ASID就等于扩大了虚拟存储器的空间。

        

考虑这样一个问题:如果不同的进程之间,想要共享一些page的时候,如何实现?

  • 再增加一个标志位,Global(G);
  • 当一个页不只是属于某一个进程,而是被所有的进程共享时,就可以将这个Global位置为1,这样在查找页表的时候,如果发现G位是 1,那么就不需要再理会ASID的值,这样就实现了一个page被所有的进程共享的功能;

增加ASID后带来的问题

        增加ASID后,会导致地址的范围增大,从而导致页表的索引bit增多,这会导致页表过大,过大的页表会导致其内部出现碎片,降低页表的利用效率;

        为了解决这个问题,可以采用三级页表的方式,增加一个额外的页表,使用ASID进行索引;          使用这样的方式,要从虚拟地址中得到需要的数据,相比于两级页表,需要多一次物理内存的访问,这会造成TLB缺失的处理时间变长,是使用ASID带来的一个负面影响,尤其是 TLB 缺失发生的频率很高时,这种负面影响更为严重。

在使用多级页表的系统中,只有第一级页表才会常驻物理内存中,第一级页表的基地址由处理器当中专用的寄存器指定,例如图 3. 32 中的 PTR 寄存器。

  • 支持 ASID 的处理器中还会有一个寄存器来保存当前进程的 ASID值,
  • 每次操作系统创建一个进程时,就会给当前的进程分配 ASID值,并将其写到 ASID 寄存器中
  • 这个进程中所有的虚拟地址都会在前面被附上这个ASID的值。
  • 在TLB中, ASID和VPN一起组成了新的虚拟地址,参与地址的比较,这样就在TLB中对不同的进程进行了区分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/19527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

集成电路的引脚分布规律及识别

集成电路的引脚分布规律根据不同的封装方式而确定&#xff0c;引脚的序号和集成电路图中的编号是一一对应的&#xff0c;识别集成电路的引脚号对分析集成电路的内部框图和工作原理&#xff0c;以及排除集成电路的故障都具有重要的意义。 1.单列集成电路引脚的分布规律及识别 …

区块链技术:金融行业的信任基石

一、引言 在数字化转型的浪潮中,区块链技术以其独特的优势,正逐渐成为金融行业的信任基石。本文将深入探讨区块链技术在金融行业的应用,通过具体案例的细化和完善,分析其特点和影响。 二、区块链技术的核心特点 1. 去中心化:区块链技术通过分布式账本,实现去中心化的数…

栈和队列题目练习

本节小编选了两道题来加深对栈和队列的认识理解&#xff01; 有效的括号 方法1&#xff1a;直接用栈的结构&#xff08;动态数组&#xff09; 本题可以用栈这个结构来解答&#xff0c;将(,{,[ 左括号压入栈中&#xff0c;然后取出栈顶元素与右括号),},]匹配。不匹配的话&…

【Qt】【模型视图架构】 在项目视图中启用拖放

文章目录 1. 在便捷类中启用拖放2. 在模型/视图类中启用拖放 模型/视图框架支持Qt的拖放应用。 列表、表格和树中的项目可以在视图中被拖拽&#xff0c;数据作为MIME编码的数据被导入和导出。标准视图可以自动支持内部的拖放。 默认视图的拖放功能并没有被启用&#xff0c;如果…

opencv进阶 ——(八)图像处理之RMBG模型AI抠图

BRIA.AI团队于HuggingFace开源了一个基于ISNet背景移除模型RMBG-1.4&#xff0c;它可以有效对前景与背景进行分离。RMBG-1.4在精心构建的数据集上训练而来&#xff0c;该数据包含常规图像、电商、游戏以及广告内容&#xff0c;该方案达到了商业级性能&#xff0c;但仅限于非商业…

【PHP项目实战训练】——laravel框架的实战项目中可以做模板的增删查改功能(1)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

【管理咨询宝藏120】顶级咨询公司领导管控优化设计方案

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏120】顶级咨询公司领导管控优化设计方案 【格式】PDF版本 【关键词】人力资源、组织管控、领导力 【核心观点】 - 管的过细” “高层的管理要往…

【排序】冒泡排序

在我们的生活中&#xff0c;到处都离不开排序的作用&#xff0c;考试分数要排序&#xff0c;商场购物要排序&#xff0c;可以说排序对我们来说处处存在&#xff0c;那么从本章开始&#xff0c;我将要依次分享一些排序方法&#xff0c;从易到难&#xff0c;包括冒泡&#xff0c;…

随身wifi和手机流量卡,你知道该怎么选吗?

网络已经成为我们这个时代的代名词&#xff01; 那么&#xff0c;在上网的时代&#xff0c;我们有很多问题都要考虑&#xff0c;比如如何选择上网方式&#xff0c;是选择一张流量卡&#xff0c;还是一个随身WIFI&#xff1f; 听小编一句劝&#xff0c;先不要着急买&#xff0c…

接口测试工具:Postman的下载安装及使用

1 Postman 介绍 1.1 Postman 是什么 Postman 是一款功能超级强大的用于发送 HTTP 请求的 测试工具 做 WEB 页面开发和测试的人员常用工具 创建和发送任何的 HTTP 请求(Get/Post/Put/Delete...) 1.2 Postman 相关资源 1.2.1 官方网站&#xff1a;https://www.postman.com/ …

sde the Upgrade Geodatabase tool to install/upgrade system tables (-64).

数据库端迁移sde导入后&#xff0c;在sde端启动服务报错&#xff1a; ------------------------------------------------------- ArcSDE 10.0 for Oracle11g Build 685 Fri May 14 12:05:43 2010 ------------------------------------------------------- ST_Geometry Sc…

Java——面向对象初阶

前言&#xff1a; Java面向对象相关讲解 文章目录 一、面向对象二、类与对象三、封装四、构造方法及重载五、this关键字六、基本数据类型和引用数据类型七、JavaBean类 一、面向对象 面向对象&#xff08;Object-Oriented Programming, OOP&#xff09;是一种编程范式&#xff…

C++第二十二弹---vector深度剖析及模拟实现(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、容量操作 2、内容修改操作 3、打印函数 4、迭代器失效 4.1、什么是迭代器失效 4.2、哪些操作会引起迭代器失效 总结 1、容量操作 size()…

Idea的相关操作

1、关闭自动更新 点击左上角File->Setting&#xff0c;进入配置页面&#xff0c;点击Appearance & Behavior > System Settings > Updates&#xff0c;取消勾选更新选项&#xff0c;如图&#xff1b; 2、代码提示忽略大小写 点击左上角File->Setting&#xf…

用Unityhub安装unity2018.3.0和vuforia

打开下载网址 https://unity.cn/releases/full/2018 选择2018.3.x 找到2018.3.0后&#xff0c;点击从UnityHub下载 然后unityhub会弹出安装界面 只勾选这两个&#xff0c;其余的全部取消勾选&#xff0c;默认勾选上的也取消掉&#xff0c;然后点击安装

【数据分享】2009-2022年我国省份级别的轨道交通相关指标(20多项指标)

《中国城市建设统计年鉴》中细致地统计了我国城市市政公用设施建设与发展情况&#xff0c;在之前的文章中&#xff0c;我们分享过基于2006-2022年《中国城市建设统计年鉴》整理的2006—2022年我国省份级别的市政设施水平相关指标、2006-2022年我国省份级别的各类建设用地面积数…

String 类

目录&#xff1a; 一. 认识 String 类 二. String 类的基本用法 三. String对象的比较 四.字符串的不可变性 五. 认识 StringBuffer 和 StringBuilder 一. 认识 String 类&#xff1a; 在C语言中已经涉及到字符串了&#xff0c;但是在C语言中要表示字符串只能使用字符数组或者…

Unity2D横版摄像机跟随

在Unity2D横版游戏中&#xff0c;摄像机跟随是一个非常重要的功能。一个流畅的摄像机跟随系统可以让玩家更好地沉浸在游戏世界中。本文将介绍如何在Unity中实现2D横版摄像机跟随&#xff0c;并分享一些优化技巧。 一、准备工作 在开始实现摄像机跟随之前&#xff0c;请确保您…

MFC 模态对话框的实现原理

参考自MFC 模态对话框的实现原理 - 西昆仑 - OSCHINA - 中文开源技术交流社区 1. 模态对话框 在涉及 GUI 程序开发的过程中&#xff0c;常常有模态对话框以及非模态对话框的概念 模态对话框&#xff1a;在模态对话框活动期间&#xff0c;父窗口是无法进行消息响应&#xff0…

JavaEE初阶多线程 (5)

1.锁的策略 1.1锁的策略是什么 这个锁的策略可以理解为&#xff0c;一种做法&#xff0c;相当于当你遇到锁竞争&#xff0c;加锁解锁&#xff0c;的情况你会怎么做。 乐观锁可以理解为疫情的时候比较乐观就买了最基本的物资&#xff0c; 买的时候非常方便 1.2乐观锁 当效率…