研究Linux分頁技術碰到著名的局部性原理,查資料解釋如下:
局部性原理(Principle of Locality)是一個由經驗得出的結論:“一個程序90%的時間運行在10%的代碼上”。
計算機程序從時間和空間都表現出“局部性”:
1)時間的局部性(Temporal Locality):最近被訪問的內存內容(指令或數據)很快還會被訪問;
2)空間的局部性(Spatial Locality):靠近當前正在被訪問內存的內存內容很快也會被訪問。
一個典型的例子就是幾乎所有的程序都有循環代碼。比如:
for(int i=0; i < 1000; i++)
for(int j=0; j < 200; j++)
a[i][j] = i*j;
這段代碼從時間和空間上都表現出很強的局部性。
而對於存儲器而言,存取速度越快的其成本越高。為了在成本和性能之間進行平衡,現代計算機體系架構往往選擇:使用少量性能高但成本也高的存儲器作為速度慢而成本也低的存儲器的緩存。成本越高的存儲器數量越少,但它們被設計為更靠近CPU,所以它們性能要比次級存儲器高的多。
所以整個存儲器層次是一個金字塔結構,如下圖所示:
由於上層存儲器是下層存儲器的緩沖,基於局部性原理,使用這種架構是正確的選擇。因為下層存儲器中的數據一旦被裝入上層存儲器,就很有可能被多次用到,此時CPU則可以在更靠近它的性能也更高的存儲器內找到其需要的數據,而不需要每次都要到離它更遠,性能也更低的存儲器內去存取它們。
在現代計算機軟硬件體系架構下,不同層次的程序員看到的存儲器層次也是不一樣的。對於Application程序員,看到的只有虛擬內存,而對於系統程序員,比如操作系統程序員看到就是普通內存,而對於系統級Hardware Integration程序員,則看到的是二級cache,對於芯片級別的Hardware程序員,看到的則是一級cache。
但無論你是哪個級別的程序員,如果你能夠了解更低層的存儲器原理,則可能優化你的程序,讓你的程序性能更高。而對於OS程序員而言,了解一,二級cache的機制,則可以優化其開發的操作系統。