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

zzzzMing發表於2016-09-14

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告訴快取儲存器。而後來隨著系統內部各儲存器結構之間速度差距的不斷增大,快取這項技術也被用到了各儲存器結構之間,比如磁碟和記憶體。

  快取是為了減少各儲存器層次結構之間的速度差異而存在的,其作用就是在訪問更低階的儲存器結構的時候,直接低層次儲存器結構的一個較大的塊存放到快取儲存器中。這樣,下次要訪問之前資料的鄰近資料時,就能快速得從快取儲存器中得到資料。要編寫區域性性良好的程式也是基於這個原因。

相關文章