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