
最簡單的高速緩存的配置,數(shù)據(jù)的讀取和存儲都經(jīng)過高速緩存,CPU核心與高速緩存有一條特殊的快速通道;主存和高速緩存都連在系統(tǒng)總線上,這條總線還用于其他組件的通信。
高速緩存出現(xiàn)不久,系統(tǒng)變得越來越復(fù)雜,高速緩存與主存之間的速度差異被拉大,直到加入了另一級緩存,新加入的這級緩存比第一緩存更大,而且更慢,而且經(jīng)濟(jì)上不合適,所以有了二級緩存,甚至是三級緩存。
一、為什么需要CPU cache?
CPU的頻率太快了,快到主存跟不上,這樣在處理器時鐘周期內(nèi),CPU常常需要等待主存,浪費資源,所 以cache的出現(xiàn),是為了緩解CPU和內(nèi)存之間速度的不匹配問題(結(jié)構(gòu):cpu->cache->memort)
二、CPU cache有什么意義?
1、時間局部性:如果某個數(shù)據(jù)被訪問,那么在不久的將來他很可能被再次訪問
2、空間局部性:如果某個數(shù)據(jù)被訪問,那么與他相鄰的數(shù)據(jù)很快也可能被訪問
三、緩存一致性(MESI)
CPU中每個緩存行使用四種狀態(tài)進(jìn)行標(biāo)記
M:Modified 修改
指的是該緩存行只被緩存在該CPU緩存中,并且是被修改過的,因此他與主存的數(shù)據(jù)是不一致的,該緩存行中的數(shù)據(jù)需要在未來的某個時間點(允許其他CPU讀取主存相應(yīng)的內(nèi)容之前)寫回主存,然后狀態(tài)變成E(獨享)。
E :Exclusive 獨享
緩存行只被緩存在該CPU的緩存中,是未被修改過的,與主存的數(shù)據(jù)是一致的,可以在任何時刻當(dāng)有其他CPU讀取該內(nèi)存時,變成S(共享)狀態(tài),當(dāng)CPU修改緩存行的內(nèi)容時,變成M(修改)的狀態(tài)。
S :Share 共享
意味著該緩存行可能被多個CPU進(jìn)行緩存,并且該緩存中的數(shù)據(jù)與主存數(shù)據(jù)是一致的,當(dāng)有一個CPU修改該緩存行時,其他CPU是可以被作廢的,變成I(無效的)。
I :Invalid 無效的
對應(yīng)的四個操作
local read:讀本地緩存
local write:寫本地緩存
remote read:將內(nèi)存中的數(shù)據(jù)讀取過來
remote write:將數(shù)據(jù)寫回主存
緩存一致性
為了達(dá)到數(shù)據(jù)訪問的一致,需要各個處理器在訪問緩存時遵循一些協(xié)議,在讀寫時根據(jù)協(xié)議來操作,常見的協(xié)議有MSI,MESI,MOSI等。我們介紹其中最經(jīng)典的MESI協(xié)議。
在MESI協(xié)議中,每個cache line有4個狀態(tài),可用2個bit表示,它們分別是
狀態(tài) 描述
M(Modified) 這行數(shù)據(jù)有效,數(shù)據(jù)被修改了,和內(nèi)存中的數(shù)據(jù)不一致,數(shù)據(jù)只存在于本Cache中。
E(Exclusive) 這行數(shù)據(jù)有效,數(shù)據(jù)和內(nèi)存中的數(shù)據(jù)一致,數(shù)據(jù)只存在于本Cache中。
S(Shared) 這行數(shù)據(jù)有效,數(shù)據(jù)和內(nèi)存中的數(shù)據(jù)一致,數(shù)據(jù)存在于很多Cache中。
I(Invalid) 這行數(shù)據(jù)無效
E、狀態(tài)

只有Core 0訪問變量x,它的Cache line狀態(tài)為E(Exclusive)
S、狀態(tài)

3個Core都訪問變量x,它們對應(yīng)的Cache line為S(Shared)狀態(tài)
M狀態(tài)和I狀態(tài)

Core 0修改了x的值之后,這個Cache line變成了M(Modified)狀態(tài),其他Core對應(yīng)的Cache line變成了I(Invalid)狀態(tài)