0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Cache的原理和地址映射

麦辣鸡腿堡 来源:TrustZone 作者:TrustZone 2023-10-31 11:21 次阅读

在cache存储系统中,把cache和主存储器都划分成相同大小的块。

主存地址由块号B和块内地址W两部分组成,cache地址由块号b和块内地址w组成。

CPU访问cache时,CPU送来主存地址,放到主存地址寄存器中,通过地址变换部件把主存地址中的块号B变换成cache的块号b,并放到cache地址寄存器中,同时将主存地址中的块内地址W直接作为cache的块内地址w装入cache地址寄存器中,如果变换成功(又叫cache命中),就用得到的cache地址去访问cache,从cache中取出数据送到CPU中;

如果变换不成功(cache不命中),则产生cache失效信息,并且用主存地址访问主存储器,从主存储器中读出一个字送往CPU,同时把包含该字在内的一整块数据都从主存储器读出来装入cache,这时,如果cache已经满了,则要采用某种cache替换策略把不常用的块先调出到主存储中相应的块中,以便腾出空间来存放新调入的块。

由于程序具有局部性特点,每次块失效时都把一块(由多个字组成)调入到cache中,能够提高cache的命中率。

Cache地址映射和变换方法

地址的映射和变换是密切相关的,采用什么样的地址映射方法就必然有与这种映射方法相对应的地址变换方法。

无论采用什么样的地址映射方式和地址变换方式,都要把主存和cache划分成同样大小的存储单位,每个存储单位成为“块”,在进行地址映射和变换时,都是以块为单位进行的。常用的映射方式和变换方式有以下3种:

•■ 全相联映射方式 主存中任意一块可以映射到cache中的任意一块上。

•■ 直接映射方式 主存中一块只能映射到cache中的一个特定块上,假定主存的块号为B,cache的块号为b,cache的总块数为Cb,则它们之间的映射关系可以用下面的公式表示:b = B mode Cb

•■ 组相连映射方式 在这种相联的地址映射和变换方式中,把主存和cache按同样大小划分成组(set),每个组都由相同块数组成。从主存的组到cache的组之间采用直接映射方式,在主存中的组与cache中的组之间建立好映射关系之后,在两个对应的组内部采用全相联的映射方式。

ARM处理器中,主存与cache采用组相联地址映射和变换方式,如果cache的块大小为2L,则同一块中各地址的bit[31:L]是相同的。

如果cache中组的大小(每组中包含的块数)为2S, 则虚拟地址的bit[L+S-1:L]用于选择cache中的某个组, 而虚拟地址中其他位[31:L+S]包含了一些标志。

将cache每组中的块数称为组容量(set-associativity),当组容量等于cache中的总块数时,对应的映射方式为全相联映射方式;

当组容量等于1时,对应的映射方式为直接映射方式;

当组容量为其他值时,称为组相联映射方式。

在组相联映射方式中,cache的大小CACHE_SIZE(字节数)可以通过下面的公式来计算:

CACHE_SIZE = LINELEN*ASSOCIATIVITY*NSETS

其中,

•LINELEN为cache块(line)大小;

•ASSOCIATIVITY为组容量;

•NSETS为cache的组数。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19259

    浏览量

    229653
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9084

    浏览量

    367390
  • 存储器
    +关注

    关注

    38

    文章

    7484

    浏览量

    163765
  • Cache
    +关注

    关注

    0

    文章

    129

    浏览量

    28331
收藏 人收藏

    评论

    相关推荐

    Linux内核地址映射模型与Linux内核高端内存详解

    的数据可能不在内存中。 Linux内核地址映射模型 x86 CPU采用了段页式地址映射模型。进程代码中的地址为逻辑
    发表于 05-08 10:33 3453次阅读
    Linux内核<b class='flag-5'>地址</b><b class='flag-5'>映射</b>模型与Linux内核高端内存详解

    关于ARM地址映射的理解

    对于刚刚学习ARM嵌入式的人来说,遇到的第一个难点我觉得就是地址映射的原理,往往会被一些概念弄得稀里糊涂(比如像我这种智商不高的)。所以就静下心自己好好研读了以下杜春雷《ARM体系结构与编程》有关
    发表于 12-08 09:37

    关于cache百科里的一段叙述有疑惑

    Cache与主存之间可采取多种地址映射方式,直接映射方式是其中的一种。在这种映射方式下,主存中的每一页只能复制到某一固定的
    发表于 02-16 13:44

    AM335x SDK关于cache的命中率,请问有能改善cache命中率的有效方法吗?请问怎么才能控制RAM映射cache

    吗?有的话麻烦您详细讲解以下。■三:RAM映射cache的问题 请问怎么才能控制,操作RAM和cache映射关系呢?以上问题,麻烦您讲解一下。
    发表于 06-21 04:06

    通过内存地址映射能否禁用MSMC上的cache

    请教:         在程序设计时,有时涉及MSMC内存上的频繁交互时,cache一致性维护相当令人头疼。C6678不允许禁止MSMC上的cache,但是我们了解到TI提供了机制将某一段地址
    发表于 06-21 06:25

    地址映射问题

    ............................. 在ccs调试中 显示update()地址是 0x80005000,那 怎么看update(point)在该位置的,内存映射呢? 地址 0x80005000应该是定义该函
    发表于 06-13 11:35

    Cache的原理是什么?Cache地址的过程是怎样的

    存储器的层次结构是怎样的?由哪些部分组成的?有何特点?Cache的原理是什么?Cache地址的过程是怎样的?
    发表于 12-23 09:35

    为什么需要cachecache是如何影响code的呢

    bits。如下图所示:直接映射缓存的优缺点直接映射缓存在硬件设计上会更加简单,因此成本上也会较低。根据直接映射缓存的工作方式,我们可以画出主存地址0x00-0x88
    发表于 04-21 11:10

    cache有哪些缺点?实现cache的组织方式有哪几种

    最简单的是直接映射cache。在直接映射cache中,主存中的每个位置都只能映射到某个特定的cache
    发表于 06-15 16:16

    ARM处理器使用虚拟地址来提供cache index和cache tag

    up,而无需进行虚拟地址到物理地址的转换。VIVT缺点缺点是当修改系统中虚拟地址到物理地址映射时必须要clean和invalidate
    发表于 06-20 15:22

    ARM启动代码及地址映射

    ARM启动代码及地址映射
    发表于 02-11 11:00 104次下载
    ARM启动代码及<b class='flag-5'>地址</b><b class='flag-5'>映射</b>

    cache结构与工作原理

    更详细的讲,cache的结构其实和内存的结构类似,也包含地址和内容,只是cache的内容除了存的数据(data)之外,还包含存的数据的物理内存的地址信息(tag),因为CPU发出的寻址
    发表于 06-03 14:24 1.2w次阅读
    <b class='flag-5'>cache</b>结构与工作原理

    从三个方面阐述Cache

    关于cache,大概可以从三个方面进行阐述:内存到cache映射方式,cache的写策略,cache的替换策略。
    的头像 发表于 11-21 11:09 2558次阅读

    关于Cache的其它内容

    关于Cache的其它内容 上面我们所描述情况,在访问cache前,已经将虚拟地址转换成了物理地址,其实,不一定,也可是是虚拟地址直接访问
    的头像 发表于 11-21 11:12 2373次阅读

    STM32/CPU地址映射的概念

    很多人对总线和地址映射的概念都是一头雾水,但是我们如果知道为何需要总线和地址映射,他们是在什么背景下被衍化出来的,自然而然对此概念就清清楚楚了。
    的头像 发表于 07-24 11:14 1052次阅读
    STM32/CPU<b class='flag-5'>地址</b><b class='flag-5'>映射</b>的概念