層次化存儲結構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