計算機存儲器

層次化存儲結構java

cpu -->  Cache -->  內存(主存) --> 外存(輔助) ;處理速度由快至慢,制形成本由貴至便宜。性能

Cache-概念spa

一、Cache的功能,提升CPU數據輸入輸出的速率,突破 馮諾依曼瓶頸,即CPU與存儲系統間數據傳送寬帶限制;.net

二、在計算機系統的存儲系統體系中,Cache是訪問速度最快的層次;code

三、使用Cache改善系統性能的依據是程序的局部性原理;blog

t1表示Cache的週期時間,t2表示主存儲器週期時間(t2遠遠大於t1),h表明對Cache的訪問命中率內存

使用「Cache+主存儲器」的系統的平均週期 t3,則get

    t3 =h*t1+(1-h)*t2   博客

總結:h的取值範圍爲0.00-1.00,t3的範圍爲: 2t2 ~ t1 ,命中率越高,t3時間越短,Cache的價值就能越能體現出來,當h爲0時,Cache將毫無價值it

 

局部性原理

在CPU訪問寄存器時,不管是存取數據抑或存取指令,都趨於彙集在一片連續的區域中,這就被稱爲局部性原理

時間局部性(temporal locality) 
時間局部性指的是:被引用過一次的存儲器位置在將來會被屢次引用(一般在循環中)。 
空間局部性(spatial locality) 
若是一個存儲器的位置被引用,那麼未來他附近的位置也會被引用

栗子1

int a[N] = {0, 1, 2, 3, 4};
int sum = 0;

for (int i = 0; i < 5; ++i)
{
    sum = sum + a[i];
}

在這個例子中,變量在內存中的存儲結構以下:

能夠看出從a[0]到a[4]的地址位是連續的,並且程序中訪問這些變量頻率較高,因此對與a來講,其具備良好的空間局部性,可是每一個a成員只被訪問一次,因此並不具備良好的時間局部性。 
可是對於變量sum來講,其因爲其是一個標量,也就是說經過其地址只能獲得一個值,故其不具備良好的空間局部性,可是因爲其訪問頻率較高,因此有良好的時間局部性。 
經過以上結論能夠推出,對於向量a來講,若是其訪問順序和存儲順序一致,那麼a的變量之間距離太遠,那麼其空間局部性越差,由於CPU沒辦法在其附近找到其餘變量,

因此空間局部性和a的步長有很大的關係,步長越長,空間局部性越差。 同理,若是一個變量被訪問的頻率越高,其時間局部性就越好。

取指令的局部性 
指令存子啊存儲器中,CPU要讀取指令必須取出該指令,因此就能夠評價取指令的局部性。 
在for循環中,循環體內的指令屢次被執行,因此有良好的時間局部性, 
循環體中的指令是按順序執行的,有良好的空間局部性(指令在存儲器中是順序存放的)。

小結 :評價局部性的簡單原則
1.重複引用同一個變量具備良好的時間局部性。 
2.對於步長位k的引用程序,步長越小,空間局部性越小。步長爲1的引用具備良好的空間局部性。k越大,空間局部性越差。 
3.對於取指令來講、循環有良好的時間和空間局部性。

主存-分類

計算機存儲器分爲兩類,隨機存儲器(RAM)和只讀存儲器(ROM)

主存-編址

內存是按字節編址的,因此單位是字節,1字節等於8位。

因此就記住兩個就夠了。記住幾個經常使用的2的10次方爲1024即1KB2的20次方=(2的10次方)的平方,即1MB就好了。

存儲器模型圖以下圖所示,

 每1橫排表示一個地址單元,每一個地址單元有 1* N(N表示n位存儲器)個字節  

栗子2

內存地址從AC000H到C7FFFH,共有___K個地址單元,若是該內存地址按(16bit)編址,由28片存儲器芯片構成,已知構成此內存的芯片每片有16K個存儲單元,則該芯片每一個存儲單元存儲___位。

解析:C7FFFH-AC000H+1 = 1C000H  --> 1C000H/2^10  = 112 ;共有112K個地址單元。28*16K* N = 112K * 16  --> 求解得N = 4 ;

 

參考博客 https://blog.csdn.net/u013315650/article/details/56347793

相關文章
相關標籤/搜索