看了網上的一些描述cpu執行程式的過程,發現他們涉及到的內容太多了,恨不能把整個cpu的底層結構都拿出來說,這對計算機理論知識匱乏的新人甚至是一些老人都是非常不友好的。這個問題也是當初攔在我面前的乙隻大老虎,把這個原理寫出來也有助於我自己的深入理解。
cpu:計算機的所有計算操作都由它執行,只要先記住它是一塊有輸入和輸出的積體電路就行了。
程式要想被cpu執行,首先要被編譯成cpu可以執行的指令操作,這裡就不詳細介紹,本文就假設程式已經被編譯好了,放在了記憶體中。記憶體中存放的資料分為兩類,一類是指令;另一類是資料,不管是指令還是資料都有其對應的位址。
在上圖中,現在已經存放了位址為100、104、108、112的一系列指令;位址為2000、2004、2008的一系列資料。
這裡只放出cpu的執行指令時涉及的基本結構,真實的情況還會複雜很多。
這裡涉及到的結構有program counter(程式計數器)、instruction register(指令暫存器)、data register(資料暫存器)、alu(算數邏輯單元),可以將計數器、暫存器都可以簡單理解為存放資料的器件。上述程式計數器用來存放指令的位址;指令暫存器用來存放指令(初學者可能會搞混資料和位址的區別,稍加區分就可以分辨);資料暫存器存放參與計算的資料,下圖中的a、b、c都是資料暫存器;alu就是用於計算的器件。
本文內容為便於理解,僅涉及到cpu和記憶體間的資料交換。
在了解了ram和cpu相關結構之後,接下來就可以正式開始說明執行的過程,其實就是對以上敘述內容的乙個組合。
程式計數器初始內容為100,指向記憶體中的某一項指令,注意100指的是位址;
指令暫存器根據程式計算器的指向位址,將記憶體中位址為100的指令抓取到自身,此時存放load a,2000;
cpu按照指令內容,將記憶體位址為2000的資料,上載到資料暫存器a中,此時cpu和ram的狀態如下圖所示;
以上3步已完成乙個指令的基本操作步驟。接下來程式計數器依次指向104指令位址、108指令位址、112指令位址,分別完成將2004位址的資料賦值給b資料暫存器;alu將a、b內的資料相乘賦值給c資料暫存器;將c資料暫存器資料寫入內容位址2008中。
這樣就完成了50×0.1這個簡單程式的計算,最後cpu和ram所處狀態如下圖所示。
CPU執行程式的原理(簡化過程)
ram 指記憶體,斷電後內容無法儲存,因此叫做易失性儲存 另乙個相關的概念是rom,字面上是唯讀儲存器,從字面上裡面更適合用於嵌入式裝置,現在意義有所延伸,具體自行查詢資料。ram的速度遠快於rom,cpu與記憶體直接進行資料交換。cpu 計算機的所有計算操作都由它執行,只要先記住它是一塊有輸入和輸...
小程式執行執行過程原理 程式執行原理
計算機中包含有較多的硬體,但是乙個程式要執行,有三個核心的硬體,分別是 cpu 記憶體 硬碟 計算機中哪乙個硬體裝置負責執行程式?記憶體的速度快還是硬碟的速度快?我們的程式是安裝在記憶體中的,還是安裝在硬碟中的?我買了乙個記憶體條,有 500g 的空間!這句話對嗎?計算機關機之後,記憶體中的資料都會...
執行程式並指定cpu相關性
某些情況下要多次執行同乙個程式,但是想指定不同的cpu來處理。命令格式 start affinity引數 cpu核心對應16進製制數 執行程式路徑 如 start affinity 0x1 notepad.exe 16位掩碼值 4核為例,用cpu3 cpu2 cpu1,不用cpu0 二進位制數字 c...