【精通底层】存储器层次结构

举报
小明的混沌之路 发表于 2022/07/31 13:35:43 2022/07/31
【摘要】 计算机中存储器是根据成本、作用、特性等等因素分层的,作为程序员需要了解存储器的结构以及如何编写对存储器友好的代码。


前言:📫 作者简介:小明java问道之路,专注于研究计算机底层,就职于金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的设计和架构📫 

🏆 Java 领域新星创作者、阿里云专家博主、华为云享专家🏆

🔥 如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主哦

本文导读

存储器系统(memory system)是一个具有不用容量、成本和访问时间的存储设备的层次结构。本章我们了解存储器层次结构、基本的存储技术(磁盘结构、固态硬盘结构、高速缓存存储器)等。

如果程序需要的数据在寄存器中,指令可以立即使用这些数据;如果数据存储在cache中,那么获取这些数据4~75个时钟周期;当数据存储在内存中,需要几百个时钟周期;如果数据存储在磁盘中,需要大约几千万个时钟周期。

一、机械磁盘


二、固态硬盘


三、存储器层次结构

存储技术和计算机软件基本稳定特性:一、高速存储器技术成本高、容量下、耗电大、易发热;二、CPU和主存之间的速度差距越来越大;三、一个编写良好的程序倾向于展示出良好的局部性

局部性原理:程序倾向于使用距离最近用过的指令/数据地址相近或相等的指令/数据。

局部性的两种形式:时间局部性:最近访问过的信息,很可能在近期还会被再次访问。重复引用相同变量的程序有良好的时间局部性。空间局部性:地址接近的数据项,被使用的时间也倾向于接近。对于具有步长为kk的引用模式的程序,步长越小,空间局部性越好。

这些特性互相补充,下图给出一条组织存储器系统的途径——存储器层次结构

四、高速缓存存储器

高速缓存存储器是小型的、快速的基于SRAM的存储器,是在硬件中自动管理的。下图为高速缓存存储器的总线结构图


书中介绍三类高速缓存结构:一、通用的高速缓存存储器组织结构(机器的高速缓存被组织成一个有S=2^s个高速缓存组的数组。每个组包含E个高速缓存行。每个行是由一个B=2b字节的数据块组成的,一个有效位指明这个行是否包含有意义的信息,还有t=m−(b+s)个标记位,它们唯一地标识存储在这个高速缓存行中的块) ;二、直接映射高速缓存(每个组只有一行的高速缓存称为直接映射高速缓存);三、组相联高速缓存(组相联高速缓存中的每个组都保存有多于一个的高速缓存行)

高速缓存参数的性能影响:(一)不命中率:不命中数量/引用数量;(二)命中率:1−1−不命中率;(三)命中时间:从高速缓存传送一个字到CPU所需的时间;(四)不命中处罚:由于不命中所需要的额外的时间。

五、编写高速缓存友好的代码

1、让常见的情况运行得快(专注在核心函数和内循环上)2、尽量减少每个循环内部的缓存不命中数量(对局部变量的反复引用(时间局部性)、步长为1的引用模式(存储器所有缓存都是将数据存储为连续的块(空间局部性))

​小结

计算机中存储器是根据成本、作用、特性等等因素分层的,作为程序员需要了解存储器的结构以及如何编写对存储器友好的代码。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。