CPU和高速緩存、主內(nèi)存之間的關(guān)系
- CPU只直接跟L1高速緩存交互沥邻,CPU不會(huì)直接操作主內(nèi)存危虱;每個(gè)CPU只直接操作各自的高速緩存,不能直接操作其他CPU的高速緩存唐全;
- 高速緩存中的數(shù)據(jù)均來源于主內(nèi)存槽地,即是主內(nèi)存中的數(shù)據(jù)的拷貝;
- 當(dāng)高速緩存中的數(shù)據(jù)被CPU修改后,有兩種機(jī)制來實(shí)現(xiàn)高速緩存和主內(nèi)存的通信:一個(gè)是
write-through
捌蚊,另一個(gè)是write-back
;
write-through機(jī)制
write-through機(jī)制描述的是當(dāng)CPU對高速緩存進(jìn)行寫操作時(shí)近弟,高速緩存如何跟主內(nèi)存交互的缅糟。
特點(diǎn)如下:
- 寫命中
既寫高速緩存,也寫主內(nèi)存祷愉; - 寫不命中
使用非寫分配 not-write-allocat窗宦,即避開高速緩存,直接寫到主存二鳄;
write-back機(jī)制
write-back機(jī)制描述的是當(dāng)CPU對高速緩存進(jìn)行寫操作時(shí)赴涵,高速緩存如何跟主內(nèi)存交互的。
特點(diǎn)如下:
- 寫命中
每個(gè)緩存行有一個(gè)有效位:0表示dirty/空, 1表示有效订讼;只寫高速緩存髓窜,將相應(yīng)的緩存行標(biāo)記為臟,即dirty欺殿;只有當(dāng)這個(gè)臟的緩存行要被替換掉時(shí)寄纵,才會(huì)寫到內(nèi)存中去; - 寫不命中
首先使用write-allocate的方式:從下一層存儲加載相應(yīng)的塊到高速緩存脖苏,然后更新這個(gè)緩存塊程拭;然后就使用寫命中機(jī)制了;
高速緩存結(jié)構(gòu)
- CPU只直接和寄存器棍潘、L1緩存交互恃鞋;
- 現(xiàn)代的L1緩存分為兩個(gè)單獨(dú)的物理塊:
i-cache存儲指令,是read-only的亦歉;
d-cache存儲數(shù)據(jù)恤浪,是read/write的;- L2和L3緩存存儲指令和數(shù)據(jù)鳍徽;
- 高速緩存的大凶拭獭:Core i7的L1緩存大小為64KB, L2緩存是256KB,L3是8MB阶祭;
- 緩存是分塊绷杜,分組的;
- L1的訪問周期是4濒募, L2是L1的3倍鞭盟,L3是L2的3倍;一次內(nèi)存訪問的時(shí)鐘周期是L3的3倍左右瑰剃,和L1差2個(gè)數(shù)量級