向内存中缓存_cpu高速缓存知识点

现代的计算机的CPU的频率比较高,相反硬盘的频率和CPU相比就差的太远了,CPU去硬盘上读取数据耗费的周期比较多,CPU访问核内的寄存器要比访问硬盘快多了,为了解决这样的矛盾,于是,就有了一个中介设备,来缓解CPU和硬盘之间的速度差异,这个中介就是我们常说的内存,CPU去硬盘读取数据时,这部分数据会存在内存中,下次cpu再去读取相同的数据时,直接从内存中读取,读取内存的速度要比读取硬盘的速度快,这样就缓解了CPU和硬盘之间的速度差异性。

但是CPU的速度还是比内存快,于是,就提出了高速缓存的处理机制,会把经常使用的数据或者指令放在高速缓存中,这样的话,当下次读取相同的数据或者指令时,直接从高速缓存中读取即可,cpu读取高速缓存的速度要比读取内存的速度快上几个量级。

从上面我们知道,存储器系统分为几个层级,请看下图:

36e3304dca9cca9ba56af53365a20950.png

图1

L0 到 L6 代表着不同的层级,CPU访问L0到L6,速度是越来越慢,原理就是上一层缓存下一层的数据,主要是缓存访问频率较高的数据,高速缓存主要缓存内存中的数据,内存缓存硬盘中的数据。例如:当向cpu发出读取数据的指令时,cpu首先会检查L0层中是否有该数据的缓存,如果L0中没有,则L0会向L1层查询,如果L1中没有,则L1会向L2中进行查询,依此类推。

缓存哪些数据,主要是依靠一下两种的推断:

1) 时间局部性

就是假设刚刚访问的数据,有可能还会被访问到,对于这类数据会将其加入缓存。

2) 空间局部性

就是假设刚刚访问过的数据的相邻地方的数据有可能也会被访问,所以会将相邻的数据加入到缓存。

基于这两种特点,我们以后在编程中,尽量按照这两种特点进行编程。

例如:对于二维数组,我们在扫描的时候,按照行扫描会优于按照列扫描的代码。

数据在各个存储器层次之间传递时,是以快为单位进行的,数据总是在第i层和i+1 层之间来回进行复制,当cpu需要访问i+1层的数据m时,首先会先去第i层去查找是否有该m的缓存,如果在第i层查找到m时,则我们叫它缓存命中,如果没有查找到m,我们称为缓存没命中,于是,cpu就会从第i+1层将数据m取到,然后加入到i层的缓存中。

有人会问,那么数据在缓存中的格式是什么样的呢?下回进行分解,请关注我哦。

4db1b1cacda4e7ee1e954cb97bee8042.png

linux

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值