存储器层次结构 --《深入理解计算机系统》第六章读书笔记

Posted zzzzMing -大数据技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了存储器层次结构 --《深入理解计算机系统》第六章读书笔记相关的知识,希望对你有一定的参考价值。

技术分享

1.几种存储技术

  • 随机访问存储器RAM,RAM又分为两类:静态的SRAM和动态的DRAM。
    • 静态SRAM特点:容量较小,速度较之动态DRAM要快很多,故而价格也较高。一般用作CPU与内存的缓存。
    • 动态DRAM特点:容量较大,速度比SRAM慢,价格相对较低。一般用作系统内存。
  • 磁盘存储,存盘属于外部I/O设备,其特点是存储容量大,但读取速度更慢,价格也更加便宜。一般而言,从磁盘上读信息的时间为毫秒级,从DRAM读比从磁盘读快10万倍,从SRAM读比从磁盘读快100万倍。
    • 因为磁盘的构造是一个圆盘,盘上分布着一条条磁道(不同半径就有不同的磁道),每次访问都要找到相应的磁道,然后磁盘旋转到对应的启示位置,故而,磁盘扇区访问时间=寻道时间+旋转时间+传输时间。

2.局部性

  在程序中,程序倾向于引用邻近于其他最近引用过的数据项的数据项,或者就是最近引用的数据项本身,这种倾向,称为局部性原理。打个比方,在如下一个二维数组的循环中,循环1的局部性就比循环2的更优秀。

/*有良好局部性的程序*/
int
loop1( int array[M][N] ){ int i = 0,j = 0,sum = 0; for( i = 0;i < M;i++ ){ for( j = 0;j < N;j++ ) sum += a[i][j]; return sum; }
/*局部性很差的程序*/
int loop2( int array[M][N] ){ int i = 0,j = 0,sum = 0; for( i = 0;i < M;i++ ){ for( j = 0;j < N;j++ ) sum += a[j][i]; return sum; }

   程序局部性可以总结为以下:

  • 重复引用一个变量的程序有良好的时间局部性。
  • 对于具有步长为k的引用模式的程序,步长越小,空间局部性越好。相对得,在存储器中以大步长跳来跳去的程序空间局部性会很差。
  • 对于取指令来说,循环有好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。

3.高速缓存存储器

  随着CPU与主存之间的速度差距不见增加,故而早期的系统设计者被迫在CPU寄存器和主存之间插入了一个小的SRAM告诉缓存存储器。而后来随着系统内部各存储器结构之间速度差距的不断增大,缓存这项技术也被用到了各存储器结构之间,比如磁盘和内存。

  缓存是为了减少各存储器层次结构之间的速度差异而存在的,其作用就是在访问更低级的存储器结构的时候,直接低层次存储器结构的一个较大的块存放到缓存存储器中。这样,下次要访问之前数据的邻近数据时,就能快速得从缓存存储器中得到数据。要编写局部性良好的程序也是基于这个原因。

以上是关于存储器层次结构 --《深入理解计算机系统》第六章读书笔记的主要内容,如果未能解决你的问题,请参考以下文章

深入理解计算机系统 第六章 存储器层次结构

在键值数据存储中存储目录层次结构

第三章 存储器的层次结构

存储器结构层次

Google Appengine 数据存储的层次结构优化

存储器层次结构