CPU緩存
咱們搞java的,平時寫業務代碼,會不多涉及到這方面的知識。可是若是要寫出高性能的java代碼,對於CPU Cache一塊仍是要有所瞭解的。java
首先來說寄存器爲何會比內存快緩存
寄存器是在CPU內部的,固然讀起來會更加快一點。以3GHz(Hz是每秒的週期次數)的CPU爲例,電流每秒鐘能夠震盪30億次。1秒=10億納秒,每次耗時大約爲10/30納秒,也就是0.33納秒。光速是每秒300000000米,也就是說光在1納秒能夠前進30cm,在cpu的一個時鐘週期內,光能夠前進10cm。(理想狀態下,真實狀況下還要考慮到能量損失等等不少因素),若是內存距離CPU超過5cm,就不能夠在一個時鐘週期內完成數據的讀取。架構
內存在硬件設計上,每一個位就是一個電容和一個晶體管,而寄存器的晶體管一直有電,而內存的晶體管只有用到的纔有電,沒有用到就沒有電,這樣有利於省電。性能
寄存器和內存的工做方式不太相同。優化
寄存器的工做方式spa
1.找到相關的位
2.讀取這些位操作系統
內存的工做方式設計
2.將指針送往內存管理單元(MMU),由MMU將虛擬的內存地址轉換成實際的物理地址。
3.物理地址送往內存控制器(Memory Controller)。由內存控制器找出該地址在哪一根內存插槽上。
4.確認數據在哪個內存塊上,從該塊讀取數據
5.數據先送回內存控制器,再送回CPU,而後開始使用。
帶有CPU Cache的CPU執行計算的流程:指針
1.將程序和數據加載到主內存中。
2.將指令和數據加載到CPU Cache。
3.CPU執行指令,將結果寫到CPU Cache。
4.CPU Cache寫回到主內存中。事務
CPU Cache的意義在何處?
1.時間局部性:若是某個數據被訪問,那麼在不久的未來它極可能被再次訪問。
2.空間局部性:若是某個數據被訪問,那麼與它相鄰的數據很快也可能會被訪問。
在CPU訪問存儲設備時,不管是存取數據或者是存取指令,都趨於彙集在一片連續的區域中,被稱爲局部性原理。
說到這裏,我要說一個協議,CPU多級緩存一致性協議(MESI)。這個協議用於保證多個CPU Cache之間緩存共享數據的一致性。個人電腦就有CPU三級緩存,後面會詳細介紹CPU三級緩存。
在CPU裏面,緩存是以緩存行(Cache line)的形式存在。Cache line緩存存儲數據的單元,每一個Cache line有4種狀態,分別是Modified(修改)、Exclusive(獨佔)、Shared(共享)、Invaild(無效)。一個Cache line有64Byte(字節,一個字節等於8bit)
4種狀態詳細說明以下
對於M和E狀態而言老是精確的,它們和該緩存行的真正狀態是一致的,而S狀態多是非一致的。若是一個緩存將處於S狀態的Cache line做廢了,而另外一個緩存實際上獨享了該Cache line,但該緩存卻不會將該Cache line設置爲E狀態。
這是由於其餘緩存不會廣播它們做廢該Cache line的通知,一樣因爲緩存並無保存該Cache line的Copy數量,即使有這種通知也沒法肯定本身是否已經獨享了該緩存行。
能夠看出E狀態是一種投機性優化。若是一個CPU想修改一個處於S狀態的Cache line,總線事務須要將全部Cache line的Copy變成Invalid狀態,而修改E狀態的緩存不須要使用到總線事務。
關於CPU的計算機基礎知識
存儲單元是以字節爲單位的,1B=8b 1KB=1024B 1MB=1024KB 1GB=1024MB
2^32 = 4GB 2^64=1800萬TB
好比64位的操做系統只是字節的64位,數據總線是64根,真正決定內存大小的是地址總線的數目,即尋址空間。
數據總線:
1.是CPU與內存或者其餘器件之間的數據傳送的通道。
2.數據總線的寬度決定了CPU和外界的數據傳送速度。
3.每條傳輸線一次只能傳輸1位二進制數據,好比32位操做系統,32根數據線一次可傳送32位二進制數據,也就是4個字節。
4.數據總線是數據線數量之和。
地址總線:
1.CPU是經過地址總線來執行存儲單元的。
2.地址總線決定了CPU所能訪問的最大內存空間大小。好比32位操做系統有32根地址線,那麼CPU就能訪問2^32=4GB存儲單元。
3.地址總線是地址線數量之和。
控制總線:
1.CPU經過控制總線對外部器件進行控制。
2.控制總線的寬度決定了CPU對外部器件中的控制能力。
3.控制總線是控制線數量之和。
來總結一波,每一個CPU芯片都有不少管腳,這些管腳和總線相連。也就是說這些管腳引出總線。一個CPU能夠引出3種總線的寬度標誌了這個CPU的不一樣方面的性能。
- 地址總線的寬度決定了CPU尋址能力。
- 數據總線的寬度決定了CPU與其餘器件進行數據傳送時一次數據傳送量。
- 控制總線的寬度決定了CPU對系統中其餘器件的控制能力。