中央處理器單元

cpu的發展
4bit
 Intel 4004
8bit
Intel 8008、Intel 8086、Z-80
16bit
Intel 8088、80286,Motorola 68000、68020
32bit
Intel 80386、80386SX 、Intel 80486、80486DX
AMD 80386、80486,Motorola 68030、68040
64bit
Intel Pentium、Pentium PRO、Pentium II、Pentium III
AMD K6、K7,Motorola Power PC 601、603、620

中央處理器的三個組成元件
register(暫存器):中央處理器內部的記憶元件
CU(控制單元):依程式發出控制訊號
ALU(算術邏輯運算單元):提供計算功能

……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………

register
1存取速度極快,數量越多則中央處理器的執行效能越高
2是中央處理器內部的記憶體位罝,能被機器語言或組合語的指令直接指出或隱含使用
register直接與bus(匯流排)連接,可根據此分為:
 位址相關 : PC,MAR,BAR,IAR,…
 資料相關 : IR,MDR,ACC,…
 控制相關 : flag register,program status register,…
暫存器主要讓CU和ALU在執行的過程中使用,可根據此分為:
 CU相關 : IR,PC,MAR,MDR,program status register,…
 ALU相關 : ACC,flag register

基本的register
IR(instruction register,指令暫存器):用來存放正在執行的指令
PC(program counter,程式計數器):用來存放下一個將被執行指令的位址
MAR(memory address register,記憶體位址暫存器):存放主記憶體位址
MBR(memory buffer register,記憶體緩衝暫存器):存放欲寫入的字組或剛讀取的字組
特殊功能的register
MDR(memory data register,記憶體資料暫存器):存放由主記憶體單元read(讀取)的指令和資料或write(寫入)到主記體單元的計算結果
ACC(accumulator,累加暫存器):充當算術邏輯單元在執行過程的工作區
IAR(index address register,索引暫存器):用來提供索引定址法的定址模式
BAR(base address register,基底暫存器):內含程式的起始位址,用來提供基底相對定址法的定址模式
valid area register(有效區域暫存器):防止程式執行時,對主記憶單元的存取超出被允許的範圍
page control register(頁控制暫存器):用來提供virtual memory(虛擬記憶體)的定址模式
linkage register(連結暫存器):呼叫副程式時用來存放return address(回歸位址)
flag register(旗標暫存器):表示計算結果的狀態
clock register(計時暫存器):用來存放time-of-day(日期時間),cycles used(週期使用個數)…等與系統時間有關的訊息
input/output register(輸入/輸出暫存器):用來充當主記憶體單元和I/O processor(輸入/ 輸出處理器)之間的資料傳送的工作區
interrupt register(中斷暫存器):在特殊情況發生時,發出一個中斷信號
priority control regiser(優先權控制暫存器):用來決定一些由外部送到中央處理器的要求是否需要馬上處理

………………………………………………………….

instruction cycle指令週期
一個指令的完整執行過程,包括兩大階段,五個步驟
fetch phase(抓取階段)
 IF(instruction fetch,指令抓取):會用到主記憶體
 ID(instruction decode,指令解碼)
excution phase(執行階段)
 OF(operand fetch,運算元抓取):會用到主記憶體
 IE(instruction execution,指令執行)
 WB(write back,回寫結果):會用到主記憶體

RISC的instruction cycle
I-time(instruction time)
 IF(instruction fetch,指令抓取):會用到主記憶體
 instruction decode and register file read(解碼與暫存器檔案讀取)
E-time(execution time)
 EX(execution or address calculation,指令執行或是有效位址計算)
 data memory access(資料記憶體存取):會用到主記憶體
 write back to register file(暫存器檔案回寫)

用register transfer(暫存器轉移)符號表示M[Z]=M[X]+M[Y]的instruction cycle
ps:M[Z]=M[X]+M[Y],就是將主記憶體位址X與位址Y內的資料相加,並將結果存到主記憶體位址Z
IF: 1 MAR
ID: 1 DECODER < IR
OF:
 抓取位址x內的資料 1 MAR,  4 AC
 抓取位址y內的資料 1 MAR,  4 ALU
IE: 1 ALU<-add-CU ,  2 AC
WB: 1 MDR<-write-CU
ps:發出read控制信號=memory<-read-CU

不可或缺的指令
資料運算指令:最複雜
資料搬動指令
流程控制指令:最簡單
ps:不同指令在fetch phase所完成的動作是相同的,但指令功能不同在excution phase就有所不同………………………………………………………….

instruction pipeline指令管線
中央處理器採此設計是十分符合cost/performance(成本效益)
pipelining管線作業 說明:
 1把要執行的工作進行切割,分成一組可以同步執行的子工作,各子工作在使用一個獨立的硬體階段電路加以執行
 2管線內部被填滿時,則每隔一個管線週期,即可完成一件工作,此時為CPI可下降為1
ps:CPI的最佳情況是1
優點:提升效能ex:以下是執行4道指令的空間時間表

時間1時間2時間3時間4時間5時間6
硬體階段3指令1指令2指令3指令4
硬體階段2指令1指令2指令3指令4
硬體階段1指令1指令2指令3指令4

各指令被切成3個小指令,各小指令使用獨立的硬體階段加以執行
在時間3,管線內部被填滿,完成指令1,過了一個管線週期到時間4,完成指令2,以此類推,最後完成所有指令

管線作業所需的3個硬體架構:
1硬體階段:
各硬體階段必須
1提供對應的子工作所需的功能
2能獨立地同步執行
管線作業架構內含多個硬體階段電路,硬體階段個數就稱為pipeline depth(管線深度)
1pipeline depth越大,表示各硬體階段完成子工作所需的時間越短,執行效能就越好
2當pipeline depth增加超過一個臨界值,效能則不升反降
ps:若管線深度為k,通常效能只會增快sqrt(k)倍

ps:若是80486的設計,則提供五個階段的指令管線,分別是
fetch -> decode1 -> decode2 -> execute -> writeback

2介面暫存器
各硬體階段間的緩衝區,用來存放各硬體階段產生的結果,因為不同的硬體階段完成對應的子工作所需要的時間並不相同

3同步計時器
在每個管線週期發出synchronization signal(同步信號),同時作用於所有的介面暫存器
ps:介面暫存器在收到synchronization signal後,就會被驅動而將內部存放的資料送到對應的硬體階段
ps:管線週期就是同步計時器計時週期,管線週期的長度=最慢的硬體階段的執行時間+介面暫存器的延遲
ex:有4個硬體階段分別耗時40ns,50ns,60ns,70ns,介面暫存器的延遲是10ns
則管線週期時間=max{40,50,60,70}+10=80ns

………………

計算管線作業的效能提昇
公式:指令管線所需時間=(指令個數+(硬體階段個數-1))*管線週期時間
ex:a pipeline machine has 4 stages ,管線週期時間=90ns,執行10 instructions
指令管線所需時間=(10+(4-1))*90ns=1170ns
公式:pipeline speedup(管線作業的效能提昇)=未使用管線作業所需的執行時間/使用管線所需的執行時間
ex:有4個硬體階段,各耗時25ns,不考慮介面暫存器延遲,若執行100道指令,則
未使用管線作業的執行時間=100*(25+25+25+25)=10,000ns
使用管線作業的執行時間=103*25=2,575ns
speedup=10,000/2,575=3.88
ex:有4個硬體階段,各耗時25ns,介面暫存器延遲15ns,若執行100道指令,則
未使用管線作業的執行時間=100*(25+25+25+25)=10,000ns
使用管線作業的執行時間=103*(25+15)=4,120ns
speedup=10,000/4,120=2.43
ex:有4個硬體階段分別耗時10ns,40ns,25ns,25ns,介面暫存器延遲15ns,若執行100道指令,則
未使用管線作業的執行時間=100*(25+25+25+25)=10,000ns
使用管線作業的執行時間=103*(max{10,40,25,25}+15)=5,665ns
speedup=10,000/5,665=1.77
ex:有n個stage,k個task
speedup=k*n/(k+n-1)

顯示管線作業的效能提昇效率
公式:efficiency(管線效率)=pipeline speedup/pipeline depth*100%
ex:pipeline speedup=3.88,pipeline depth=4
則efficiency=3.88/4*100%=97%

指令管線的平均管線週期個數
公式:pipeline CPI=ideal pipeline CPI+(structural stalls)+(control stalls)+(RAW stalls+WAR stalls+WAW stalls)

………………

管線作業效能無法到最佳狀況的原因
工作切割不平均,管線危機
ex:記憶體存取的衝突,指令間存在data dependency(資料相依),分支指令,中斷信號,呼叫副程式指令,介面暫存器的延遲…等
ps:若管線深度為k,通常效能只會增快sqrt(k)倍

管線危機
在指令執行時,管線無法完全被填滿,而造成一些管線週期損失的情況
分為3大類:
control hazard(控制危機)
執行非循序指令時,會讓管線內部的其它指令不能繼續被執行,需必須加以清除,而造成管線週期的損失
常見的有:分支指令,副程式呼叫指令,中斷信號
data hazard(資料危機)
管線內部指令間如果存在data dependency,則可能無法同時被執行而被迫暫停相關指令的執行,或加入一些NOP,而造成管線週期的損失
常見的有:WAR,RAW,WAW
structure hazard(結構危機)
硬體資源不足使得管線內部的指令不能同時被執行,需必須暫停相關相關指令的執行,或加入一些NOP,而造成管線週期的損失
常見的有:記憶體的存取衝突
ps:NOP(no operation instruction,不運算指令)

分支指令解決方式:
硬體方式(用在條件分支指令):
 instruction buffer(指令緩衝區):將多個可能同時執行的指令存放到佇列中,在根據分支條件是否成立,選取其中一個指令執行即可避免損失
 branch predict(分支預測)的電路:對於條件分支指令進行條件的預測,如果預測正確就可避免損失
  靜態預測:遇到條件分支指令時,固定以條件成立或不成立,兩者其中之一來處理
  動態預測:根據指令執行的過程中,條件分支指令的條件成立與否的情況,決定預測值的選擇
軟體方式(用在無條件分支指令):
 delayed branch(延遲分支):用compiler(翻譯器)找出程式中出現分支指令的地方,在改變分支指令的順序來避免損失

data dependency解決方式:
硬體方式:
 internal forward(內部資料前送)電路:
軟體方式:
 pipeline schedule(管線指令規畫):使用compiler找出指令間出現data dependency的地方,再改變指令順序

data dependency有以下三種
flow dependency:raw(read after write,寫入後的讀取)
output dependency:waw(write after write,寫入後的寫入)
anti-dependency:war(write after read,讀取後的寫入)
ex:
s1:a=b+c
s2:c=b*a
s3:s=0
s4:for(i=a;i<=100;i++)s=s+s[i]
s5:if(s>1000)then c=c*2
因s1的a會被s2和s4讀取,因此具有flow dependency
因s2的c會被s5在寫入,所以具有output dependency
因s1讀取的c會被s2和s5寫入,所以具有anti-dependency

……………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………

算術邏輯運算單元

1提供資料計算的功能,可執行算術運算和邏輯運算
2配合flag register可提供條件判斷的功能

相關暫存器有:
ACC(累加暫存器)

1中央處理器內部若擁有多個累加暫存器當成工作區,則計算效能提昇
2大多數中央處理器的設計,都允許任何一般目的暫存器也可充當累加暫存器的功能
flag register(旗標暫存器)
表示計算的狀態,且內含多個條件碼位元
算術運算和邏輯運算會設定旗標暫存器的條件碼
條件碼被用來當成條件判別的依據,並提供條件分支指令進行分支條件的測試
包括:
sign flag(符號旗標):用來表示計算結果是否為負的條件旗標,當結果小於0則sign flag會被設定為1
carry flag(進位旗標):用來表示計算結果是否產生進位,若進位則carry flag會被設定為1
overflow flag(溢位旗標):用來表示計算結果是否產生溢位,若溢位則overflow flag會被設定為1
zero flag(零值旗標):用來表示計算結果是否為零的條件旗標,若等於0則zero flag會被設定為1
ex:判斷a=b是否成立
則先a-b,若zero flag為1則a=b成立
ex:判斷a>b是否成立
則先a-b,若zero flag和sign flag皆為0,則a>b成立

…………………………………………………………………………………………………………………………….
…………………………………………………………………………………………………………………………….

控制單元
設計方法:
硬體線路控制:優點,執行效能高;缺點,不易設計,維護困難;缺點,製造成本高
適合用在較簡單的控制單元,如RISC的控制單元
微程式控制:優點,容易設計,維護容易,製造成本低;缺點:執行效能差
適合用在較複雜的控制單元,如CISC的控制單元…………………………..

硬體線路控制常用的做法有
1state table method(狀態表格法)
2delay element method(延遲元件法)
3sequence counter method(序列計數器法):最簡單的控制單元,主要組成元件有
decoder(解碼器)與encoder(編碼器):送出控制信號
step counter(步驟計數器)與計時器:用作instruction cycle
指令暫存器,旗標暫存器,外界控制信號,…等:輸入狀態給decoder和encoder

………….

微程式控制做法:
將控制信號表示成micro instruction的形式,並燒錄在microprogram memory中,組成元件有:
microprogram memory(微程式記憶體):也稱control memory(控制記憶體),用來儲存micro instruction
uPC(micro program counter,微程式計數器):用來存放下一個要讀取的微指令位址的暫存器
micro program(微程式):儲存在microprogram memory內部的程式
每個機器指令都有一個對應的micro program,每個micro program都內含多個micro instruction
ps:micro instruction(微指令):內含一個或多個控制信號,用來驅動控制信號所對應的micro operation,也稱control word(控制字組)
ps:micro operation(微運算):由一個控制信號所驅動的運算,也是電子計算機內部最基本的運算
 ex:兩個register間內容的傳送或接收,或ALU進行一個加法的算術運算
ps:micro code(微程式碼):燒錄在microprogram memory的一群控制信號或程式碼
 ex:BIOS

補充:nanoprogrammed control(奈程式控制)
使用兩階層控制記憶體的設計,其中一個是微程式記憶體,另一個則是nanoprogram memory(奈程式記憶體)
優點:降低控制記憶體的整體空間
  因為可將多個微程式中具有相同功能的部位,使用一個奈程式表示,而微程式中只需表示對應的奈程式位址,此概念就類似軟體中副程式功用
缺點:執行效能比微程式控制差
 因為要發出控制信號必須先到微程式記憶體存取微指令後,再到奈程式記憶體存取奈指令

micro instruction依編碼程度分為
horizontal(水平)微指令
  優點:執行效能佳,因為允許一個指令同時發出多信號,減少微程式記憶體存取微指令的次數,而且不需解碼
  缺點:需要較多的空間且大部份是浪費的,因為各控制信號都對應到水平微指令中的一個位元,使得微指令的長度太長
  指令長度:若控制信號個數為n,則水平微指令的長度就需n個位元
  適合:設計上允許平行地使用電腦資源的電子計算機
ex:若有5個水平微指令,控制信號個數分別是4,4,3,11,9
則水平微指令的長度=4+4+3+11+9=31bits
vertical(垂直)微指令
  優點:不浪費微程式記憶體空間,因為各垂直微指令內部是控制信號的編碼,使得微指令長度最短
  缺點:效能差,因為一個指令只能產生一個控制信號,而且需要額外的解碼電路對微指令進行解碼
  指令長度:若控制信號的個數為n,則一個垂直微指令的長度為ceil(log2(n))個位元
  適合:設計上不允許平行地使用電腦資源的電子計算機
ex:若有5個垂直微指令,控制信號個數分別是4,4,3,11,9
將各指令控制信號個數分別放入ceil(log2(n)),分別得到3,3,2,4,4
則垂直微指令的長度=3+3+2+4+4=16bits
混合微指令
  微程式控制常用,是介於水平微指令與垂直微指令之間的格式
 做法: 1將不會同時出現的控制信號分在同一組, 2對同一組的控制信號進行編碼
 優點:減少微指令的長度,也可產生多個控制信號

能夠保存微指令的平行性並且可以將微指令的長度最小化的方法
1,決定所有可能的MCC(maximal compatibility classes,最大相容組)
2,決定MMC的mini MCC cover(最小化覆蓋)

………………………………

cpu排程
分為
preemptive:process一但佔用了CPU,可中斷並讓其他process佔用CPU
平均等待時間較短
Context switching較多
reponse time不可預期
ex:RR,SJF,priority scheduling
non-preepmtive
:process一但佔用了CPU,它就會一直使用直到終止或請求I/O動作
平均等待時間較長
Context switching較少
response time可預期
ex:FCFS,SJF,priority scheduling

常見的cpu排程演算法
FCFS(first come first served)
RR(round robin)
SJF(short job first):分為preemptive和non-preemptive
priority scheduling::分為preemptive和non-preemptive
multilevel queue:每個queue可由不同的排程方式,如fcfs,rr
multilevel feedback queue:和multilvel queue類似,但process可在各queue間移動

………………………………

提高cpu性能技術有
Superscalar(超純量架構):
允許一個計時週期信號同時啟動多個指令的執行,提供instruction-level parallelism

HT(HyperThreading,超執行緒):
利用特殊的硬體指令把兩個邏輯內核類比成兩個物理晶片,讓單個處理器都能使用線程級平行計算

OOOE(Out-Of-Order Execution,超緒執行,非循序執行,亂序執行):
採用了允許將多條指令不按程式規定的順序分開發送給各相應電路單元處理的技術

……………………………….

single chip(單晶片)
將記憶體、I/O、計時器、計數器、串列傳輸介面、A/D轉換器……等等全部濃縮到CPU裏面,形成一顆IC
常用於控制方面,在工業界使用普遍。
ex:小型自動化機器儀表等
ps:常用的單晶片有Intel公司的MCS系列如8751、8752、8051等。

FPU(Floating point Processing Unit,浮點運算單元)
專門用來處理浮點數值的運算,用於輔助CPU增快處理速度,須配合CPU使用
ex:80287,80387
ps:486DX、Pentium、P6以後的CPU,已內建有浮點運算能力,不需外加 FPU

GPU(Graphic Processing Unit,繪圖處理單元)
專門用於處理繪圖指令的處理單元,用於輔助CPU增快處理速度,須配合CPU使用

晶圓
一種用來製造IC(積體電路)的材料,由半導體矽等元素組成
製造過程:首先把原始材料做成像柱子一般的「矽晶柱」,再切成一片片的圓盤狀,就稱為晶圓
規格:依直徑大小分有八吋,十二吋,十六吋,直徑越大所能做成的IC元件數量就會越多;
用途:在晶圓表面進行設計與蝕刻等過程,就可以製造出各種功能的IC晶片,ex:CPU,記憶體,…等

chipset(晶片組)
是一種電路模組化的產品,將數個不同功能的電路製作在一個晶片上,可有效的簡化電路結構
晶片組的組成通常包括中斷控制器、計時器或計數器、DMA記憶體直接存取、I/O週邊控制器等
更完整的甚至還包括音效卡,顯示卡