直接映射详解

在cache中为主存中每个字分配一个位置的最简单方法就是根据这个字的主存地址进行分配,这种cache结构称为直接映射。其中,每个存储器地址对应到cache中一个确定的地址

直接映射cache都采用以下映射方法:

i=j mod C,其中,i为Cache块地址,j为主存块地址,C为Cache中的块数,mod表示求余运算。



  • 上图中Cache的块数为8,又块数是2的幂,取模计算就很简单,只需要取地址的低log2(8)位即块地址中最低的三位,例如存储器地址(00001)2被映射到(001)2的位置,(11101)2被映射到(101)2的位置。

标记:由于cache中每个位置可能对应于存储器中多个位置,因此需要引入一组标记,标记中包含了地址信息。标记只需包含地址的高位,也就是没有用来检索cache的那些位。如上图标记位只需使用5位地址中的高两位。

有效位:我们还需要一种方法来判断cache块中确实没有包含有效信息。例如,当一个处理器启动时,cache中没有数据,标记域中的值就没有意义,甚至在执行了一些指令后,cache中的一些块依然为空。因此需要增加一个有效位来标识一个块是否含有一个有效地址。


  • 上图给出了一个使用32位地址,1024字的cache。由于cache有1024个字,即需要10位索引2^10。又有2位是字节偏移信息,剩下的32-10-2=20位用来和标记比较。如果标记和地址的高20位相等,并且有效位开启,那么请求在cache命中。


上图给出了直接映射的完整结构图

直接映射是最简单的地址映射方式,它的硬件简单,成本低,地址变换速度快,而且不涉及替换算法问题。但是这种方式不够灵活,Cache的存储空间得不到充分利用,每个主存块只有一个固定位置可存放,容易产生冲突,使Cache效率下降,因此只适合大容量Cache采用。例如,如果一个程序需要重复引用主存中第0块与第2^c块,最好将主存第0块与第2^c块同时复制到Cache中,但由于它们都只能复制到Cache的第0块中去,即使Cache中别的存储空间空着也不能占用,因此这两个块会不断地交替装入Cache中,导致命中率降低。


  • 51
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
MyBatis是一个开源的持久层框架,它可以将数据库操作与Java对象之间的映射关系进行配置,提供了一种简单且灵活的方式来访问数据库。 在MyBatis中,映射文件是用于定义SQL语句和结果映射的配置文件。下面是映射文件的详解: 1. 命名空间(namespace):映射文件中的命名空间用于对SQL语句进行分类和管理,可以通过命名空间来引用映射文件中定义的SQL语句。 2. 结果映射(resultMap):结果映射用于将查询结果映射到Java对象上。可以通过resultMap标签定义结果映射,指定查询结果与Java对象之间的对应关系。 3. SQL语句(select、insert、update、delete):映射文件中可以定义各种SQL语句,包括查询、插入、更新和删除等操作。可以通过标签(如select、insert、update、delete)来定义SQL语句,并在其中编写具体的SQL语句。 4. 参数映射(parameterType):参数映射用于将Java对象作为参数传递给SQL语句。可以通过parameterType属性指定参数类型,也可以通过parameterMap标签定义参数映射。 5. 返回值映射(resultType):返回值映射用于将查询结果转换为Java对象。可以通过resultType属性指定返回值类型,也可以通过resultMap标签引用已定义的结果映射。 6. 动态SQL:MyBatis支持动态SQL,可以根据条件动态生成SQL语句。可以使用if、choose、when、otherwise等标签来实现动态SQL的编写。 7. 参数传递:映射文件中可以使用#{}或者${}来传递参数。#{}会将参数转义后传递给数据库,${}会直接将参数拼接到SQL语句中。 8. 引用其他映射文件:映射文件可以通过include标签引用其他映射文件,可以将一些通用的SQL语句定义在公共的映射文件中,然后在需要的地方引用。 以上是对MyBatis映射文件的详解,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值