【基礎知識】CPU 是如何工作的 |CPU 通過總線讀取內存的工作方式


一、簡單cpu  是如何工作 方式講解

CPU 的根本任務就是執行指令,對計算機來說最終都是一串由 0 和 1 組成的序列。CPU 從邏輯上可以划分成 3 個模塊,分別是控制單元、運算單元和存儲單元 。其內部架構如下:

 

 

 

 

 

 

 

首先吧cpu分成三塊

1.控制單元

2.存儲單元

【1】控制單元

控制單元是整個CPU的指揮控制中心,由指令寄存器IR(Instruction Register)、指令譯碼器ID(Instruction Decoder)和 操作控制器OC(Operation Controller) 等組成,對協調整個電腦有序工作極為重要。它根據用戶預先編好的程序,依次從存儲器中取出各條指令,放在指令寄存器IR中,通過指令譯碼(分析)確定應該進行什么操作,然后通過操作控制器OC,按確定的時序,向相應的部件發出微操作控制信號。操作控制器OC中主要包括:節拍脈沖發生器、控制矩陣、時鍾脈沖發生器、復位電路和啟停電路等控制邏輯。

【2】運算單元

運算單元是運算器的核心。可以執行算術運算(包括加減乘數等基本運算及其附加運算)和邏輯運算(包括移位、邏輯測試或兩個值比較)。相對控制單元而言,運算器接受控制單元的命令而進行動作,即運算單元所進行的全部操作都是由控制單元發出的控制信號來指揮的,所以它是執行部件。

【3】存儲單元

存儲單元包括 CPU 片內緩存和寄存器組,是 CPU 中暫時存放數據的地方,里面保存着那些等待處理的數據,或已經處理過的數據,CPU 訪問寄存器所用的時間要比訪問內存的時間短。采用寄存器,可以減少 CPU 訪問內存的次數,從而提高了 CPU 的工作速度。寄存器組可分為專用寄存器和通用寄存器。專用寄存器的作用是固定的,分別寄存相應的數據;而通用寄存器用途廣泛並可由程序員規定其用途。

工作原理

總的來說,CPU 從內存中一條一條地取出指令和相應的數據,按指令操作碼的規定,對數據進行運算處理,直到程序執行完畢為止。具體過程可分為以下四步:

【1】取指令

CPU 控制器從內存讀取一條指令並放入指令寄存器。指令的格式如下:

 

 

 

操作碼:就是匯編語言里的 mov,add,jmp 等符號碼;

操作數地址:說明該指令需要的操作數所在的地方,是在內存里還是在CPU的內部寄存器里。

【2】指令譯碼

指令寄存器中的指令經過譯碼,決定該指令應進行何種操作(就是指令里的操作碼)、操作數在哪里(操作數的地址) 。

【3】 執行指令

執行指令分為兩個階段: 取操作數 和 進行運算 。

取操作數:CPU 通過尋址操作,從內存(數據段)中讀取操作數到通用寄存器中,暫存起來。

進行運算:運算單元通過指令中的操作碼,對寄存器中的操作數進行 mov,add,jmp 操作。

【4】 指令計數

修改指令計數器,決定下一條指令的地址 。CPU 重復上述三步操作,處於內存代碼段的指令被逐個的執行,直到程序執行完畢為止。

CPU 字長

CPU在單位時間內(同一時間)能一次處理的二進制數的位數叫字長。所以,能處理字長為 8 位數據的 CPU 通常就叫 8 位的 CPU。同理,32 位CPU 能在單位時間內處理字長為 32 位的二進制數據 。

常見的 32位 CPU 和 64位 CPU 主要存在以下兩個差異:

【1】處理能力不同

32 位 CPU 的一個指令,最大能處理 32 位二進制數據,即一次能處理 4 個字節數據。
64 位 CPU 的一個指令,最大能處理 64 位二進制數據,即一次能處理 8 個字節數據。

【2】尋址空間不同

32 位 CPU 的尋址范圍是 32 位的二進制,32位二進制能表示的地址長度為2的32次方,即尋址空間最大為 4GB。
而 64 位CPU的尋址范圍是 64 位的二進制。能表示的地址長度更大,其尋址空間也會更大。

 二、稍微細致一點cpu工作方式

CPU 通過總線讀取內存的工作方式

以下詳細介紹了CPU是如何工作的,CPU和內存如何配合,如何讀取和寫入數據以及CPU內部如何處理指令的相關說明

1. CPU外觀

 

 

2. CPU內部總覽

1、CPU內部有許多連線,這些連線時刻都在傳遞信號
2、每個CPU都有一根電壓以固定頻率變化的信號線,它保證了CPU各個部
分的同步工作。這根線叫做時鍾信號線
3、現代的CPU的頻率都是以GHz來計算的,G表示十億,Hz表示每秒的次數。
4、所以現代CPU的時鍾頻率都在幾十億赫茲,這樣高的速度使得CPU能夠
快速地完成非常復雜的工作.
5、然而,在每個時鍾周期內,CPU所做的事情卻是非常簡單的。

 

 

1、你的電腦CPU可能是由Intel或是AMD這樣的公司生產的,但是,我們今天
要分析的卻是一款叫做Scott的CPU
2、這款CPU並不是真實存在的,它是John Scott在他的《But How Do It -
Know?》 這本書上設計的一款理論上的CPU
3、這本書可以在http://www.buthowdoitknow.com/ 網站上獲取
4、這是一本非常不錯的書,它在不涉及非常多技術細節的情況下,詳細地
講解了CPU的每個部件,如果你正在找一本介紹計算機如何運行的書,
我會非常推薦這本

 

 


3. CPU底部引腳

1、你可以看到CPU的底部有許多突出的管腳,CPU通過這些管腳和外界交
換信息。
2、CPU安裝在我們所熟知的主板上,主板可以讓計算機的所有部件連接在
一起。

 

 


4. 觀察CPU和內存如何相互配合

1. 概覽圖

1、所以我們把CPU翻過來並把它插入主板,主板的右側區域是RAM(也就是內存),內存RAM是Random Access Memory(隨機訪問存儲器)的簡稱,它用於存儲計算機運行時所需要處理的所有數據
2、現在讓我們通過觀察CPU和內存如何相互配合,來稍微了解一下內存的工作原理。
3、現在我們把左側的區域去掉,把右側的區域移過來,為內存條騰出空間。
4、內存包含一系列的地址,在每個地址處都存儲着一塊數據。
5、CPU通常是一個一個按順序地從內存里取數據,但是如果程序需要CPU打斷執行順序,它也可以做到(隨機存取),這也是為什么內存RAM也叫做隨機訪問存儲器的原因,因為數據可以被隨機訪問,即使正常情況下時按順序訪問的。
6、當計算機首次運行一個程序時,它會首先發送一個內存地址給內存,然后開始載入這段程序。

 

 


2. 讀取數據

1、當計算機首次運行一個程序時,它會首先發送一個內存地址給內存,然后開始載入這段程序。
2、內存地址是一個只包含0和1的二進制數值,0 和 1 代表對應地址線上電平的高低。
3、然而只輸入地址內存是並不會工作的,只有等到CPU打開設置(set) 信號線或使能(enable)信號線時才會。
4、如果是使能信號線打開,內存會自動把對應內存地址上的任何數據都傳給CPU。
5、如果使能信號線打開,內存會自動把對應內存地址上的任何數據都傳送給CPU,這樣CPU就可以處理該數據.
6、一旦CPU結束該數據,它就會發送另一個地址給內存,然后打開使能信號線,從內存獲取另外一個數據,這個過程會在計算機中一邊又一遍地重復。


 

 


3. 寫入數據

      1、如果CPU需要保存數據,那它會首先輸出一個地址信號,然后輸出數據內容,然后打開設置信號線,內存就會用新輸入的值重寫該地址處的數據。

 

 


4. CPU指令集和內存內部數據

    1、那內存內部的數據又是些什么呢?因為它看起來好像也是一堆0和1,好吧,內存中存儲的數據是由很多 部分組成的,其中最重要的一部分叫做指令(Instruction),指令用於CPU完成不同的工作。
    2、內存還可以存儲數據,這些數據可能用於做加法,或者做比較,或者是其他的某種處理數據的方法.還有一種東西,可看起來會比較奇怪,那就是內存中也可以存儲地址,也就是在內存某個地址處的存儲內容還是一個地址,這些地址可以用來完成很多事情。比如,如果你想把一個數據輸出到外部設備上,那么你必須要知道該設備的地址.比如你是想把它輸出到打印機上呢,還是想把它輸出到顯示器上? 內存上同樣還可以保存字符,如果你想在屏幕上顯示一些字符,你實際上是在內存中存儲了一堆的0和1,每個字符都按照一張特定的字符編碼表以01組合的形式存儲在內存中,字符的編碼值可以是任意的,比如某人可以決定,這是一個小寫的a,而另外一個是大寫的G,以上就是內存中實際存儲的內容,現在我們只把內存看做一堆的0和1,然后把內存條再插回主板
    3、我們再把內存看成一系列地址和數據的組合,把CPU從主板上取出,看看什么叫做CPU指令集. 之前講過,內存中可以存儲指令,而每個CPU都有一套只有自己能夠執行的指令集,所以CPU可能有一個叫做LOAD(裝 載)的指令,用於將數據從內存裝載到CPU,裝載指令之后可能有一個ADD(相加)指令,用於將數據相加,相 加指令之后可能會有一個STORE(存儲)指令,用於將相加的結果保存到內存中,在多個裝載指令之后可能還會有一個COMPARE(比較)指令,用於比較兩個數的大小,比較指令的一個非常重要的應用場合是條件跳轉指令(JUMP IF),之前講到過,CPU通常是一個一個按順序從內存中取數據的,但是有時候CPU可能要跳轉到一個並非連續的地址上去執行一些內存中的指令,條件跳轉指令會在跳轉之前檢查條件是否成立,它使用比較指令的結果來判斷條件是否成立,還有一類跳轉指令稱為無條件跳轉指令(JUMP),用於無條件跳轉最后還有輸入與輸出指令(IN/OUT),它們可以用於將數據輸出到外部設備,比如顯示器,或者將數據從設備上輸入,比如鍵盤,這兩個指令通常都會與某個地址一起使用,像我們之前所描述的那樣,CPU可以還會包含其他指令,但是這些指令是我們更常見的.至此我們已經知道,內存中包括指令,數據,地址,以及字符,那么 就讓我們通過這些指令,來完成一個猜數字的游戲程序.

 

 


 

 

5. 猜數字時內存和CPU

      1、首先把一個數字,比如9,裝載到CPU中,我們假設這就是正確答案,所以在這之前它就已經被存在內存中了,接下來是一個輸入指令,用於輸入用戶的猜測的數字,輸入指令之后是鍵盤的地址,用於告訴CPU從哪里輸入數據,接下來是比較指令,用於比較用戶輸入的數據和CPU中存儲的數據是否相等,比較指令之后是一條條件相等跳轉指令,如果剛才的兩個數據相等,則會跳轉到另一個內存地址處.緊接着條件相等跳轉指令的是一個新的內存地址,如果之前的數據相等,則CPU會立刻跳轉到該地址執行新的指令,如果兩個數據不等,則CPU 會忽略條件相等跳轉指令以及其后跟隨的地址,然后繼續執行,跟在跳轉地址之后的是一條輸出指令以及顯示器的地址,然后是字母G,u,e,s,s,空格,a,g,a,i,n,所以如果用戶輸入錯誤,程序將提示用戶再猜一次,然后跳轉到輸入指令處,重新讀取用戶輸入並執行以上過程.順便說一下,此處使用的輸入與輸出指令是經過簡化的,你可以在書上看到更為詳細的說明

 

 


5. CPU內部如何處理指令

1、現在我們來簡單地看看CPU內部是如何處理指令的, 之前我們見過6502CPU的內部結構,現在把6502的內部布線去掉,來看看Scoot CPU內部有哪些部件,第一個部件是控制器,它的地位就好比軍隊中的指揮官,它從內存中以指令的形式接收命令,然后把該指令進行分解,分解成各個部件的子命令,控制器的一個最重要的子部件是算術邏輯單元,或者簡稱ALU,算術邏輯單元用於完成CPU內部的所有算術運算,比如加法運算,減法運算或者我們之前提到過的比較運算,算術邏輯單元有兩個輸入,我們以輸入A和輸入B來表示,假設現在有兩個來自裝載指令的數字,我們要把它們加起來,那么首先控制器要從內存中加載指令,然后根據指令確定算術邏輯單元要進行何種操作,然后算術邏輯單元執行該操作后輸出結果,也有些時候,根據指令的類型,算術結果可以被忽略.比如,如果你要執行的是比較指令,那么算術邏輯單元就不需要輸出值,它只需要告訴控制器兩個數比較的結果,為此算術邏輯單元使用一種叫標志位的東西(Flags),來幫助控制器在收到下一條指令,比如跳轉指令時,CPU該如何進行操作,現在我們只假設我們在執行一個需要輸出結果的操作.那么輸出結果到底去哪了呢?

 

 

2、好吧,從算術邏輯單元出來的8根線將最終連接到一個寄存器,寄存器是一個非常簡單的部件,它的作用就是用來暫存數據的,它和內存是一樣的,只不過寄存器位於CPU內部,這使得它工作速度非常快,並且在指令運行期間存儲臨時數據時非常有用.

 

 

3、當算術邏輯單元向寄存器輸出數據時,數據並不會立刻存入寄存器,而是要等到控制器打開設置信號線時才會,此處的設置信號線和之前內存的是一樣的,當設置信號線打開時,寄存器就會保存任何在它的輸入信號線上的數據,一旦我們在寄存器中存儲了運算結果,那要怎樣才可以把數據取出來呢? 當要把數據從寄存器取出時,我們還需要從控制上再連接一根使能信號線,只要打開信號線,寄存器就會把它存儲的任何東西都輸出,寄存器的輸出信號線被連接到稱之為CPU總線的地方,總線,就像我們之前在主板上見到過的,就是一組用於連 接計算機各個組件的信號線,在總線上還有連着其他的寄存器,這些寄存器也有自己的使能與設置信號線

 

 

4、里面可能存儲着之前某個指令所保存的數據,如果控制器要在某個寄存器里保存數據,它就會打開這個寄存器的設置信號線,然后數據就被保存到寄存器中,接下來CPU會關閉這個寄存器的使能信號線並且清空總線,圖中頂部的四個寄存器都是用來在CPU運行過程中保存數據的,所以它們的輸出信號線都直接連接在總線上,現在我們已經可以通過打開和關閉某些信號線來在寄存器之間轉移數據,這就是總線的好處,它可以非常輕易地在組件之間傳輸數據,總線的缺點是它在同一時間只能傳輸一個數據

 

 

5、由於它的這個缺點,算術邏輯單元使用一個暫存寄存器來保存輸入B,當控制器要處理一個和算術邏輯單元相關的指令時,它會先把輸入B保存在暫存寄存器中

 

 

6、暫存寄存器可以不需要使能信號線,因為它只把數據輸出給算術邏輯單元,不會與其他寄存器產生沖突,算術 邏輯單元的另一個輸入直接來自於總線,控制器會打開另一個寄存器的使能信號線,於是這個寄存器里的數據就變成了算術邏輯單元的輸入A,這個數據會在算術邏輯單元完成運算之前一直存在總線上,現在算術邏輯單元的兩個輸入已經具備,我們已經准備好讓算術邏輯單元執行計算操作了,之前我們看到過,通過從內存裝載指令,控制器可以知道讓算術邏輯單元執行任何操作,指令本身保存在另一個叫做指令寄存器的寄存器中.順便說一個,來自總線的輸入不會影響到指令寄存器,因為我們已經按照之前的步驟,將指令保存到寄存器中了,這個寄存器和暫存寄存器一樣不需要使能信號線,因為它只把數據輸出到控制器,基於指令寄存器中的內容,控制器可以指示算術邏輯單元進行何種類型的操作,這里我們假設現在要處理的是一個比較指令,比較指令並不需要關心比較運算輸出的結果,我們只想知道兩個數比較之后的大小關系,因此我們要用到之前講到的 標志位(Flags),每個標志位都是一根信號線,它的打開或關閉都是根據某些條件是否滿足來決定的,在Scott-CPU內部有四根這樣的信號線,我們來看看其中的兩根是如何工作的.

 

 

7、“A更大” 這個標志位A is Larger 會在輸入A大於B時打開,如果A等於B,那么"相等" 這個標志位Equal會打開, 如果兩個標志位都是關閉狀態,則說明B大於A.

 

 


 

 

8、但在這個示例中,“相等” 標志位是打開的,所以這意味着兩個輸入時相等的

 

 


9. 當比較指令結束時,我們仍然需要在下一個指令中使用標志位,所以我們把標志位保存到一個只有四位的寄存器中,每個位保存一個標志位信息,一旦這些標志被設置(保存)到寄存器中,比較指令也就結束了,CPU可以從內存中取下一條指令

 

 


10. 通常比較指令之后都會跟隨一個條件跳轉指令(JUMP IF),這種"比較-條件跳轉"指令組合在計算機編程中是非常常見的.任何時候,當計算機程序包含不止一條執行路線時,程序都會包含"比較-條件跳轉"指令來決定走哪條路線,現在我們搞定了比較指令,並且已經把比較結果保存到了標志位寄存器中,我們需要告訴內存我們已經准備好接收下一個數據了,在這個例子中,下一個數據是一條指令,所以在CPU內部,另外一個非常重要的寄存器是指令地址寄存器,CPU通過這個寄存器來獲取下一條要執行指令的內存地址,當CPU准備好接收下 一條指令時,它會把指令地址寄存器使能並輸出到總線上,最終指令地址會傳遞到內存,但並不直接傳遞過去,在這中間還有一個寄存器,叫做內存地址寄存器(前面的叫做指令地址寄存器),它的唯一作用就是告訴內存CPU取數據的地址是多少,因為CPU不光是只從內存里面取指令(還有可能是數據),一旦指令地址被設置到內 存地址寄存器中,該地址就會立刻傳遞到內存,因為內存地址寄存器並沒有使能信號.

 

 


11. 然后控制器打開內存的使能信號線,內存就會自動把該地址的內容輸出到總線,在這個例子中該地址的內容是一條指令,接下來這條指令會保存到指令寄存器中,然后控制器就會去處理它.

 

 

12、在這個例子中是一條條件相等跳轉指令,用於檢測相等標志位是否被設置,它通過把自己的某一位,以及相等標志位,一起輸入到一個與門進行邏輯與操作,如果與門的兩個輸入都是打開的,則與門的輸出也是打開的,這個輸出最終會觸發跳轉動作,這個跳轉動作最終從內存中取下一個數據,這個數據剛好就是要跳轉的地址,並且會把這個地址保存到指令寄存器中

 

 

13、當條件相等跳轉指令結束時,CPU就會從這個地址開始執行新的指令. 從這個地址開始的指令可能是向屏幕輸出"你猜對啦"之類的文字信息,因為我們通過比較指令已經知道用戶猜對了.

 

 

14、最后CPU還有四根信號線用來控制外圍設備,例如顯示器,鍵盤之類的,現在關於Scott-CPU的結構圖已經基本完成了

 

 

15、數據在CPU內部通過總線進行傳輸,根據數據的不同用途保存在不同的寄存器中,前面介紹過每個指令在Scott-CPU內部處理時間大概是6個時鍾周期,現代CPU可以在每個時鍾周期處理多條指令,這意味着你用來看這個視頻的計算機CPU很有可能沒秒鍾都在處理成百上億條指令,這種現象級的速度是通過不止一個CPU核心,而是多個來實現的,並且還要保證盡可能多地讓這些核心都被激活,這使得現代CPU比Scott-CPU要復雜得多得多,但是它們所做的基礎工作還是和Scott-CPU差不多的.

 

 

16、現在我們縮小原理圖,以便於看到所有信號線和芯片管腳的連接,在最右側的是內存的設置/使能信號線.頂部 是內存地址線,底部是數據線,數據線既連接內存,也連接外部設備,左側的是輸入/輸出控制線.

 

 

17、現在再縮小示意圖,以便於看到整個芯片的其他部分,然后蓋上蓋子,並把CPU插到主板上,通過使用左側的接口,我們可以插入顯示器和鍵盤的連線,每個端口都有一個地址,這個地址用於在CPU輸入/輸出指令中指定設備地址,順便說一下,在這台計算機中,端口地址是通過數據總線來傳輸的,因為地址總線只留給內存使用.

 

 


 

 

18、現在縮小顯示,看看主板是如何安裝在主機箱中的,主機中還有一個我們最后要關注的組件,這就是硬盤,一旦 關閉電源,所有在計算機中保存的數據都會丟失,這時需要一個可以永久保存數據的方法,為此我們可以使用 硬盤

 

 

19、硬盤內部有一個旋轉的表面覆蓋有磁性存儲材料的金屬碟片和一個懸浮的金屬壁,金屬臂可以移動到盤片的不同部位,這樣就可以讀寫相應位置的數據,碟片和金屬臂通常移動速度是極快的,但是再快也趕不上CPU處理數據的速度,因為這個原因,CPU在處理硬盤數據時候,通常都要把它們先讀取到內存

 

 

20、現在把硬盤放回主機箱並顯縮小顯示,現在我們可以看到剛才運行的程序,並且程序提示用戶猜測結果正確。
現在你已經了解到了計算機大概是如何工作的

 

 

來源url

 


免責聲明!

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



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