一文了解CPU是如何實(shí)現(xiàn)存儲(chǔ)的
為了了解CPU如何獲得其處理能力,讓檢查CPU的實(shí)際功能以及它與數(shù)據(jù)的接口方式。在數(shù)字電子學(xué)中,一切都由二進(jìn)制“位”表示。它是兩種可能狀態(tài)的基本表示。一個(gè)位可以表示零或一,對(duì)或錯(cuò)、向上或向下、接通或斷開(kāi)、關(guān)閉或任何其他雙向值。
在CPU中,“位”在物理上作為電壓電平傳輸。如果我們將多個(gè)“位”組合在一起,我們現(xiàn)在可以表示離散狀態(tài)的更多組合。例如,如果我們將八位組合在一起,我們形成所謂的字節(jié)。一個(gè)字節(jié)可以代表256個(gè)不同的狀態(tài),可以是用于表示數(shù)字。對(duì)于字節(jié),可以表示0到255之間的任何數(shù)字。但是在CPU中,我們?nèi)绾芜x擇表示數(shù)據(jù)完全具有延展性。同一字節(jié)也可以代表-128到127之間的數(shù)字。該字節(jié)的其他表達(dá)可能是顏色或聲音級(jí)別。當(dāng)我們將多個(gè)字節(jié)組合在一起時(shí),我們創(chuàng)建所謂的單詞。單詞以其位容量表示。創(chuàng)建處理器時(shí),其要處理的本機(jī)字長(zhǎng)構(gòu)成其架構(gòu)的核心。原始的Intel 4004處理器以4位字運(yùn)行。這意味著通過(guò)CPU傳輸?shù)臄?shù)據(jù)會(huì)傳入一次四位的大塊。通過(guò)使用更大的字長(zhǎng),我們可以表示更多的離散狀態(tài)因此數(shù)量更大。在所有表格中,數(shù)據(jù)可以帶入CPU內(nèi)部,其中最重要的是一個(gè)是指令。指令是數(shù)據(jù)的唯一位,它們被解碼并由CPU作為操作執(zhí)行。一個(gè)常見(jiàn)指令的示例是添加兩個(gè)單詞一起取值或從一個(gè)位置移動(dòng)一個(gè)數(shù)據(jù)字記憶到另一個(gè)位置。
CPU支持的指令的完整列表稱為它的指令集。每條指令的二進(jìn)制表示形式,其機(jī)器通常為代碼分配人類可讀的表示形式被稱為匯編語(yǔ)言。如果我們看大多數(shù)CPU的指令集,它們都傾向于專注于對(duì)數(shù)據(jù)執(zhí)行數(shù)學(xué)或邏輯運(yùn)算,測(cè)試條件或?qū)⑵鋸囊粋€(gè)位置移動(dòng)到內(nèi)存中的另一個(gè)位置。出于所有目的和目的,我們可以將CPU視為指令處理機(jī)。
他們通過(guò)以下三個(gè)基本步驟進(jìn)行操作,獲取,解碼和執(zhí)行。隨著CPU設(shè)計(jì)的發(fā)展,這三個(gè)步驟變得更加復(fù)雜并實(shí)施了擴(kuò)展此核心運(yùn)營(yíng)模式的技術(shù)。但是,為了充分欣賞這些進(jìn)步,讓我們先探索一下基本的CPU操作機(jī)制。
今天被稱為“經(jīng)典的精簡(jiǎn)指令集計(jì)算機(jī)”或[RISC]管道”,這種范例構(gòu)成了第一個(gè)CPU的基礎(chǔ)設(shè)計(jì)。在提取階段,CPU加載它將執(zhí)行的指令被執(zhí)行??梢詫PU視為存在于信息氣泡中。它從自身外部提取指令和數(shù)據(jù),執(zhí)行操作在自己的內(nèi)部環(huán)境中,然后將數(shù)據(jù)返回。此數(shù)據(jù)通常存儲(chǔ)在CPU外部的內(nèi)存中,該內(nèi)存稱為隨機(jī)存取存儲(chǔ)器或[RAM]。軟件指令和數(shù)據(jù)從以下位置加載到RAM中更多永久性資源。
當(dāng)CPU加載一個(gè)數(shù)據(jù)字時(shí),它通過(guò)請(qǐng)求RAM中某個(gè)位置的內(nèi)容。這稱為數(shù)據(jù)的地址。確定一次CPU可以處理的數(shù)據(jù)量通過(guò)其地址容量。例如,一個(gè)4位地址只能直接尋址16個(gè)數(shù)據(jù)位置。存在用于處理比CPU地址容量更多的數(shù)據(jù)的機(jī)制,但現(xiàn)在暫時(shí)忽略這些。數(shù)據(jù)來(lái)回移動(dòng)到RAM的機(jī)制稱為總線。CPU和RAM的每一位數(shù)據(jù)都有自己的通道,以容納數(shù)據(jù)字和地址字。這些分別稱為數(shù)據(jù)總線和地址總線。當(dāng)CPU發(fā)出RAM訪問(wèn)請(qǐng)求時(shí),將進(jìn)行內(nèi)存控制CPU的區(qū)域?qū)⒋鎯?chǔ)字加載到地址總線解決它希望訪問(wèn)的地址。然后,它觸發(fā)一條控制線,該信號(hào)線發(fā)出存儲(chǔ)器讀取請(qǐng)求。收到此請(qǐng)求后,RAM用內(nèi)容填充數(shù)據(jù)總線所請(qǐng)求的內(nèi)存位置。現(xiàn)在,CPU在總線上看到此數(shù)據(jù)。使用CPU將數(shù)據(jù)寫(xiě)入RAM的工作方式類似而是發(fā)布到數(shù)據(jù)總線。當(dāng)RAM收到“寫(xiě)”信號(hào)時(shí),數(shù)據(jù)內(nèi)容總線被寫(xiě)入地址總線所指向的RAM位置。要提取的存儲(chǔ)位置的地址存儲(chǔ)在CPU中,在一種稱為寄存器的機(jī)制中。寄存器是一個(gè)高速內(nèi)部存儲(chǔ)器字,它被用作寄存器。CPU操作的“記事本”。通常用作說(shuō)明的臨時(shí)數(shù)據(jù)存儲(chǔ)但也可以分配給重要的CPU功能,例如跟蹤正在RAM中訪問(wèn)的當(dāng)前地址。由于它們是先天設(shè)計(jì)在CPU硬件中的,因此大多數(shù)只有少數(shù)幾個(gè)寄存器。
它們的字長(zhǎng)通常與CPU的本機(jī)體系結(jié)構(gòu)耦合。一旦將一個(gè)內(nèi)存字讀入CPU,用于存儲(chǔ)的寄存器該字的地址(稱為程序計(jì)數(shù)器)將增加。在下一次提取時(shí),它將按順序檢索下一條指令。從RAM訪問(wèn)數(shù)據(jù)通常是CPU操作的瓶頸。這是由于需要與組件接口與CPU物理距離較遠(yuǎn)。在較舊的CPU上,這并不是什么大問(wèn)題,但是因?yàn)樗鼈冏兊酶?,?nèi)存訪問(wèn)的延遲成為一個(gè)關(guān)鍵問(wèn)題。提取指令后,解碼階段便開(kāi)始。在經(jīng)典的RISC架構(gòu)中,一個(gè)字的存儲(chǔ)形式完整的說(shuō)明。隨著CPU的發(fā)展,這種方法變得更加復(fù)雜。
解碼指令時(shí),單詞被分解為兩個(gè)部分稱為位域。這些稱為操作碼和操作數(shù)。操作碼是代表特定字符的唯一的一系列CPU內(nèi)的功能。操作碼通常會(huì)指示CPU將數(shù)據(jù)移至寄存器,然后移至寄存器和存儲(chǔ)器之間的數(shù)據(jù),執(zhí)行數(shù)學(xué)或邏輯功能在寄存器和分支上。當(dāng)指令引起指令改變時(shí)發(fā)生分支程序計(jì)數(shù)器的地址。這將導(dǎo)致下一次獲取在內(nèi)存中的新位置處發(fā)生反對(duì)到下一個(gè)順序地址。當(dāng)確?!疤D(zhuǎn)”到新程序位置時(shí),稱為無(wú)條件分支。在其他情況下,可以進(jìn)行測(cè)試以確定是否應(yīng)該發(fā)生“跳躍”。這稱為條件分支。觸發(fā)這些條件的測(cè)試通常是數(shù)學(xué)上的,如果寄存器或內(nèi)存位置小于或大于一個(gè)數(shù)字,或者為零或非零。分支允許程序做出決定,并且可以對(duì)CPU的功能至關(guān)重要。操作碼有時(shí)需要數(shù)據(jù)來(lái)對(duì)其執(zhí)行操作。指令的這一部分稱為操作數(shù)。操作數(shù)是背負(fù)在指令上的位,用作數(shù)據(jù)。在某些指令中,操作數(shù)未指定其值自我,但包含要訪問(wèn)的內(nèi)存中某個(gè)位置的地址。這在請(qǐng)求存儲(chǔ)字的操作碼中很常見(jiàn)加載到寄存器中。這被稱為尋址,并且可以得到更多。
在現(xiàn)代CPU中很復(fù)雜。由于以下原因,尋址可能會(huì)導(dǎo)致性能下降。需要“離開(kāi)” CPU,但是隨著CPU設(shè)計(jì)的進(jìn)步,這種情況得以緩解。一旦有了操作碼和操作數(shù),操作碼就可以通過(guò)表格和電路的組合,然后由控制單元進(jìn)行配置CPU的各個(gè)操作部分以執(zhí)行該操作。在某些現(xiàn)代CPU中,解碼階段不是硬連線的,可以編程。這允許更改指令的解碼方式以及CPU被配置為執(zhí)行。在執(zhí)行階段,將觸發(fā)現(xiàn)在配置的CPU這可能會(huì)在一個(gè)步驟或一系列步驟中發(fā)生取決于操作碼。
CPU執(zhí)行中最常用的部分之一是算術(shù)邏輯單元或ALU。該電路塊旨在接收兩個(gè)操作數(shù),并且對(duì)它們執(zhí)行基本算術(shù)或按位邏輯運(yùn)算。然后將結(jié)果與相應(yīng)的數(shù)學(xué)公式一起輸出標(biāo)志,例如結(jié)轉(zhuǎn),溢出或零結(jié)果。然后將ALU的輸出發(fā)送到寄存器或位置根據(jù)操作碼在內(nèi)存中。假設(shè)一條指令要求將10加到寄存器中將結(jié)果放入該寄存器。
CPU的控制單元將加載立即值指令進(jìn)入ALU,將寄存器的值加載到ALU中并連接ALU輸出到寄存器。在執(zhí)行觸發(fā)器上,添加完成并輸出加載到寄存器中。實(shí)際上,軟件精簡(jiǎn)到配置循環(huán)在CPU中相互交互的多組電路。在CPU中,這三個(gè)階段的操作連續(xù)不斷地循環(huán),使其工作通過(guò)指令的方式將計(jì)算機(jī)程序加載到內(nèi)存中。將這臺(tái)打環(huán)機(jī)粘合在一起是一個(gè)時(shí)鐘。時(shí)鐘是重復(fù)脈沖,用于同步CPU內(nèi)部機(jī)械及其與外部組件的接口。CPU時(shí)鐘速率是通過(guò)每秒的脈沖數(shù)或赫茲來(lái)衡量的。英特爾4004以740 KHz或每秒740,000脈沖的速度運(yùn)行?,F(xiàn)代CPU可以達(dá)到接近5GHz的時(shí)鐘速率,或者每秒50億個(gè)脈沖。
在較簡(jiǎn)單的CPU上,單個(gè)時(shí)鐘會(huì)觸發(fā)時(shí)鐘的提前。獲取,解碼和執(zhí)行階段。隨著CPU變得越來(lái)越復(fù)雜,這些階段可能需要花費(fèi)幾個(gè)時(shí)間時(shí)鐘周期完成。CPU的吞吐量,可以執(zhí)行的指令量一秒鐘確定它有多“快”。通過(guò)提高時(shí)鐘頻率,我們可以使處理器運(yùn)行通過(guò)其階段更快。但是,隨著我們變得越來(lái)越快,我們遇到了一個(gè)新問(wèn)題。時(shí)鐘周期之間的周期必須留出足夠的時(shí)間用于執(zhí)行的每種可能的指令組合。如果在指令周期之前發(fā)生新的時(shí)鐘脈沖完成,結(jié)果變得不可預(yù)測(cè),并且程序失敗。此外,增加時(shí)鐘速率具有增加的副作用。功耗和CPU中的熱量積聚導(dǎo)致文化績(jī)效的下降。更快,更高效地運(yùn)行CPU的戰(zhàn)斗主導(dǎo)了它的整個(gè)存在。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。