計算機系統結構總結_Instruction Set Architecture


Textbook:
《計算機組成與設計——硬件/軟件接口》    HI
《計算機體系結構——量化研究方法》           QR


這節我們來看CPU內部的一些東西。

 

Instruction Set Architecture

指令集是介於硬件(CPU microarchitecture / IO / ....)和軟件(compiler / OS / ....)之間的一個interface。硬件(486-586-PentiumPro)和軟件(Win98-WinXP)都會更新換代,但指令集很少變化(比如x86)。現在比較流行的是General-purpose register architecture,這也是我們重點學習的。早期還有stack architecture和accumulator architecture,不過已經不流行了...

Java VM:HI P89

 

Register

寄存器是在cpu內部的存儲單元,訪問簡單,速度也非常快。

和前面說的cache不同,寄存器是對軟件可見的(explictly managed)。比如下面的一段程序:

 1 void foo(){
 2     ....
 3 }
 4 
 5 void bar(){
 6     int a,b;
 7     a=233;
 8     foo();
 9     printf("%d\n", a);
10 }

foo()和bar()都可能會用滿所有的寄存器。那么在Line 8調用foo()之前,編譯器就要手動把bar()當前運行時寄存器的值備份一下(存到stack),等foo()結束后再還原回來。

 

Memory Addressing

指令可以分為以下幾類:

  • Load/Store就是在內存和寄存器之間搬運數據......
  • ALU operation是用來計算的。它操作數據的主要來源是寄存器
    • 在RISC中,ALU inst只能從寄存器中讀寫,不能讀內存地址。而在x86中一條指令最多可以讀寫1個內存地址

那么指令是如何進行memory addressing呢?要考慮如下幾個問題:

  1. Bytes addressed。即每個地址包含多少個byte。大多數情況下是一次讀一個byte(參考這張圖)。也有些奇怪的機器是一次讀一個word(多個bytes)
  2. Little/Big Endian
  3. Alignment。比如4bytes alignment表示每個數據的起始地址必須是4 bytes的倍數。

Addressing Mode:(PPT P6)

 

Control Flow Instructions

分支指令

 

幾種常見的ISA

CISC:硬件資源少,人類手些匯編的硬核年代......指令集比較復雜,並且提供一些復雜指令,以便讓program的匯編代碼量盡量小

RISC:此時硬件資源已經多了,編譯器技術也好一些了。因此需要只包括更簡單的指令(fixed length,涉及更少的hardware control),以便支持instruction-level parallelism。這樣即使需要的指令多了,但總體來看還是快不少。load-store architecture

但其實現在CISC和RISC差距已經沒有很大了......像CISC的x86指令集,也加入了很多RISC的特性。比如用RISC Engine來執行microcode(動態解碼后的CSIC指令)

 

RISC pipeline

PPT P14-

我們以Alpha為例來看看一個RISC ISA是怎樣設計的吧。

指令種類:可以分為RR、RI、Load/Store、Branch、Jump五種(PPT P14-P16)

為了執行這些指令,我們定義了一個五級的流水線:

 

  • IF:Fetch 32bit instructions,並送到instruction memory
  • ID:Decode Instruction(通過電路...),然后送到對應的component
  • EX:進行計算
  • MEM:(有可能)涉及到訪問內存
  • WB:將結果寫回寄存器(Reg Array)

我們分別看看這五種指令各自是如何執行的:

PPT P19-24

 

 

......


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM