從4004到core i7:處理器的進化史 (3)-1—萬事開頭難
有了契約,整個解決方案就被分成了兩部分:硬件和軟件。只要其中的接口(interface)不變,兩邊其實都不大關(guān)心對面究竟在背地里搞什么名堂。我們經(jīng)常見到這種接口,它就是指令集(instruction set)。
本文引用地址:http://butianyuan.cn/article/221768.htm于是在軟件一方,人們漸漸覺得機器碼看起來實在是太詭異了,就出現(xiàn)了高級語言,讓編程這件非人類的事情盡量地向人類的自然語言靠攏。當(dāng)然,這一切都離不開編譯器(compiler)的支持。如今人們已經(jīng)離軟硬劃分的借口很遠了,遠到了軟件已經(jīng)出現(xiàn)了自己的一套哲學(xué)、思考問題的范式。
在CPU,也就是硬件的一方,人們的步伐看起來似乎要慢得多。畢竟,硬件是一件需要大量金錢和經(jīng)驗的工作,這導(dǎo)致它不可避免的不像軟件那么易于上手,從業(yè)者不那么人山人海。不過,我們已經(jīng)看到了至少3代的CPU,其中每一代的性能提升都是非常巨大的。我們將要看到,這種巨大的性能的提升,其本質(zhì)是集成度的極大提高,源動力是電路和器件層面的。和軟件相反,今天的“聰明”的CPU雄心勃勃,正在試圖越過曾經(jīng)神圣不可侵犯的契約,高效的完成一些以往只有編譯器才能完成的優(yōu)化工作。
上面的內(nèi)容說得有點遠了,我們再考慮回我們的小學(xué)算術(shù)題,只不過這一次完全從CPU的角度考慮,就是下面幾條指令:
load reg1, mem1
load reg2, mem2
add reg1,reg2,reg3
store mem3, reg3
其中我們假設(shè)1和2分別存在mem1和mem2里,運算結(jié)果存在mem3里
從上面的偽匯編碼,再結(jié)合算術(shù)的類比,我們想到:
我們必須有一張紙來記住題目和答案->CPU必須有存儲器(memory)、寄存器(register)的配合
我們必須會計算加法->CPU中必須有算術(shù)-邏輯單元(Arithmetic Logic Unit,ALU)。
我們需要理解紙上的符號->CPU需要有指令譯碼(instruction decode)器
紙上的符號被理解之后還要被我們轉(zhuǎn)移到腦海中至少短暫地被記住->CPU需要有與存儲器直接進行交涉的加載/存儲單元(load/store unit)
我們需要從試卷上的一大堆題目中選擇一道我們將要完成的題目->CPU需要有取指(instruction fetch)單元
上面的例子中我們已經(jīng)涉及到了幾乎全部的CPU子模塊。漏下的可能只是分支單元(branch),I/O單元(I/O controller),以及控制上面這么多邏輯的控制器(controller)了。我們得到了第一個CPU模型,正如第一代CPU設(shè)計者們用非常straightforward的思考建造的一樣。
以上我們從空間上討論了第一個CPU應(yīng)該有些什么單元,下面我再列一下從時序上來說一個指令執(zhí)行分為哪些階段:
IF = instruction fetch
ID = instruction decode
OC = operhand calculation
EX = execution
WB = result writeback
將上面這5個步驟老老實實重復(fù)一遍,一條指令就執(zhí)行完了。
注意上面的MR步驟對于存儲器的操作是只讀的,WB步驟對于存儲器的操作是只寫的。你解題的時候應(yīng)該不能擅自修改題目的運算數(shù),或者抄襲一個還不存在的答案吧!!
這第一個CPU模型雖然簡陋,卻能夠工作。我們后續(xù)將要討論的高性能處理器無不是處于對它的優(yōu)化改良而成。
c語言相關(guān)文章:c語言教程
評論