一步步编写操作系统 29 cpu缓存简介

缓存是20世纪最大的发明,其原理用一些存取速度较快的存储设备做为数据缓冲区,避免频繁访问速度较慢的低速存储设备,归根结底的原因是,低速存储设备是整个系统的瓶颈,缓存用来缓解“瓶颈设备”的压力。

之前介绍实模式下的寄存器时,举了一个浏览器访问网页的例子,里面有12步,几乎步步都用到了缓存。不过,这些缓存都是在内存DRAM中实现的,即动态随机访问存储器,究其原因是数据要么在数据库中要么在硬盘上,其速度肯定比内存慢。选做用缓存的存储设备,其存取速度肯定是比其原有存储设备更快,否则失去了缓存的意义。相对于cpu来说,DRAM太慢了,如果也要用它来做cpu的缓存,反而是拖了后腿,不如不用。

cpu为什么要用缓存?因为待执行的指令和相关数据是存储在低速的内存中,让cpu这种高速设备等待慢速的内存,着实太浪费cpu资源了。人们根本无法容忍cpu如此“漫长”的“浪费”,所以需要用一个比内存更快的存取设备做缓冲区,尽量和cpu一个速度,让cpu不要等待。于是SRAM成了cpu的救世主,成为cpu和内存之间数据缓存的不二之选。

前面在介绍实模式下的寄存器时,也说到了cpu中的缓存。cpu中有一级缓存L1、二级缓存L2,甚至三级缓存L3等。它们都是SRAM,即静态随机访问存储器,它是最快的存储器啦。之所以把SRAM和寄存器放到一块说,是因为很多同学在感观上觉得寄存器是cpu直接使用的存储单元,所以寄存器比SRAM更快。其实他们在速度上是同一级别的东西,因为寄存器和SRAM都是用相同的存储电路实现的,用的都是触发器,它可是工作速度极快的,属于纳秒级别。至于触发器是什么,这已属于硬件范畴,这里咱就不深究了,因为我也不懂,不敢乱说啦^_^,有兴趣的同学请自行调研吧。

有哪些东西可以被缓存呢?无论是程序中的数据或指令,在cpu眼里全是一样形式的二进制01串,没有任何区别,都是cpu待处理的“数据”。所以我们眼中的指令和数据都可以被缓存到SRAM中。

什么时候能缓存呢?可以根据程序的局部性原理采取缓存策略。局部性原理是:程序90%的时间都运行在程序中10%的代码上。

局部性分为两个方面:

一方面是时间局部性:最近访问过的指令和数据,在将来一段时间内依然经常被访问。

另一方面空间局部性:靠近当前访问内存空间的内存地址,在将来一段 时间也会被访问。

举一个典型的例子,我们在用高级语言写程序时,经常会写到这样的循环嵌套代码,如:

int array[100][100];
int sum = 0;
…
数组array元素被赋值,略。
…
for (int i=0, i<100,i++) {for(int j=0;j<100,j++) {sum+=array[i][j];}
}

以上是将二维数组中的所有元素相加求和。循环中经常被用到的地址是sum所在的地址,经常被用到的指令是加法求和指令,这是在时间上的局部性。未来要访问的地址是与当前访问地址&array[i][j]相邻的地址&array[i][j+1],它们之间只差一个整型变量的大小,这是空间上的局部性的。(当然,这些局部性都是编译器编译的结果,编译器就是这样安排的。)cpu利用此特性,将当前用到的指令和当前位置附近的数据都加载到缓存中,这就大大提高了cpu效率,下次直接从缓存中拿数据,不用再去内存中取啦。

当然,上面说的是理想的状态,如果缓存中没有相应的数据,还是要去内存中去加载,然后再放到缓存中。

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

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

相关文章

【CodeForces - 1096D】Easy Problem(dp,思维)

题目大意&#xff1a; 现在有一个由小写字母组成的字符串&#xff0c;去掉这个字符串的第i个位置的字符会有ai的代价。你的任务是去掉这个字符串中的一些字符使得该字符串中不包含子序列hard&#xff0c;且去掉字符的代价之和尽可能小。 输入 第一行一个整数n表示字符串的长…

一步步编写操作系统 30 cpu的分支预测简介

人在道路的分岔口时要预测哪条路能够到达目的地&#xff0c;面对众多选择时&#xff0c;计算机也一样要抉择&#xff0c;毕竟计算机的运行方式是以人的思路来设计的&#xff0c;计算机中的抉择其实就是人在抉择。 cpu中的指令是在流水线上执行。分支预测&#xff0c;是指当处理…

【HDU - 5492】Find a path(dp,tricks)

题干&#xff1a; Frog fell into a maze. This maze is a rectangle containing NN rows and MM columns. Each grid in this maze contains a number, which is called the magic value. Frog now stays at grid (1, 1), and he wants to go to grid (N, M). For each step,…

Apollo进阶课程㉜丨Apollo ROS原理—1

原文链接&#xff1a;进阶课程㉜丨Apollo ROS原理—1 ROS在开发过程中&#xff0c;基于功能把整个自动驾驶系统分成多个模块&#xff0c;每个模块负责自己消息的接收、处理、发布。当模块需要联调时&#xff0c;通过框架可以把各个模块快速的集成到一起。 上周阿波君为大家详细…

Ubuntu下安装Chrome浏览器的两个方法

一、通过直接下载安装Google Chrome浏览器deb包。 打开Ubuntu终端&#xff0c;以下为32位版本&#xff0c;使用下面的命令。 wget https://dl.google.com/linux/direct/google-chrome-stable_current_i386.deb 以下为64位版本&#xff0c;使用下面的命令。 wget https://dl.…

【EOlymp - 2908】SumThem All(数位统计,tricks)

题干&#xff1a; Find the sum of all the digits in all the integers between lowerBound and upperBound inclusive. Input Each line contains two integers lowerBound and upperBound (0 ≤ lowerBound ≤ upperBound ≤ 2109). Output For each test case print i…

Apollo进阶课程㉝丨Apollo ROS原理—2

原文链接&#xff1a;进阶课程㉝丨Apollo ROS原理—2 在ROS系统中&#xff0c;从数据的发布到订阅节点之间需要进行数据的拷贝。在数据量很大的情况下&#xff0c;很显然这会影响数据的传输效率。所以Apollo项目对于ROS第一个改造就是通过共享内存来减少数据拷贝&#xff0c;以…

Java 10 常用集合继承关系图

概述 集合类存放的都是对象的引用&#xff0c;而非对象本身&#xff0c;出于表达上的便利&#xff0c;我们称集合中的对象就是指集合中对象的引用。 类图如下&#xff1a; 1、Iterable与Iterator接口之间的区别 我看到好多网上的文章类图里面Collection 是继承Iterator接口&a…

【CodeForces - 673D】Bear and Two Paths(构造,tricks)

题干&#xff1a; Bearland has n cities, numbered 1 through n. Cities are connected via bidirectional roads. Each road connects two distinct cities. No two roads connect the same pair of cities. Bear Limak was once in a city a and he wanted to go to a cit…

Apoll进阶课程㉞丨Apollo ROS原理—3

原文链接&#xff1a;进阶课程㉞丨Apollo ROS原理—3 机器人操作系统(ROS)是一个成熟而灵活的机器人编程框架。ROS提供了所需的工具&#xff0c;可以轻松访问传感器数据&#xff0c;处理数据&#xff0c;并为机器人的电机和其它执行器生成适当的响应。整个ROS系统被设计为在计…

JVM虚拟机选项:Xms Xmx PermSize MaxPermSize区别

ava虽然是自动回收内存&#xff0c;但是应用程序&#xff0c;尤其服务器程序最好根据业务情况指明内存分配限制。否则可能导致应用程序宕掉。 举例说明含义&#xff1a; -Xms128m 表示JVM Heap(堆内存)最小尺寸128MB&#xff0c;初始分配 -Xmx512m 表示JVM Heap(堆内存)最大允许…

SM3密码杂凑算法原理

目录 1.概述 2、算法描述 2.1 概述 2.2 填充 2.3 迭代压缩 2.3 消息扩展 2.4 压缩函数 2.5 杂凑值 1.概述 SM3是我国采用的一种密码散列函数标准&#xff0c;由国家密码管理局于2010年12月17日发布。相关标准为“GM/T 0004-2012 《SM3密码杂凑算法》”。 在商用密码体…

【Comet OJ - Contest #5 - C】迫真小游戏(优先队列,贪心构造,树,字典序)

题干&#xff1a; H君喜欢在阳台晒太阳&#xff0c;闲暇之余他会玩一些塔防小游戏。 H君玩的小游戏可以抽象成一棵 nn 个节点的有根树&#xff0c;树以 11 为根&#xff0c;每个点的深度定义为其到根的简单路径上的点数&#xff08;根的深度为 11&#xff09;。 H君有 nn 个…

动手学无人驾驶(1):交通标志识别

今天主要介绍无人驾驶当中深度学习技术的应用。 本文是根据博客专家AdamShan的文章整理而来&#xff0c;在此表示感谢。 关于深度学习的图像分类技术&#xff0c;网上已有很多关于深度学习的课程&#xff08;如吴恩达老师的深度学习专项课程&#xff09;&#xff0c;故本文不对…

《操作系统真象还原》-阅读笔记(上)

第一章 配置bochs&#xff0c;进入bochs simulator后一直是黑屏&#xff0c;原来默认是调试模式&#xff0c;需要输入C&#xff08;continue&#xff09;来让调试继续。 第二章 主讲MBR及进入MBR前的步骤 1.实模式只能访问1MB的内存空间。 2.BIOS在ROM中。 3.开机上电后CS&a…

Apollo进阶课程㉟丨Apollo ROS原理—4

原文链接&#xff1a;进阶课程㉟丨Apollo ROS原理—4 ROS是一个强大而灵活的机器人编程框架&#xff0c;从软件构架的角度说&#xff0c;它是一种基于消息传递通信的分布式多进程框架。 ROS本身是基于消息机制的&#xff0c;可以根据功能把软件拆分成为各个模块&#xff0c;每…

【HDU - 5917】Instability(规律,结论,Ramsey定理,知识点,tricks)

题干&#xff1a; Long long ago, there was a prosperous kingdom which consisted of n cities and every two cites were connected by an undirected road. However, one day a big monster attacked the kingdom and some roads were destroyed. In order to evaluate th…

《操作系统真象还原》-阅读笔记(中)

第七章 操作系统是由中断驱动的。 中断分为外部中断和内部中断。 外部中断分为可屏蔽中断和不可屏蔽中断&#xff0c;内部中断分为软中断和异常。 外部中断 来自CPU外部的中断。可屏蔽中断&#xff1a;通过INTR引脚进入CPU&#xff0c;外部设备如硬盘、网卡、打印机等发出的…

动手学无人驾驶(2):车辆检测

上一篇博客介绍了无人驾驶中深度学习在交通标志识别中的应用&#xff08;动手学无人驾驶&#xff08;1&#xff09;&#xff1a;交通标志识别&#xff09;。 本文介绍如何使用深度学习进行车辆检测&#xff0c;使用到的模型是YOLO模型&#xff0c;关于YOLO模型的具体检测原理&a…

【HDU - 5922】Minimum’s Revenge(思维,最小生成树变形)

题干&#xff1a; There is a graph of n vertices which are indexed from 1 to n. For any pair of different vertices, the weight of the edge between them is the least common multiple of their indexes. Mr. Frog is wondering about the total weight of the minim…