概述

处理器在访问存储器时,访问的地址都是虚拟地址,经过TLB和MMU的映射后变成物理地址。TBL只用于加速虚拟地址到物理地址的转换过程。得到物理地址后,若每次都直接从物理内存中读取数据,显然会变慢。实际上,处理器都配置了多级的高速缓存来加快数据的访问速度。

物理高速缓存

当处理器查询MMU和TLB并得到物理地址之后,使用物理地址查询高速缓存,这种高速缓存称为物理高速缓存。

缺点:使用物理高速缓存的缺点就是处理器在查询MMU和TLB后才能访问高速缓存,增加了流水线的延迟时间。

物理高速缓存的工作流程如下图:

虚拟高速缓存

若处理器使用虚拟地址来寻址高速缓存,称为虚拟高速缓存。处理器在寻址时,首先把虚拟地址发送到高速缓存,若高速缓存里找到需要的数据,就不需要访问TLB和物理内存。

缺点:会引入问题:1.重名(aliasing)问题,2.同名(homonyms)问题

虚拟高速缓存的流程图:

总结:

1.不管是物理高速缓存和虚拟高速缓存,其实都是高速缓存,这里采用虚拟/物理来区分查询高速缓存的类别。

2.在查询TLB前,都是先确认高速缓存是否被命中。

重名(Aliasing)问题

在操作系统中,多个不同的虚拟地址有可能映射相同的物理地址。由于采用高速缓存架构,那么这些不同的虚拟地址会占用高速缓存中不同的高速缓存行,但是他们对应的是相同的物理地址。

例:VA1 和 VA2都映射到PA,在cache中有两个cache line缓存了VA1和VA2。当程序往VA1写入数据时,VA1对应的高速缓存行以及PA的内容会被更改,但是VA2还保存着旧数据。这样一个物理地址在高速缓存中就保存了两份数据,这样会产生歧义。

同名(Homonyms)问题

  • 相同的虚拟地址对应着不同的物理地址,因为操作系统中不同的进程会存在很多相同的虚拟地址,而这些相同的虚拟地址在经过MMU转换后得到不同的物理地址,就产生了同名问题。

  • 同名问题最常见的地方是进程切换。当一个进程切换到另外一个进程时,新进程使用虚拟地址来访问高速缓存的话,新进程会访问到旧进程遗留下来的高速缓存,这些高速缓存数据对于新进程来说是错误的并且是无用的。解决办法是在进程切换时把旧进程遗留下来的高速缓存都置位无效,这样就能保证新进程执行时得到一个干净的虚拟高速缓存。

高速缓存分类

  • VIVT(virtual index virtual tag):      使用虚拟地址的索引域和虚拟地址的标记域,相当于虚拟高速缓存。

  • PIPT(physical index physical tag): 使用物理地址的索引域和物理地址的标记域,相当于物理高速缓存。

  • VIPT(virtual index physical tag): 使用虚拟地址的索引和物理地址的标记域。

VIPT工作过程

处理器输出的虚拟地址会同时做两件事:

1.发送虚拟地址到TLB/MMU进行地址翻译。

2.在高速缓存中进行索引和查询高速缓存。

当上面两件事情做完后,从1中可以得到PFN,可以得到物理地址的标记域(PT), 可以从2中得到高速缓存的标记域(tag),对这两个标记域进行比较,如果相等,说明高速缓存命中了,如果不等,cache miss。

VIPT重名问题

采用VIPT方式也有可能导致高速缓存重名的问题。在VIPT中,使用虚拟地址的索引域来查找cache组,这时有可能导致多个cache组映射到同一个物理地址上。以linux kernel为例,它是以4KB大小为一个页面进行管理的,那么对于一个页来说,虚拟地址和物理地址的低12bit(bit(11:0))是一样的。因此,不同的虚拟地址映射到同一个物理地址,这些虚拟地址页面的低12位是一样的。如果索引域位于bit[11:0]范围内,那么就不会发生高速缓存重名。例如,cache line是32Byte,那么数据域偏移offset使用5bit,有128个cache组,那么索引域使用7bit,这种情况下刚好不会发生重名。

VIPT重名实例

以Linux kernel为例,page为4KB,假如索引域为bit[12:0],高速缓存的路(way)为8KB,则bit12索引高速缓存路(way)中的前4KB还是后4KB,bit[11:0]在4KB内进行索引。如下图:

题目

在一个32KB的4路组相联的cache中,其中cache line为32Byte,请画出这个cache的cache line、way和set的示意图。

答: 在Cortex-A7和Cortex-A9的处理器上可以看到32KB大小的4路组相联cache。下面来分析这个cache的结构图。

cache的总大小为32KB,并且4路(way),所以每一路的大小为8KB: way_size = 32/4 = 8 (KB)

cache line的大小为32Byte,所以每一路包含的cache line数量为:num_cache_line = 8KB/32B = 256

物理/虚拟高速缓存区别以及高速缓存重名/同名问题详解相关推荐

  1. vsftp建立虚拟用户不同目录分配不同权限操作步骤详解

    这篇文章主要介绍了vsftp建立虚拟用户不同目录分配不同权限操作步骤详解,大家参考设置自己的FTP服务器吧vsftpd服务器同时支持匿名用户.本地用户和虚拟用户三类用户账号,使用虚拟用户账号可以提供集 ...

  2. 视频文件格式扩展名/专用名词详解_拔剑-浆糊的传说_新浪博客

    视频文件格式扩展名/专用名词详解 收藏 http://blog.csdn.net/fancyaphy/archive/2006/08/08/1037131.aspx AAC AAC全称高级音频编码(A ...

  3. mybatis获取表名_mybatis plus 的动态表名的配置详解

    mybatis plus简介 详见mybatis plus的官网 业务要求 业务上要求存储数据的时候根据某个字段动态的选择数据要存储的表. 如根据code字段: code->[1001,1002 ...

  4. rename python_谈谈重命名方法renames详解

    这篇文章主要介绍了python下os模块强大的重命名方法renames详解的相关资料,需要的朋友可以参考下python下os模块强大的重命名方法renames详解 在python中有很多强大的模块,其 ...

  5. MySQL隔离级别--未提交读,提交读,可重复读,序列化--详解(有示例)

    原文网址:MySQL隔离级别--未提交读,提交读,可重复读,序列化--详解(有示例)_IT利刃出鞘的博客-CSDN博客 简介          本文介绍MySQL的事务隔离级别的含义,并用示例说明各个 ...

  6. php身份证注册判断重名,同名同姓测试,全国公民身份信息系统库查重名

    同名同姓测试,全国公民身份信息系统库查重名 时间:2020-05-21 13:30:01 大部分爸爸妈妈在给宝宝取姓名的时候,会好奇在全国范围内有多少人名字相同,希望孩子的名字不会跟太多人重合.或者有 ...

  7. C语言中指针与数组的区别,C语言 指针与数组的详解及区别

    C语言 指针与数组的详解及对比 通俗理解数组指针和指针数组 数组指针: eg:int( *arr)[10]; 数组指针通俗理解就是这个数组作为指针,指向某一个变量. 指针数组: eg:int*arr[ ...

  8. mysql 脏读 不可重复读 幻读_mysql事务隔离级别/脏读/不可重复读/幻读详解

    一.四种事务隔离级别 1.1read uncommitted 读未提交 即:事务A可以读取到事务B已修改但未提交的数据. 除非是文章阅读量,每次+1这种无关痛痒的场景,一般业务系统没有人会使用该事务隔 ...

  9. 运算符“||”与“|”,“”和“”的区别 (附带各类位运算符号详解(、|、^、~、<<、>>、>>>)

    区别一: 定义不同: || 和 | 都是表示"或",区别是||只要满足第一个条件,后面的条件就不再判断,而|要对所有的条件进行判断. 区别二: 与操作和或操作的区别 (1)在Jav ...

最新文章

  1. MyBatis多数据源配置(读写分离)
  2. js 1 声明变量 数据类型
  3. 《微软文档管理解决方案2007》之一:安装部署 - [SharePoint Server]
  4. 每日程序C语言24-回文数字的判断
  5. 总谐波失真80_如何将总谐波失真降至 10% 以下
  6. lisp 角平分线_《最佳Visual-LISP-及VBA-for-AutoCAD-2000程序123例》.pdf
  7. Linux/UNIX 图形操作环境KDE 与GNOME
  8. Android版抢票神器使用指南及下载地址
  9. 阿里技术人才能力模型(深度解读系列之二)
  10. 列宁名言、警句、格言、语录
  11. 2021届BiliBili校招 数据分析/后端开发 笔试题记录
  12. MySQL连接、SSL加密与密码插件
  13. 机械祭天法力无边:练习3.4:编写一段程序读入两个字符串,比较其是否相等并输出结果。如果不相等,输出较大的那个字符串。改写上述程序,比较输入的两个字符串是否等长,如果不等长,输出长度较大的那个字符串。
  14. 什么是智能会议平板?
  15. 西门子840Dsl系统的刀具列表数据采集
  16. 另一个伊甸 更新进度 23-01-27
  17. emui11升级成鸿蒙os,华为EMUI11正式发布,今年12月可升级为鸿蒙OS2.0国产操作系统...
  18. 桌面上的文件夹存储路径是什么?桌面文件夹误删了怎么找回
  19. 再批国标数学教材的微分定义
  20. pandas含有空列表

热门文章

  1. 睿象云-智能报警平台
  2. 3DMarkVantage 解析
  3. java的exp_Java Math exp() 使用方法及示例
  4. C# string为什么可以与int相加? string字符串拼接深入分析
  5. 如何抓取新浪财经数据中心分析师评级数据?
  6. (网络流)最大流复习
  7. linux下picard安装
  8. 航天航空设计系列软件:
  9. 安全性和保密性设计---对称密钥加密算法
  10. python:零矩阵