存儲器層次結構 --《深入了解計算機系統》第六章讀書筆記

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告訴緩存存儲器。而後來随着系統内部各存儲器結構之間速度差距的不斷增大,緩存這項技術也被用到了各存儲器結構之間,比如磁盤和記憶體。
緩存是為了減少各存儲器層次結構之間的速度差異而存在的,其作用就是在通路更低級的存儲器結構的時候,直接低層次存儲器結構的一個較大的塊存放到緩存存儲器中。這樣,下次要通路之前資料的鄰近資料時,就能快速得從緩存存儲器中得到資料。要編寫局部性良好的程式也是基于這個原因。