我们知道,速度越快的存储,价格也就越贵。计算机作为工程的结晶,是如何从一条规则出发,做到『物美价廉』的呢?这条规则又是什么呢?这一讲我们从不同的存储讲起,看看『带着镣铐跳舞』的最高境界。
缓存是一个非常精妙的系统,利用有限的资源给系统带来了显著的性能提升。这一讲前半部分主要是存储系统相关的概念介绍,之后我们会深入研究缓存系统并用实际的例子来学习如何最大程度利用好缓存。 随机存取存储器 了解存储设备所用的技术以及发展趋势,对我们理解内存层级背后的原因很有帮助。 随机存取存储器(RAM, Random-Access Memory) 有两种类型:SRAM(Static RAM) 和 DRAM(Dynamic RAM),SRAM 非常快,也不需要定期刷新,通常用在处理器做缓存,但是比较贵;DRAM 稍慢一点(大概是 SRAM 速度的十分之一),需要刷新,通常用作主内存,相比来说很便宜(是 SRAM 价格的百分之一)。 无论是 DRAM 还是 SRAM,一旦不通电,所有的信息都会丢失。如果想要让数据持久化,可以考虑 ROM, PROM, EPROM, EEPROM 等介质。固件程序会存储在 ROM 中(比如 BIOS,磁盘控制器,网卡,图形加速器,安全子系统等等)。另外一个趋势就是 SSD 固态硬盘,取消了机械结构,更稳定速度更快更省电。 传统机械硬盘 虽然现在越来越多电脑已经改为使用固态硬盘,但是还是有必要了解一下硬盘的组成的。传统的机械硬盘有许多不同的部件: 机械硬盘有许多片磁盘(platter)组成,每一片磁盘有两面;每一面由一圈圈的磁道(track)组成,而每个磁道会被分隔成不同的扇区(sector)。这里概念层层递进,可以结合下图仔细辨析清楚。
现在硬盘会把相邻的若干个磁道切分成小块,每一块叫做记录区(recording zone)。记录区中的每条磁道都包含同样数量的扇区(sector);但是每个记录区中包含的扇区和磁道的数目是不一样的,外层的更多,内层的更少;正因为如此,我们计算容量是,用的是平均的数值。 容量 Capacity = 每个扇区的字节数(bytes/sector) x 磁道上的平均扇区数(avg sectors/track) x 磁盘一面的磁道数(tracks/surface) x 磁盘的面数(surfaces/platter) x 硬盘包含的磁盘数(platters/disk) 举个例子,假如一个硬盘有:
总的容量为 = 512 x 300 x 20000 x 2 x 5 = 30,720,000,000 = 30.72 GB
总的访问时间 Taccess = 寻址时间 Tavg seek 旋转时间 Tavg rotation 传输时间 Tavg transfer
举个例子,假设转速是 7200 RPM,平均寻址时间 9ms,平均每个磁道的 sector 数目是 400,那么我们有:
从这里可以看出,主要决定访问时间的是寻址时间和旋转延迟;读取一个扇区的第一个比特是非常耗时的,之后的都几乎可以忽略不计;硬盘比 SRAM 慢 40,000 倍,比 DRAM 慢 2500 倍。 最后需要知道的就是逻辑分区和实际的物理分区的区别,为了使用方便,会用连续的数字来标志所有可用的扇区,具体的映射工作由磁盘控制器完成。 固态硬盘 接下来介绍一下固态硬盘,内部结构如下
与传统的机械硬盘相比,固态硬盘在读写速度上有很大的优势。但是因为设计本身的约束,连续访问会比随机访问快,而且如果需要写入 Page,那么需要移动其他 Page,擦除整个 Block,然后才能写入。现在固态硬盘的读写速度差距已经没有以前那么大了,但是仍然有一些差距。 不过与机械硬盘相比,固态硬盘存在一个具体的寿命限制,价格也比较贵,但是因为速度上的优势,越来越多设备开始使用固态硬盘。 总线 总线是用来传输地址、数据和控制信号的一组平行的电线,通常来说由多个设备共享,类似于不同城市之间的高速公路,可以传输各类数据。CPU 通过总线和对应的接口来从不同的设备中获得所需要的数据,放入寄存器中等待运算,像下面这样:
总线上连接的各个设备,其访问速度有天壤之别,不同的技术发展速度不同,更加剧了这个情况
那么这么大的时间差距,怎么办呢?难道根据木桶理论,都要取决于最慢的那个吗?不一定!局部性原理(Locality)可以在一定程度上拯救世界。 局部性原理 Locality 局部性的思路很简单[2]:
举个例子:
|
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|