處理器體系結(jié)構(gòu)概述

現(xiàn)代微處理器可以稱得上是人類創(chuàng)造出的最復雜的系統(tǒng)之 谐算。一塊手指甲大小的硅片上熟尉,可以容納一個完整的高性能處理器、大的高速緩存洲脂,以及用來連接到外部設備的邏輯電路斤儿。從性能上來說,今天在 塊芯片上實現(xiàn)的處理器巳經(jīng)使 20 年前價值 1000 萬美元恐锦、房間那么大的超級計算機相形見細了往果。即使是在像手機、導航系統(tǒng)和可編程恒溫器這樣的日常設備中的嵌入式處理器一铅,也比早期計算機開發(fā)者所能想到的強大得多陕贮。

到目前為止,我們看到的計算機系統(tǒng)只限于機器語言程序級潘飘。我們知道處理器必須執(zhí)行一系列指令肮之,每條指令執(zhí)行某個簡單操作,例如兩個數(shù)相加卜录。指令被編碼為由一個或多個字節(jié)序列組成的二進制格式戈擒。一個處理器支持的指令和指令的字節(jié)級編碼稱為它的指令集體系結(jié)構(gòu) (Instruction-Set Architecture, ISA)。不同的處理器“家族”艰毒,例如 Intel IA32 和 x86-64筐高、IBM/Freescale Power 和 ARM 處理器家族,都有不同的 ISA 。一個程序編譯成在一種機器上運行柑土,就不能在另一種機器上運行蜀肘。另外,同一個家族里也有很多不同型號的處理器稽屏。雖然每個廠商制造的處理器性能和復雜性不斷提高幌缝,但是不同的型號在 ISA 級別上都保持著兼容。一些常見的處理器家族(例如 x86-64) 中的處理器分別由多個廠商提供诫欠。因此涵卵, ISA 在編譯器編寫者和處理器設計人員之間提供了一個概念抽象層,編譯器編寫者只需要知道允許哪些指令荒叼,以及它們是如何編碼的轿偎;而處理器設計者必須建造出執(zhí)行這些指令的處理器。

本章將簡要介紹處理器硬件的設計被廓。我們將研究一個硬件系統(tǒng)執(zhí)行某種 ISA 指令的方式坏晦。這會使你能更好地理解計算機是如何工作的,以及計算機制造商們面臨的技術(shù)挑戰(zhàn)嫁乘。一個很重要的概念是昆婿,現(xiàn)代處理器的實際工作方式可能跟 ISA 隱含的計算模型大相徑庭。ISA 模型看上去應該是順序指令執(zhí)行蜓斧,也就是先取出一條指令仓蛆,等到它執(zhí)行完畢,再開始下一條挎春。然而看疙,與一個時刻只執(zhí)行一條指令相比,通過同時處理多條指令的不同部分直奋,處理器可以獲得更高的性能能庆。為了保證處理器能得到同順序執(zhí)行相同的結(jié)果,人們采用了一些特殊的機制脚线。在計算機科學中搁胆,用巧妙的方法在提高性能的同時又保待一個更簡單、更抽象模型的功能邮绿,這種思想是眾所周知的渠旁。在 Web 瀏覽器或平衡二叉樹和哈希表這樣的信息檢索數(shù)據(jù)結(jié)構(gòu)中使用緩存,就是這樣的例子斯碌。

你很可能永遠都不會自己設計處理器一死。這是專家們的任務,他們工作在全球不到 100 家的公司里傻唾。那么為什么你還應該了解處理器設計呢?

  • 從智力方面來說,處理器設計是非常有趣而且很重要的冠骄。學習事物是怎樣工作的有其內(nèi)在價值伪煤。了解作為計算機科學家和工程師日常生活一部分的一個系統(tǒng)的內(nèi)部工作原理(特別是對很多人來說這還是個謎),是件格外有趣的事情凛辣。處理器設計包括許多好的工程實踐原理抱既。它需要完成復雜的任務,而結(jié)構(gòu)又要盡可能簡單和規(guī)則扁誓。
  • 理解處理器如何工作能幫助理解整個計算機系統(tǒng)如何工作防泵。在第 6 章,我們將講述存儲器系統(tǒng)蝗敢,以及用來創(chuàng)建很大的內(nèi)存映像同時又有快速訪問時間的技術(shù)捷泞。看看處理器端的處理器——內(nèi)存接口寿谴,會使那些講述更加完整锁右。
  • 雖然很少有人設計處理器,但是許多人設計包含處理器的硬件系統(tǒng)讶泰。將處理器嵌人到現(xiàn)實世界的系統(tǒng)中咏瑟,如汽車和家用電器,已經(jīng)變得非常普通了痪署。嵌入式系統(tǒng)的設計者必須了解處理器是如何工作的码泞,因為這些系統(tǒng)通常在比桌面和基于服務器的系統(tǒng)更低抽象級別上進行設計和編程。
  • 你的工作可能就是處理器設計狼犯。雖然生產(chǎn)處理器的公司很少浦夷,但是研究處理器的設計人員隊伍已經(jīng)非常巨大了,而且還在壯大辜王。一個主要的處理器設計的各個方面大約涉及 1000 多人劈狐。

本章首先定義一個簡單的指令集,作為我們處理器實現(xiàn)的運行示例呐馆。因為受 x86-64指令集的啟發(fā)肥缔,它被俗稱為 "x86",所以我們稱我們的指令集為 "Y86-64" 指令集汹来。與 x86-64 相比续膳,Y86-64 指令集的數(shù)據(jù)類型、指令和尋址方式都要少一些收班。它的字節(jié)級編碼也比較簡單坟岔,機器代碼沒有相應 x86-64 代碼緊湊,不過設計它的 CPU 譯碼邏輯也要簡單一些摔桦。雖然 Y86-64 令集很簡單社付,它仍然足夠完整承疲,能讓我們寫一些處理整數(shù)的程序。設計一個實現(xiàn) Y86-64 的處理器要求 我們解決許多處理器設計者同樣會面對的問題鸥咖。

接下來會提供一些數(shù)字硬件設計的背景燕鸽。我們會描述處理器中使用的基本構(gòu)件塊,以及它們?nèi)绾芜B接起來和操作啼辣。這些介紹是建立在第 2 章對布爾代數(shù)和位級操作的討論的基礎上的啊研。我們還將介紹一種描述硬件系統(tǒng)控制部分的簡單語言, HCL(Hardw re Control Language, 硬件控制語言)鸥拧。然后党远,用它來描述我們的處理器設計。即使你已經(jīng)有了一些邏輯設計的背景知識富弦,也應該讀讀這個部分沟娱,用以了解我們的特殊符號表示方法。

作為設計處理器的第一步舆声,我們給出一個基于順序操作花沉、功能正確但是有點不實用的 Y86-64 處理器。這個處理器每個時鐘周期執(zhí)行一條完 Y86-64 指令媳握。所以它的時鐘必須足夠慢碱屁,以允許在一個周期內(nèi)完成所有的動作。這樣一個處理器是可以實現(xiàn)的蛾找,但是它的性能遠遠低于同樣的硬件應該能達到的性能娩脾。

以這個順序設計為基礎,我們進行一系列的改造打毛,創(chuàng)建一個流水線化的處理器 (pipelined processor)柿赊。這個處理器將每條指令的執(zhí)行分解成五步,每個步驟由一個獨立的硬件部分或階段 (stage) 來處理幻枉。指令步經(jīng)流水線的各個階段碰声,且每個時鐘周期有一條新指令進入流水線。所以熬甫,處理器可以同時執(zhí)行五條指令的不同階段胰挑。為了使這個處理器保留 Y86-64 ISA 的順序行為,就要求處理很多冒險沖突 (hazard) 情況椿肩,冒險就是一條指令的位置或操作數(shù)依賴于其他仍在流水線中的指令瞻颂。

我們設計了一些工具來研究和測試處理器設計。其中包括 Y86-64 的匯編器郑象、在你的機器上運行 Y86-64 程序的模擬器贡这,還有針對兩個順序處理器設計和一個流水線化處理器設計的模擬器。這些設計的控制邏輯用 HCL 符號表示的文件描述厂榛。通過編輯這些文件和重新編譯模擬器盖矫,你可以改變和擴展模擬器行為丽惭。我們還提供許多練習,包括實現(xiàn)新的指令和修改機器處理指令的方式炼彪。還提供測試代碼以幫助你評價修改的正確性吐根。這些練習將極大地幫助你理解所有這些內(nèi)容正歼,也能使你更理解處理器設計者面臨的許多不同的設計選擇辐马。

網(wǎng)絡旁注 ARCH:VLOG 給出了用 Verilog 硬件描述語言描述的流水線化的 Y86-64 處理器。其中包括為基本的硬件構(gòu)建塊和整個的處理器結(jié)構(gòu)創(chuàng)建模塊局义。我們自動地將控制邏輯的 HCL 描述翻譯成 Verilog 喜爷。首先用我們的模擬器調(diào)試 HCL 描述,能消除很多在硬件設計中會出現(xiàn)的棘手的問題 萄唇。給定一個 Verilog 描述檩帐,有商業(yè)和開源工具來支持模擬和邏樣合成 (logic synthesis),產(chǎn)生實際的微處理器電路設計另萤。因此湃密,雖然我們在此花費大部分精力創(chuàng)建系統(tǒng)的圖形和文字描述,寫軟件的時候也會花費同樣的精力四敞,但是這些設計能夠自動地合成泛源,這表明我們確實在創(chuàng)建一個能夠用硬件實現(xiàn)的系統(tǒng)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末忿危,一起剝皮案震驚了整個濱河市达箍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌铺厨,老刑警劉巖缎玫,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異解滓,居然都是意外死亡赃磨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門洼裤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來邻辉,“玉大人,你說我怎么就攤上這事逸邦《髋妫” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵缕减,是天一觀的道長雷客。 經(jīng)常有香客問我,道長桥狡,這世上最難降的妖魔是什么搅裙? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任皱卓,我火速辦了婚禮,結(jié)果婚禮上部逮,老公的妹妹穿的比我還像新娘娜汁。我一直安慰自己,他們只是感情好兄朋,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布掐禁。 她就那樣靜靜地躺著,像睡著了一般颅和。 火紅的嫁衣襯著肌膚如雪傅事。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天峡扩,我揣著相機與錄音蹭越,去河邊找鬼。 笑死教届,一個胖子當著我的面吹牛响鹃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播案训,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼买置,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了萤衰?” 一聲冷哼從身側(cè)響起堕义,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脆栋,沒想到半個月后倦卖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡椿争,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年怕膛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秦踪。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡褐捻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出椅邓,到底是詐尸還是另有隱情柠逞,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布景馁,位于F島的核電站板壮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏合住。R本人自食惡果不足惜绰精,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一撒璧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧笨使,春花似錦卿樱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至最爬,卻和暖如春涉馁,著一層夾襖步出監(jiān)牢的瞬間门岔,已是汗流浹背爱致。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留寒随,地道東北人糠悯。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像妻往,于是被迫代替她去往敵國和親互艾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容