80386的緩存Cache
大家都知道緩存是用來解決CPU與內存速度不匹配的問題的。80386是x86計算機中第一個配備了緩存的CPU.
CPU與內存速度的GAP
首先我們來看看這個GAP是否存在,以及是什麼時候才開始存在的。
下面我們列一下8086、80286、80386的主頻以及使用的內存性能。以下是在網上找到的兩個表,分別對應各年代CPU的主頻和DRAM的訪存時間。來源:Data in Memory versus In-Memory Databases
YearDRAMDensitytRAC1971Intel 11031K300ns1973TI TMS4034K?1977Mostek MK411616K250ns1980?64K200ns1983?256K150ns1986?1M?1989?4M80ns1992?16M?1995?64M?
DRAM訪問時間表
MHzMIPStransistorsprocessYearIntel 40040.7400.072,30010μm1971Intel 808020.296,0006μm1974Intel 80865 80.33 0.6629,0003μm1978Intel 802866 12.50.9 2.66134,0001.5μm1982Intel 80386DX16 335 9.9275,0001μm1985 1989Intel 80486DX25 5020 411.2M1μm 0.8μm1989 1991Intel 80486DX475 10053 70.71.6M0.6μm1994Intel Pentium (P5)60 66100 1123.1M0.8μm1993Intel Pentium (P54)90 100149.8 166.33.2M0.6μm1994Intel Pentium (P54CS)133 166218.9 2473.3M0.35μm1995 1996CPU主頻變化表
從表中可以看出,在80386發布的年代,內存的訪存時間至少是大於80ns的,我們粗算一下的話,算為100ns,則一秒訪存次數最多也就達到10M次,而80386的主頻最高達到33MHz, 如果實時取指,內存已經達不到當時的CPU的需求了。
80386的緩存
由於當時內存的訪問速度已經開始涉後於CPU的速度,用戶要麼花大價錢買最快的內存,要麼接入一個外部Cache,要麼採用直接用慢速度內存而使CPU的性能無法達到最大化。80386本來是想到L1 Cache放在CPU內部的,然後最終沒有做成,轉而支持外部Cache。80486做到了將L1 Cache(8KB)放到CPU內部,同時支持外接L2 Cache。
直到Pentium時代,由於Pentium採用了雙路執行的超標量結構,有2條並行整數流水線,需要對數據和指令進行雙重的訪問,為了使得這些訪問互不干涉,於是出現了8K數據Cache和8K指令Cache,即L1分指令Cache和數據Cache, 並且可以同時讀寫,不過L2還是外部的,接著出現的Pentium Pro為了提高性能,把L2內嵌了,到此為止,就確定了現代緩存的基本模式了,並一直沿用至今。
Cache能要發揮作用依賴於CPU訪問數據時的所謂數據局布性,即如果你現在訪部的是地址是A1,那麼你有很大的概率接下來會訪問A1前後的數據。因此,當CPU檢測到你訪問了A1上的數據之後,可以把A1附近的數據先取到Cache中來,由於Cache的訪問速度很快,如果你下次訪問的數據真的是已經取到Cache中的數據,那麼這次訪存就變得非常的快。
推薦閱讀: