首页 > 其他分享 >操作系统–前言05--存储器-缓存

操作系统–前言05--存储器-缓存

时间:2022-10-28 12:32:37浏览次数:49  
标签:缓存 05 -- 寄存器 Cache 内存 L1 CPU


存储器分级策略

不能用一块存储器来解决所有的需求,那就必须把需求分级。

一种可行的方案,

  • 根据数据的使用频率使用不同的存储器:
  • 高频使用的数据,读写越快越好,因此用最贵的材料,放到离 CPU 最近的位置;
  • 使用频率越低的数据,我们放到离 CPU 越远的位置,用越便宜的材料。

寄存器分为6个级别

  1. 寄存器;
  2. L1-Cache;
  3. L2-Cache;
  4. L3-Cahce;
  5. 内存;
  6. 硬盘/SSD。

寄存器 --> l1-cache --> l2-cache --> l3-cache --> 内存 --> SSD/磁盘

从左到右,距离CPU逐渐变远,读取速度逐渐减低,空间逐渐增大。

寄存器:

寄存器紧挨着CPU的控制单元和逻辑计算单元,所以使用的材料是速度最快的,因而储存的速度最快,耗能就最高,产热就最大,而且花费也是最贵的,因此数量不多.

  • 32 位 CPU 中大多数寄存器可以存储 4 个字节;
  • 64 位 CPU 中大多数寄存器可以存储 8 个字节。

寄存器的访问速度非常快,一般在半个CPU时钟周期内完成

L1-Cache

L1- 缓存在 CPU 中,相比寄存器,虽然它的位置距离 CPU 核心更远,但造价更低。通常 L1-Cache 大小在几十 Kb 到几百 Kb 不等,读写速度在 2~4 个 CPU 时钟周期

L2-Cache

L2- 缓存也在 CPU 中,位置比 L1- 缓存距离 CPU 核心更远。它的大小比 L1-Cache 更大,具体大小要看 CPU 型号,有 2M 的,也有更小或者更大的,速度在 10~20 个 CPU 周期

L3-Cache

L3- 缓存同样在 CPU 中,位置比 L2- 缓存距离 CPU 核心更远。大小通常比 L2-Cache 更大,读写速度在 20~60 个 CPU 周期

L3 缓存大小也是看型号的,比如 i9 CPU 有 512KB L1 Cache;有 2MB L2 Cache; 有16MB L3 Cache。

内存

内存的主要材料是半导体硅,是插在主板上工作的。因为它的位置距离 CPU 有一段距离,所以需要用总线和 CPU 连接。因为内存有了独立的空间,所以体积更大,造价也比上面提到的存储器低得多。现在有的个人电脑上的内存是 16G,但有些服务器的内存可以到几个 T。内存速度大概在 200~300 个 CPU 周期之间。

SSD和硬盘

SSD也叫固态硬盘结构和内存类似,

主要的优点就是在于断电后数据还在.内存,寄存器,缓存断电后数据就消失了.内存的内存的读写速度比 SSD 大概快 10~1000 倍

当CPU需要内存中某个数据的时候,如果寄存器这个数据,直接用,如果寄存器没有这个数据,查询 L1 缓存;L1 中没有,再查询 L2 缓存;L2 中没有再查询 L3 缓存;L3 中没有,再去内存中拿。

缓存条目结构

无论是缓存还是,内存,是一个线性储存器,也就是数据一个挨着一个的储存.比如:把内存想象成一个只有 1 列的表格,那么缓存就是一个多列的表格,这个表格中的每一行叫作一个缓存条目。

方案 1

缓存本质上是一个 Key-Value 的存储,它的 Key 是内存地址,值是缓存时刻内存地址中的值。

  • 内存的地址;
  • 缓存的值。

CPU读取到一个内存地址,就增加一个条目.当查询一个内存地址的数据在不在 L1- 缓存中的时候,可以遍历每个条目,,看条目中的内存地址是否和查询的内存地址相同.如果相同,我们就取出条目中的缓存的值.

缺点:效率低.

方案 2

想要快速的定位缓存条目可以通过取余(类似hash算法)快速定位缓存条目位置。地址 % 10

指令的预读

通过对于指令的预读,使得读取指令的速度跟的上指令的执行速度。减少指令从内存中的读取次数(更耗时),其实就是批处理。

缓存的命中:

所谓命中就是指在缓存中找的需要的数据.和命中相反的是穿透,也叫miss.就是一次读取操作没有从缓存中找到对应的数据。

  • l1的缓存命中率约为80%,
  • l1 l2 l3缓存加在一块命中率高达95%。
  • CPU 缓存的设计还是相当合理的。只有 5% 的内存读取会穿透到内存,95% 都能读取到缓存。

缓存置换:

当缓存满了之后,再读取数据到缓存将置换掉之前的缓存。


SSD、内存和 L1 Cache 相比速度差多少倍?

因为内存比 SSD 快 10~1000 倍,L1 Cache 比内存快 100 倍左右。因此 L1 Cache 比 SSD 快了 1000~100000 倍。

这个问题告诉我们,不同的储存器之间的性能差距很大,构造储存器分级很有意义,分级的目录的是要构造缓存体系.


标签:缓存,05,--,寄存器,Cache,内存,L1,CPU
From: https://blog.51cto.com/u_15850876/5804356

相关文章

  • javaSE09基础-面向对象三大特征
    面向对象特征封装封装概念:封装,将类的某些信息隐藏在类内部,不允许外部访问,而且时通过该类提供的方法来实现对隐藏信息的操作和访问优点:隐藏类的实现细节类内部的结构可......
  • 数据结构与算法--002-稀疏数组
    稀疏数组当一个数组中的很多值默认是0,因此记录了很多没有意义的数据,因而需要稀疏数组基本介绍:当一个数组中大部分是由零,或者为同一个值的数组时,可以使用稀疏数组.稀疏......
  • 操作系统-1.1_1概念功能和目标
    操作系统的概念功能和目标熟悉的操作系统:windows,安卓,ios,linux概念应用程序:QQ,浏览器等操作系统:负责关系协调硬件,软件等计算机资源的工作为上层的应用程序,用户提供简......
  • CSS盒子 模型(box-model)
    盒子模型(box-model)CSS处理网页时,它认为每个标签都包含在一个不可见的盒子里。如果把所有的标签都想象成盒子,那么我们对网页的布局就相当于是摆放盒子。我们只需要将相......
  • javaSE13-- API_常用类--默认继承Object--toString()--==与equals()[详解]
    API_常用类API应用程序编程接口API文档是对Java预定定义的类或接口功能和方法功能的说明文档,目的是提供给开发人员进行使用帮助说明默认继承Object,Java中所有类没有显示的......
  • 907. 子数组的最小值之和
    907.子数组的最小值之和给定一个整数数组arr,找到min(b) 的总和,其中b的范围为arr的每个(连续)子数组。由于答案可能很大,因此返回答案模10^9+7。示例一输......
  • Linux使用ifconfig命令没有显示ens33或者没有ip地址
    1.首先win+R输入services.msc进入服务窗口,看一下服务有没有启动2.修改网络配置文件ONBOOT修改为yesvi/etc/sysconfig/network-scripts/ifcfg-ens33---进入配置文件3......
  • Dapr实现.Net Grpc服务之间的发布和订阅,并采用WebApi类似的事件订阅方式
    大家好,我是失业在家,正在找工作的博主Jerry,找工作之余,总结和整理以前的项目经验,动手写了个洋葱架构(整洁架构)示例解决方案OnionArch。其目的是为了更好的实现基于DDD(领域驱......
  • uniapp打包h5
    1.找到项目中 manifest.json---H5 配置---运行时的基础路径, 将路径修改为相对路径(./) 注意:1.运行的基础路径系统默认打包路径为绝对路径,如不改,打包时找不到......
  • 【随手记录】 关于nginx请求500错误 - CreateFile() "/temp/client_body_temp/0000000
    这几天一位前端同事在处理上传请求时候nginx返回500错误,没有额外错误信息,后端也没有接收到请求,看他本地nginx日志错误:[crit]28700#21636:*1389CreateFile()"\nginx-......