目录

  • 1. 基本概念
  • 2. cache-主存的三种映射方式
    • 2.1 全相联映射
    • 2.2 直接映射方式
    • 2.3 组相联映射方式
  • 3. 三种映射方式例题

1. 基本概念

1. 存储系统的体系结构


图片摘自这篇博客:图片来源

2. cache在存储系统中的位置


cache(缓存)位于CPU内部,其读取速度快于主存,但容量小于主存。cache中存放的是程序需要用到的数据,CPU处理时直接从cache中读取数据速度要快于从主存中读取。

在CPU和主存之间引入cache是为了:

①避免CPU与外部设备争抢主存
外设向主存请求数据级别高于CPU,可能导致CPU等待较长时间。
②提高取指令和取数据的速度
主存速度提高跟不上CPU的发展速度,差距总在5倍以上。

3. 程序访问的局部性原理

之所以可以把CPU当前需要的数据和程序放在cache中,是因为程序访问具有局部性的原理:

时间局部性 一个存储单元被访问,此单元很快就会再次被访问

空间局部性 一个存储单元被访问,该单元临近的单元也可能很快被访问。

4. 命中率

如果访问的数据在cache中,称为访问cache命中。

设某Cache的命中率为h,其中访问Cache的时间为tc,访问M的时间为tm。设Nc访问cache命中的总次数,Nm表示访问cache不命中而访问M的次数,则有:
h=Nc/(Nc+Nm)×100%
①若CPU在访问cache不命中时再访问主存
平均访存时间ta=h·tc+(1-h)·(tc+tm)=tc+(1-h)·tm
②若CPU同时访问cache和主存,访问命中时中止对主存的访问。
平均访存时间ta=h·tc+(1-h)·tm

5. 字、字块、标记、组

:1个字由n个字节组成(n≥1),字是CPU访问存储器时可存取的最小单位

字块 :1个字块包含n个字(n≥1),字块是主存与cache交换的最小单位

也就是说,cache和主存在交换时是以字块为单位的,一次交换一个字块(包含好多个字,利用到了局部性原理)。而CPU在访问cache时,一次只存取一个字。

标记 :cache中存放的主存块地址称为标记。

:多个字块组成的一个逻辑整体称为组。

2. cache-主存的三种映射方式

2.1 全相联映射

思路

允许主存中的每个字块映像到cache的任何一个字块位置上。

示意图


主存地址和cache地址

设置主存地址和cache地址的一个目的是,可以通过主存地址来找到cache地址,这样才能实现主存和cache字块的交换。

主存地址:

包括块标记字块内地址两部分,其中块标记相当于字块在主存中的地址,字块内地址为字块中某个字的地址。

示意图:

cache地址:

包括字块号字块内地址,其中,字块号为字块在cache中的地址,字块内地址为字块中某个字的地址。

注意:主存地址和cache地址中的字块内地址相同。

示意图:


相联存储器:

既然全相联映射方式的思路是:主存中的字块映射在cache中的任一字块,计算机怎么知道映射到哪一字块了?到时候怎么操作呢?这就需要一个目录表来查找主存中的某一字块与cache中某一字块的对应关系:


该目录表由三部分组成:主存字块标记(主存地址的第一部分),cache字块地址(cache地址的第一部分),有效位(1位)。目录表的行数为cache的字块数,这很好理解,因为目录表的目的就是查找主存字块和cache字块的对应关系。

特点

(1)映像方式灵活,主存中的一个字块可以对应cache的任意一块;
(2)主存地址映射到cache无规则可言,必须使用相联存储器通过按内容查找获取cache块号。
(3) 全部由硬件实现,速度快,但硬件实现难度大;
(4)由于使用相联存储器存储目录表,成本高。当cache容量越大时,所需相联存储器的容量也越大,成本也越高。仅适用于小容量cache采用。

2.2 直接映射方式

思路

主存中的一块只能拷贝到cache中的一个特定行位置。设主存的块号为i,cache中的块号为j,cache的总块数为N,则映射关系为:
j = i mod N

示意图


主存地址与cache地址

主存地址:

包括块标记、字块地址、字块内地址三部分。其中,块标记为字块在主存中的地址,字块地址为字块在cache中的地址(计算方法就是上面说的),字块内地址为字在字块中的地址。

因此这种映射方法不需要目录表了。(因为主存地址中存有要映射到cache相应字块的字块地址了)

示意图:


cache地址:

包括字块地址字块内地址两部分:其中,字块地址为字块在cache中的地址,字块内地址为字在字块中的地址。

注意:cache地址中的字块地址字块内地址和主存地址中的相同。

示意图:


特点

(1)映像函数简单,实现硬件简单,无需相联存储器,实现成本较全相联映像方式低;
(2)地址变换速度快,如果命中且字块有效,那么主存地址去掉区号后的低位部分就是cache地址。
(3)块冲突率高,当两个或两个以上的主存块映射到相同的cache发生冲突时,即使其他cache块空闲也不能被使用。当两块交替映射到同一cache时,造成频繁置换——抖动。

2.3 组相联映射方式

思路

组相联映像方式为前两种方式的折衷。其方法是将cache按某种规格分组,主存中若干字块映射到同一个组中,组间为直接映像方式,组内为全相联映像。

主存字块在cache组号求法为:主存字块号 mod cache组数
示意图


主存地址和cache地址

主存地址:

主存地址包括主存字块标记、组号字块内地址三部分。其中主存字块标记为字块在主存中的地址,组号为cache分的组的组号,字块内地址为字在字块中的地址。

示意图:

cache地址:

cache地址包括组号、字块号字块内地址三部分组成。其中,组号为cache分组的组号,字块号为每组内字块的地址,字块内地址为字在字块中的地址。

注意:主存地址和cache地址中的组号字块内地址相同。

示意图:


特点

(1)因为是两种映像方式的折衷,因此地址结构较为复杂,比较的情况较多,需要引入相联存储器;
(2) 兼顾了映像的灵活性和操作的复杂程度。
(3)目前应用较多。每组具有v个字块的组相联映像方式常称为v路组相联。v一般取值较小,典型值有2、4、8、16。

3. 三种映射方式例题

【例题】

设主存容量为256K字,cache容量为2K字,块长为4,按字编制。
①设计cache地址格式,cache可装入多少块数据。
②在直接映射方式下,设计主存地址格式。
③在四路组相联映射方式下,设计主存地址格式
④在全相联映射方式下,设计主存地址格式

【解答】

因为是按字节编址,所以主存地址有18位,cache地址有11位,因为块长为4,说明每个字块有4个字,故字块内地址为2位。

① 字块内地址为2位,故字块地址有11-2=9位,cache地址如下:

② 直接映射方式下,主存地址包括主存字块标号字块地址字块内地址3部分,其中字块地址和字块内地址与cache地址相同,故主存字块标号有18-11=7位。主存地址如下:


③ 四路组相联,说明cache分为4个组,此时cache地址包括:组号、字块地址、字块内地址三部分

因为分为4组,故组号为2位,因为一个字块长4位,故字块内地址为2位,故字块地址为11-2-2=7位,cache地址如下:


此时主存地址由三部分组成:主存字块标记、组号、字块内地址。

组号和字块内地址和cache地址相同(共7+2=9位),故主存字块标记有18-9=9位,主存地址如下:


④ 全相联方式下,主存地址由主存字块标记和字块内标记组成,字块内标记和cache地址相同,为2位,故主存字块标记为18-2=16位,主存地址如下:

cache-主存的三种映射方式相关推荐

  1. ASP.NET缓存中Cache过期的三种策略

    ASP.NET缓存中Cache过期的三种策略 原文:ASP.NET缓存中Cache过期的三种策略 我们在页面上添加三个按钮并双击按钮创建事件处理方法,三个按钮使用不同的过期策略添加ASP.NET缓存. ...

  2. Servlet功能实现和执行过程、servlet的生命周期、Servlet线程安全问题、Servlet的三种映射方式、ServletConfig、ServletContext

    1. 什么是Servlet? Servlet是SUN公司提供的一套规范,名称就叫Servlet规范,它也是JavaEE规范之一. 第一:Servlet是一个运行在web服务端的java小程序 第二:它 ...

  3. cache三种映射方式

    主存与cache的地址映射方式有全相联方式.直接方式和组相联方式三种. 直接映射(directmapping) 将一个主存块存储到唯一的一个Cache行. 全相联映射(fullyassociative ...

  4. Cache与主存的三种地址映射详细解读

    前言 我们知道,Cache又叫做高速缓冲存储器, 它保存的是主存中的一部分数据.当CPU要访问数据时,它会同时发送地址给Cache和主存,如果在Cache中找到了想要的数据,则由Cache直接返回数据 ...

  5. Cache与主存的三种映射

    直接映射 主存储器中一块只能映射到Cache的一个特定的块中. 具体步骤: 主存与高速缓存分成相同大小的数据块,主存容量是缓存容量的整数倍 将主存空间按照缓存的容量分成区,主存中每一区的块数与缓存中总 ...

  6. 计算机原理中的三种映射方式

    直接映像(一Cache对多主存) 直接映射就是一个Cache页面对应多个主存页面. 直接映射函数为: i = j % 2c,其中i是Cache页号:j是主存页号. 例如:主存的页面0 % 2c = 0 ...

  7. 计组——彻底搞懂cache主存映射以及cache容量的计算

    cache主存映射以及cache容量 一.三种映射方式 1. 全相联映射 2. 直接映射 3. 组相联映射 二.cache容量计算 1. 先计算cache行标记项位数 2. 再计算cache块位数 3 ...

  8. 一对一映射的三种方式以及对lazyload的特别关注

    一对一映射几乎涉及了所有可以使用的映射方式:共享主键.外键和关联表.每一种方式都有相对特定的使用场合.而与此同时,one-to-one关系的 lazy loading总是一个让人非常疑惑的问题,下文在 ...

  9. 整理笔记——cache主存映射方式

    (结合看过的几篇文章整理笔记) 什么是Cache地址映射 Cache的容量很小,它保存的内容只是主存内容的一个子集,且Cache与主存的数据交换是以块为单位的.主存每个块的大小和Cache每个块的大小 ...

最新文章

  1. 面试常问 Java基础 冒泡排序
  2. 用户故事与敏捷开发方法笔记05
  3. with ...as ...
  4. 编程语言python怎么读-网红编程语言Python将纳入高考你怎么看?
  5. SAP财务管理大全-采购收货-标准成本法 移动平均价
  6. 为何Set检索效率低下
  7. 2022年详细诠释保税区一日游 一般贸易企业与加贸企业如何完成保税区一日游
  8. ESP8266-Arduino编程实例-TEMT6000环境光传感器驱动
  9. 小学六年级人教版计算机书,小学数学六年级人教版
  10. x7 z8750 linux,GPD Pocket 7.0英寸 口袋笔记本电脑(Atom x7-Z8750、8GB、128GB、触屏)
  11. HEXO+Github博客 更换新域名详解
  12. GORM CRUD 10 分钟快速上手
  13. 每日 30 秒 ⏱ 漫游器法则
  14. Spring Boot 实战(3)静态资源配置
  15. 自考第一阶段读书有感
  16. C语言指针的一些易错点
  17. 机器学习(一)——什么是机器学习
  18. oracle别名as用法
  19. 手机录音amr怎么转mp3?三种方法直接转换!
  20. Windows系统中睡眠和关闭屏幕的异同点

热门文章

  1. MPU6050基本原理介绍及程序配置
  2. PlayerControllerRotation
  3. diplay实际应用
  4. 利用随机函数产生并且显示 15 个小写的英文字符,显示排在最前面和最后面的字
  5. 关于er模型中的identifying relationship or non-identifying relationship
  6. windows server 2016搭建WDS和WSUS服务
  7. Vue 点浏览器后退 模态框有灰色遮罩,监听返回键 this 无效
  8. 多功能工具箱微信小程序源码下载-操作简单实用流量主小程序
  9. 计算机网络什么叫流量控制,计算机网络(十一)-数据链路层-流量控制
  10. python3爬虫——多线程爬取斗图网表情包