CPU基礎(chǔ)
CPU即處理器,是計(jì)算機(jī)中控制數(shù)據(jù)操控的電路。它主要由三部分構(gòu)成:算術(shù)/邏輯單元、控制單元和寄存器單元。它們的作用分別為執(zhí)行運(yùn)算、協(xié)調(diào)機(jī)器活動以及臨時存儲。
cpu
CPU與主存
CPU中的寄存器分為通用寄存器和專用寄存器,通用寄存器用于臨時存放CPU正在使用的數(shù)據(jù),而專用寄存器用于CPU專有用途,比如指令寄存器和程序計(jì)數(shù)器。CPU與主存的通過總線進(jìn)行通信,CPU通過控制單元能夠操作主存中的數(shù)據(jù)。
執(zhí)行兩個數(shù)值相加的過程大致為:從主存讀取第一個值放到寄存器1->從主存讀取第二個值放到寄存器2->兩個寄存器保存的值作為輸入送到加法電路->將加法結(jié)果保存到寄存器3->控制單元將結(jié)果放到主存中。
cpu與主存
程序等同數(shù)據(jù)
原始的計(jì)算機(jī)并不像現(xiàn)代計(jì)算機(jī)一樣將程序保存起來,以前的人們只對數(shù)據(jù)進(jìn)行保存,而設(shè)備執(zhí)行的步驟作為計(jì)算機(jī)的一部分而被內(nèi)置在控制單元中。這樣就很不靈活,最多只能通過重新布線來提升靈活性。將程序與數(shù)據(jù)視作相同本質(zhì)是很大的思想突破,因?yàn)槿藗円恢闭J(rèn)為它們是不同的事物,數(shù)據(jù)應(yīng)該存放在主存中而程序應(yīng)該屬于CPU的一部分。
將程序作為數(shù)據(jù)一樣保存在主存中大有好處,控制單元能夠從主存讀取程序,然后對它們解碼并執(zhí)行。當(dāng)我們要修改執(zhí)行程序時可以在計(jì)算機(jī)的主存中修改,而不必對CPU更改或重新布線。
指令系統(tǒng)
程序包含了大量的機(jī)器指令,CPU對這些指令進(jìn)行解碼并執(zhí)行。CPU分為兩類體系:精簡指令集計(jì)算機(jī)(RISC)和復(fù)雜指令集計(jì)算機(jī)(CISC)。RISC提供了最小的機(jī)器指令集,計(jì)算機(jī)效率高速度快且制造成本低。而CISC提供了強(qiáng)大豐富的指令集,能更方便實(shí)現(xiàn)復(fù)雜的軟件。
機(jī)器指令分為三類:數(shù)據(jù)傳輸類、算術(shù)/邏輯類與控制類。
數(shù)據(jù)傳輸類指令用于將數(shù)據(jù)從一個地方移動到另一個地方。比如將主存單元的內(nèi)容加載到寄存器的LOAD指令,反之將寄存器的內(nèi)容保存到主存的STORE指令。此外,CPU與其它設(shè)備(鍵盤、鼠標(biāo)、打印機(jī)、顯示器、磁盤等)進(jìn)行通信的指令被稱為I/O指令。
算術(shù)/邏輯類指令用于讓控制單元請求在算術(shù)/邏輯單元內(nèi)執(zhí)行運(yùn)算。這些運(yùn)算包括算術(shù)、與、或、異或和位移等。
控制類指令用于指導(dǎo)程序執(zhí)行。比如轉(zhuǎn)移(JUMP)指令,它包括無條件轉(zhuǎn)移和條件轉(zhuǎn)移。
指令格式
指令寄存器與程序計(jì)數(shù)器
CPU將主存的指令加載進(jìn)來解碼并執(zhí)行,其中涉及兩個重要寄存器:指令寄存器與程序計(jì)數(shù)器。指令寄存器英語存儲正在執(zhí)行的指令,而程序計(jì)數(shù)器則保持下一個待執(zhí)行的指令地址。
CPU向主存請求加載程序計(jì)數(shù)器指定的地址的指令,將其存放到指令寄存器中,加載后將程序計(jì)數(shù)器的值加2(假如指令長度為2個字節(jié))。
指令如何執(zhí)行
比如我們要計(jì)算11+22,假設(shè)過程為:將主存地址為00的內(nèi)容加載到寄存器1中->將主存地址為01的內(nèi)容加載到寄存器2中->將寄存器1和寄存器2的數(shù)據(jù)相加并將結(jié)果保存到寄存器3->將寄存器3的結(jié)果存儲到主存地址為02的位置->停止。
這個過程CPU涉及到四個操作:加載(load)、存儲(store)、加法(add)和停止(halt)??梢詫@些操作進(jìn)行編碼,比如可以分別用1、2、3、0000表示。
1100 1201 3312 2302 0000
指令執(zhí)行
控制器
CPU與其他設(shè)備的通信一般通過控制器來實(shí)現(xiàn),控制器可能在主板上,也可能以電路板形式查到主板??刂破鞅旧砜梢钥闯墒切⌒陀?jì)算機(jī),也有自己簡單的CPU。以前每連接一種外設(shè)都需要購買對應(yīng)的控制器,而現(xiàn)在隨著通用串行總線(USB)成為通用的標(biāo)準(zhǔn),很多外設(shè)都可以直接用USB控制器作為通信接口。每個控制器都連接在總線上,通過總線進(jìn)行通信。
cpu與控制器
每個控制器可能被設(shè)計(jì)成對應(yīng)一組地址引用,主存則會忽略這些地址引用。當(dāng)CPU往這些地址上發(fā)送消息時,其實(shí)是直接穿過主存而到控制器的,操作的是控制器而非主存。這種模式稱為存儲映射輸入/輸出。此外,這種模式的另外一種實(shí)現(xiàn)可以在機(jī)器指令中提供特定的操作碼,專門用于與控制器通信,這樣的操作碼稱為I/O指令。
直接存儲器存取
直接存儲器存取(DMA)是一種提升外設(shè)通信性能的措施,CPU并非總是需要使用總線,在總線空閑的時間里控制器能夠充分利用起來。因?yàn)榭刂破鞫寂c總線相連接,而控制器又有執(zhí)行指令的能力,所以可以將CPU的一些工作分給控制器來完成。比如在磁盤中檢索數(shù)據(jù)時,CPU可以將告知控制器,然后由控制器找到數(shù)據(jù)并放到主存上,期間CPU可以去執(zhí)行其他任務(wù)。這樣能節(jié)省CPU資源。不過DMA會使總線通信更加復(fù)雜,而且會導(dǎo)致總線競爭問題??偩€瓶頸源自馮諾依曼體系結(jié)構(gòu)。