计算机组成原理之机器:存储器之高速缓冲存储器

news2024/12/28 20:02:37

计算机组成原理之机器:存储器之高速缓冲存储器

笔记来源:哈尔滨工业大学计算机组成原理(哈工大刘宏伟)

Chapter3:存储器之高速缓冲存储器

3.1 概述

3.1.1 为什么用cache?

角度一:I/O设备向主存请求的级别高于CPU访存,这就出现了CPU等待I/O设备访存的现象,致使CPU空等一段时间,降低CPU工作效率。为避免CPU与I/O设备争抢访存,可在CPU与主存之间加一级缓存,这样主存可将CPU要取的信息提前送至缓存,一旦主存在与I/O设备交换时,CPU可直接从缓存中读取所需信息,不必空等而影响效率。—引自《计算机组成原理》唐朔飞

角度二:主存速度提高始终跟不上CPU的发展。希望由高速缓存cache来解决主存与CPU速度不匹配的问题—引自《计算机组成原理》唐朔飞

局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。

时间局部性:程序中的某条指令一旦执行,不久后该指令可能再次执行
空间局部性:一旦程序访问了某个存储单元,不久后其附近的存储单元也将被访问

3.1.2 cache的工作原理

主存和缓存的编址
为了与cache映射,将主存与缓存都分成若干块,每块内又包含若干个字,并使它们的块大小相同(即块内的字数相同)


命中与未命中

任何时刻都有一些主存块处在缓存块中。
CPU欲读取主存某字时,有两种可能:
命中:一种是所需要的字已在缓存中,即可直接访问Cache(CPU与Cache之间通常一次传送一个字);
未命中:另一种是所需的字不在Cache内,此时需将该字所在的主存整个字块一次调入Cache中(Cache与
主存之间是字块传送)。如果主存块已调入缓存块,则称该主存块与缓存块建立了对应关系。
—引自《计算机组成原理》唐朔飞


cache的命中率
我们都希望CPU对主存的访问尽可能都转化为对缓存的访问,也就是说我们希望命中率越高越好

cache-主存系统的效率

3.1.3 cache的基本结构

cache和主存之间是以块为单位进行数据传送的,cache和主存的块内地址一致,再看块号,根据映射规则,检查是否命中(CPU所访问的数据在cache中是否存在),如果命中,则形成cache的块号。如果未命中,则检查当前cache是否仍可装入块,若可装入,则将要访问的块装入cache,若没有空间装入,则将某一块与要访问的块进行替换,也就是将要访问的块从内存中调入,把cache中暂时不访问的块换下

主存与cache映射就是主存中的块应该放在cache的哪个位置
主存与cache变换就是主存的地址转换为cache的地址,在cache中找到相对应的主存块
主存与cache之间有直接通路,它完成了两者之间的信息交换

3.1.4 cache的读写操作


写操作可能会造成主存和cache数据的不一致,例如只对主存写而没有对cache写

3.1.5 cache的改进

(1)增加cache级数
CPU内部装cache、CPU外部装cache
(2)统一缓存和分立缓存
统一缓存:把指令和数据统一放在一个cache中
分立缓存:将指令和数据分别放在不同cache中

3.2 cache-主存的地址映射

3.2.1 直接映射(固定的映射关系)

主存当中任意一个给定的块只能装载到某一个指定的cache的块当中



每个区的第0块放到cache中字块0中,每个区的第1块放到cache中字块1中以此类推
主存地址分为两部分:低c位指cache的字块地址、高t位指主存字块标记,它被记录在建立了对应关系的缓存的“标记”位中。
当缓存接到CPU送来的主存地址后,只需根据中间c位字段找到cache字块(如c位字段为00……01找到cache字块1),然后根据字块的“标记”是否与主存地址的高t位相符来判断。

每个缓存块可以和若干个主存块对应
每个主存块只能和一个缓存块对应

3.2.2 全相联映射(灵活性大的映射关系)

主存的任何一个字块可放到任何一个cache字块中

3.2.3 组相联映射(上述两种映射的折中)

主存中每个区的第0块可以放到cache中第0组两个字块的任意一个

3.3 替换算法

当cache中已满且CPU要访问的数据不在其中,这时就需要将cache中某个块与主存中CPU要访问的块进行替换

先进先出(FIFO)算法
最先被放入cache中的块被替换
近期最少使用(LRU)算法
在cache中选择最⻓时间没有被CPU访问的块进行置
换,也就是说,该算法假设已经很久没有使用的块很有可能在未来较长的⼀段时间内仍然不会被使⽤

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

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

相关文章

智能研发新纪元:探索2024年AI辅助研发的发展与趋势

随着人工智能(AI)技术的高速发展与创新,我们迎来了一个全新的时代,尤其是在研发领域。AI正以前所未有的速度和效率推动着科技的突破。2024年,AI辅助研发成为走在时代前端的核心竞争力。在这篇文章中,我们将…

typescript学习(更新中)

目录 开发环境搭建类型如何声明有哪些类型编译配置文件 开发环境搭建 npm i -g typescripttsc检查是否安装成功 类型如何声明 // 先声明再赋值 let a: number a 1// 直接赋值 let b 1function sum(a: number, b: number): number {return a b } console.log(sum(1, 2))有…

使用Apache Kafka的Golang实践指南

您是否在寻找构建可扩展、高性能应用程序的方法,这些应用程序可以实时处理流数据?如果是的话,结合使用Apache Kafka和Golang是一个很好的选择。Golang的轻量级线程非常适合编写类似Kafka生产者和消费者的并发网络应用程序。它的内置并发原语&…

httprunner用例结构(前后置)

说明:httprunner 结合 pytest 的前后置方式 1. 用例级别前后置 1.1. setup teardown class TestCaseRefTestcase(HttpRunner):# 用例级别前后置def setup(self):logger.warning("------用例级别前置")def teardown(self):logger.warning("------用…

算法练习:双指针

目录 1. 双指针1.1 移动 "0"1.2 复写 "0"1.3 快乐数(快慢指针)1.4 盛水最多的容器(单调性原则)1.5 有效三角形个数1.6 两个数之和1.7 三数之和1.8 四数之和 1. 双指针 1.1 移动 “0” 题目信息: …

线程有几种状态,状态之间的流转是怎样的?

Java中线程的状态分为6种: 1.初始(NEW):新创建了一个线程对象,但还没有调用start()方法。 2.运行(RUNNABLE):Java线程中将就绪(READY)和运行中(RUNNING)两种状态笼统的称为“运行”…

红黑树的学习

红黑树 红黑树出自一种平衡的二叉查找树,是计算机科学中中用到的一种数据结构 1972年出现,当时被称之为平衡二叉B树。后来,1978年被修改为如今的红黑树 他是一种特殊的二叉查找树,红黑树的每一个节点上都有存储表示节点的颜色 …

WordPress建站入门教程:如何创建菜单和设置前端导航菜单?

前面我们跟大家分享了WordPress如何上传安装WordPress主题,但是启用主题后前端没有看到有导航菜单,这是因为我们还没有创建菜单和设置导航菜单。 JianYue主题导航菜单和右上角菜单 今天boke112百科就继续跟大家分享WordPress站点如何创建菜单和设置前端…

使用 Amazon Bedrock 上的 Claude 3 将架构图转换为 CDK/Terraform 代码

概述 在云原生领域,基础设施即代码 (IaC) 对于开发人员和 DevOps 团队来说是一种不可避免的实践。 最近,Amazon Bedrock 上线了 Claude 3 Sonnet 模型和这个模型的图像转文本能力。这无疑开启了一个新时代,也就是实现架构图与 IaC 工具的无…

【C++】C++11---右值引用和移动语义

目录 1、什么是左值引用和右值引用2、左值引用与右值引用比较3、右值引用使用场景和意义4、右值引用引用左值的分析5、完美转发 1、什么是左值引用和右值引用 传统的C语法中就有引用的语法,而C11中新增了的右值引用语法特性,所以从现在开始我们之前学习…

java-ssm-jsp-大学生评优管理系统的设计与实现

java-ssm-jsp-大学生评优管理系统的设计与实现 获取源码——》公主号:计算机专业毕设大全

kafka报文模拟工具的使用

日常项目中经常会碰到消费kafka某个topic的数据,如果知道报文格式,即可使用工具去模拟发送报文,以此测试代码中是否能正常消费到这个数据。 工具资源已上传,可直接访问连接下载:https://download.csdn.net/download/w…

C++ 标准库类型string

C/C总述:Study C/C-CSDN博客 目录 定义和初始化string对象 string的增 使用push_back进行尾插 使用insert插入 使用append函数完成string的拼接 string的删 使用pop_back进行尾删 使用erase删除 string的查 使用find函数正向搜索第一个匹配项 使用rf…

【MATLAB源码-第159期】基于matlab的胡桃夹子优化算法(NOA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境: MATLAB 2022a 1、算法描述 胡桃夹子优化算法(Nutcracker Optimization Algorithm, NOA)是一个灵感来源于胡桃夹子的故事的元启发式优化算法。这个故事中,胡桃夹子是一个能够将坚果壳轻易地破开以获取内部果仁的工具。…

腾讯云99元服务器有什么猫腻?为什么这么便宜?

腾讯云服务器99元一年是真的吗?真的,99元优惠购买入口 txybk.com/go/99 折合每天8元1个月,腾讯云99元服务器配置为2核2G3M带宽,2024年99元服务器配置最新报价为61元一年,为什么这么便宜?有什么猫腻吗&#…

【工具】Raycast – Mac提效工具

引入 以前看到同事们锁屏的时候,不知按了什么键,直接调出这个框,然后输入lock屏幕就锁了。 跟我习惯的按Mac开机键不大一样。个人觉得还是蛮炫酷的~ 调研 但是由于之前比较繁忙,这件事其实都忘的差不多了&#xff0…

网工内推 | 网络工程师,IE认证优先,最高15K,有项目绩效奖金

01 重庆并联网络科技有限公司 招聘岗位:网络工程师 职责描述: 1、负责集成项目的相关实施工作(设备上架安装、网络设备配置、服务器相关系统配置安装、相关软件环境搭建及配置等) 2、负责项目现场技术维护与技术支持;…

蓝桥杯day6队列-3.3

目录 1.约瑟夫环 1.注意&#xff01;q.push(q.front()); 2.机器翻译 3.小桥的神秘礼盒 4.餐厅排队 1.约瑟夫环 今天学习了队列的STL写法&#xff0c;来试试这个题。 #include<bits/stdc.h> using namespace std;int main() {int n,m;cin>>n>>m;queue&l…

使用docker安装运行rabbitmq---阿里云服务器

目录 0、阿里云没开端口的得要去安全组规则去添加&#xff1a; 1、下载RabbitMQ镜像&#xff1a; 2、查看镜像是否下载成功&#xff0c;得到docker镜像id&#xff1a; 3、运行RabbitMQ: 4、查看RabbbitMQ容器是否启动成功&#xff1a; 5、启动RabbitMQ中的插件管理 6、访…

postman环境变量全局变量设置

postman环境变量、全局变量设置 在公司中&#xff0c;一般会存在开发环境、测试环境、线上环境等&#xff0c;如果需要在不 同的环境下切换做接口测试&#xff0c;显然我们需要把所有接口的域名进行修改&#xff0c;如果接 口测试用例较多&#xff0c;那么修改会非常费力&…