深入理解计算机系统04——存储

目录

系列文章目录

一、储存器层次结构及储存技术

1.储存器层次结构

2.储存技术

二、磁盘存储

1.磁盘结构

2.磁盘容量

2.1 记录区

2.2 磁盘容量计算

3.磁盘操作(读写访问)

4.逻辑磁盘块

三、局部性

四、存储器层次结构

1.层级结构理论

1.1 存储器层次结构的基本思想

1.2 为什么存储器层次结构行得通?

1.3重要观点

2.高速缓存Cache

2.1 Cache相关概念

2.2 映射

3.Cache映射例题

总结


系列文章目录

本系列博客重点在深圳大学计算机系统(2)课程的核心内容梳理,参考书目《深入理解计算机系统》(有问题欢迎在评论区讨论指出,或直接私信联系我)。

第一章 深入理解计算机系统01——计算机系统漫游_@李忆如的博客-CSDN博客

第二章 深入理解计算机系统02——信息的表示与处理_@李忆如的博客-CSDN博客

第三章 深入理解计算机系统03——程序的机器级表示_@李忆如的博客-CSDN博客

第四章 深入理解计算机系统04——存储


梗概

本篇博客主要介绍深入计算机系统第六章存储的相关知识。


一、储存器层次结构及储存技术

1.储存器层次结构

储存器层次结构举例如下:

不同位置的数据对访问速度的影响

2.储存技术

随机访问存储器(RAM)分为静态(SRAM)与动态(DRAM)两种,区别如下:

Tips:持续即不用刷新。

易失性存储器(RAM):当电源关闭时RAM不能保留数据。

非易失性存储器(NVM,例闪存):当电流关掉后,所存储的数据不会消失的电脑存储器。

二、磁盘存储

1.磁盘结构

磁盘由 双面(默认) 盘片 组成
每张盘面上密集地排布着环形 磁道
每条磁道上有多个 扇区 ,每个扇区由 间隙 隔开

2.磁盘容量

2.1 记录区

现代磁盘将柱面分割为不相交的子集,称为 记录区

Tips:在计算容量时,我们使用扇区/轨道的平均数目。多区记录内扇区小于外扇区,原磁盘相等

2.2 磁盘容量计算

磁盘容量 =  (字节数/扇区) x (平均扇区数/磁道) x (磁道数/盘面) x (盘面数/盘片) x (盘片/磁盘)

示例如下:

Tips:盘面/盘片可能会隐藏,一般都为2,别漏。 

3.磁盘操作(读写访问)

磁盘访问过程如下:

访问某个扇区平均时间  =  平均寻道时间 +  平均旋转时间 + 平均数据传输时间

访问文件时间 = 平均时间 x 扇区数

寻道时间:磁头由一个柱面移动到另一个柱面的时间

旋转时间:经过磁盘旋转,目标扇区到达磁头下的时间

数据传输时间:传输每个扇区所需时间

磁盘访问示例如下:

4.逻辑磁盘块

¢ 现代磁盘将复杂的物理结构转换成简单的抽象视图 :
§ 一组连续扇区被封装成一个 b-sized 大小的逻辑盘块
¢ 逻辑块与物理块之间的映射
§ 由磁盘控制器(硬件和固件组成)来维护
§ 将读写请求地址转换成三元组: ( 盘面 , 磁道 , 扇区 ) .
¢ 允许控制器从每个区域中保留一部分空闲柱面
§ 区分 格式化容量 最大容量”

逻辑磁盘块示例如下:

三、局部性

局部性原理: 程序倾向于使用最近一段时间,距离其较近地址的数据和指令。

时间局部性: 最近被访问的数据或指令 在未来可能还会被访问

空间局部性: 当前访问地址附近的区域在不久 还有可能被访问

局部性示例代码如下:

Tips:对于按行存储,第二份代码在N小的时候局部性也良好(并非所有情况都不好)。 

四、存储器层次结构

1.层级结构理论

1.1 存储器层次结构的基本思想

对每个k,位于k层的更快更小的存储设备作为位于k+1等的更大更慢的存储设备的缓存(低到高)

1.2 为什么存储器层次结构行得通?

由于局部性原理,程序访问第k层的数据比第k+1层的数据要频繁。因此,第k+1层存储设备更慢且更大、更廉价.

1.3重要观点

存储器层次结构构建了一个大容量的存储池,像底层存储器一样低廉,而又可以达到顶层存储器的速度

2.高速缓存Cache

2.1 Cache相关概念

Cache: 一种更小,速度更快的存储设备。作为更大、更慢存储设备的缓冲区. 解决CPU与主存之间速度匹配的问题。

宏观:容量->组->块

命中:请求的数据在Cache中,提高访问速度。

不命中:请求的数据不在Cache里,从主存中读取,更新Cache。

1.冷不命中:一开始Cache为空,对块的第一次引用

2.容量不命中:当一组活动缓存块(工作集)大于缓存时发生

3.冲突不命中:有可用的空位,该块也试图占用已填充的行

参数对性能的定性结论:

注意:许多降低不命中率的方法会增加命中时间或不命中开销(处罚)

1.提高cache容量会提升命中率,可能增加命中时间。

2.提高块的大小有利于提高命中率,但是块的大小过大使得块数量下降过多也会降低命中率,增加传送时长。

3.提高相联度有利于减少行冲突提升命中率,但硬件复杂度提升会增加处罚时间。

4.增加组的大小降低了由于冲突不命中出现抖动的可能性,但增加了成本。

更完整优化策略:​​​​​【体系结构系列】提高Cache命中率_槑!的博客-CSDN博客_提高cache命中率的方法

Cache例题:

Cache友好代码:原则——充分利用局部性

方法:尽量反复引用相同或相近的数据,具体如下:

让最常见的情况运行得快:集中在核心函数里的循环

尽量减少每个循环内部的缓存不命中数量:对局部变量的反复引用是好的 (时间局部性)、步长为1的顺序引用模式是好的(空间局部性)

Tips:使用Cache可以加快访存速度

2.2 映射

将主存块和Cache行按照以下三种方式进行映射

1.直接相联(Direct):每个主存块映射到Cache的固定行(不灵活,Cache利用率低,容易产生冲突)

2.组相联(Set Associate):每个主存块映射到Cache固定组中任一行(组间直接,组内全相联)

3.全相联(Full Associate):每个主存块映射到Cache的任一行(Cache利用率高,块冲突率低)

3.Cache映射例题

如何知道cache中的数据项对应内存中哪个地址? 存储标记tag

如何保证是否包含有效信息? 有效位Valid bit: 1 = 在 0 = 不在 初始值为 0

如果访存序列为: 22, 26, 22, 26, 16,3,16,请画出最后cache的状态及计算其命中率/缺失率

最终状态如下:命中率为3/7(3、4、7) 

再访存18,状态改变如下(冲突不命中 改变但Miss):

总结

以上便是深入理解计算机系统第六章——存储的核心知识。在第六章中,主要以系统中的概念(计算机系统的信息、程序、工作流、主题等)的介绍为主。

猜你喜欢

转载自blog.csdn.net/weixin_51426083/article/details/125060253