你不知道的 CPU 原理

2021-06-27 00:09:31 字數 1803 閱讀 1594

cpu 是一台計算機核心且異常複雜的部件,當我們操作電腦,它以極快的速度執行著我們預設的每一條指令,但往往一些即使是作為程式設計師的專業人員也對其知之甚少,了解它的一些基本術語和基本執行步驟將會接近與 cpu 之間的距離。

1.      時鐘週期

我們通常看到的 cpu 主頻。時鐘脈衝由晶振發出,一般用來作同步訊號使用,例如在脈衝的上沿控制器發給執行部件一些微命令,也就是在各管腳加上電壓,在脈衝持續時間中,這些微命令被執行,然後將結果輸出到相應的管線上,穩定後,在脈衝下沿就可以去讀取相應的狀態了,像這樣有條不紊地進行下去。

2.      指令,微指令,微操作

指令:機器指令,對應唯一機器碼。

微指令:機器指令被讀入指令暫存器(ir)後經過指令解碼器(id),根據不同的操作碼和運算元會得到很多微指令,微指令可在乙個時鐘週期內完成。

微操作:乙個微指令可能包含乙個或多個微操作,它們在同乙個時鐘週期內完成。

3.      機器週期,cpu 週期

機器週期,一般也叫

cpu週期。在計算機中,為了便於管理,常把一條指令的執行過程劃分為若干個階段(如,取指令、儲存器讀、儲存器寫等),每一階段完成一項工作(稱為乙個基本操作)。完成乙個基本操作所需要的時間稱為機器週期。一般情況下,乙個機器週期由若干個

s週期(狀態週期)組成。

例如,乙個取指週期就是乙個機器週期,就包含

4個時鐘,每個時鐘週期內就會完成取指的乙個微指令(包含乙個或多個微操作);

4.      其它

cpu 包括控制器和運算器。

指令解碼器是控制器中重要的一部分。

5.      指令執行的流程

ir(指令暫存器) id(指令解碼器) mar(儲存器位址暫存器) mdr(儲存器資料暫存器)

pc(程式計數器) alu(算術邏輯單元)

取指階段:第乙個機器週期 m1。主要完成將指令讀取到 ir中。

微指令2:(t2)(微操作)read memory;

微指令3:(t3)(微操作)指令送 mdr;

(微操作) 調整 pc;

微指令4:(t4)(微操作) mdr 裡面取到的指令頭 ir;

解碼階段:第二個機器週期 m2。主要完成由 ir 中的指令送到 id 中,id 根據指令(包括操作碼和位址碼)反譯出相應的操作送往操作控制器中,操作控制器產生一系列控制訊號到不同的執行單元。

執行階段:第三個機器週期 m3。主要根據產生的控制訊號完成不同的執行操作。

如送住 alu ,進行算術運算,移位操作,跳轉操作等。與週期 m1 類似。

以上就是乙個指令在你的 cpu 中真正被執行的情況,但是時代變了,當乙個指令取完時,進入解碼階段,那麼取指令的單元就閒置了,為了增加效率,引入了流水線的概念。

if (if/id reg) id (id/ex reg)ex (ex/mem reg)mem (mem/wbreg)wb

括號裡面為流水線暫存器,並且取設定乙個時鐘週期來同步每步的操作,那麼就要使這個時鐘週期內,每一步都能完成,即選擇其中最耗時的一步的週期來設時鐘週期,當乙個時鐘週期結束時,讀取流水線暫存器的值,就可以作為下一步的輸出了。那麼理論情況下,當流水線完全執行起來,每乙個時鐘週期就會有乙個指令執行完畢。那麼時鐘週期就不像沒有流水線那樣同步的是微指令了,而是同步的是流水線的每乙個級。當時鐘週期確定,乙個 cpu 的主頻就確定了,不難看出,當每一級時間相差大時,由於短板效應,每一級並沒有充分利用,這時就應該拆分耗時較長的級,使每一級平均,那麼每一級的耗時將縮短,主頻就提高了,就也就是為什麼 p4 擁有 31 級流水線,且擁有較高主頻的原因。但流水線級增加也會導致流水線衝突,當衝突發生時,有時需要等待或清空流水線,反而會使效率降低,這也就是為什麼現在處理器流水線級低,主頻也降低,反而效率高的原因。

不知道不知道

函式分析 希爾伯特 哥德爾不完備定理 哥德爾不完全性定理一舉粉碎了數學家兩千年來的信念。他告訴我們,真與可證是兩個概念。可證的一定是真的,但真的不一定可證。某種意義上,悖論的陰影將永遠伴隨著我們。無怪乎大數學家外爾發出這樣的感嘆 上帝是存在的,因為數學無疑是相容的 魔鬼也是存在的,因為我們不能證明這...

不知道不知道

函式分析 希爾伯特 哥德爾不完備定理 哥德爾不完全性定理一舉粉碎了數學家兩千年來的信念。他告訴我們,真與可證是兩個概念。可證的一定是真的,但真的不一定可證。某種意義上,悖論的陰影將永遠伴隨著我們。無怪乎大數學家外爾發出這樣的感嘆 上帝是存在的,因為數學無疑是相容的 魔鬼也是存在的,因為我們不能證明這...

你不知道的 和

開發中,編寫有一定逼格的 是每個程式猿都追求的。經常用來判斷的符號 和 也經常用來定義變數哦,你知道嗎?邏輯與 在有乙個運算元不是布林值的情況下,就不一定返回布林值。比如以下情況 1 第乙個運算元是物件,返回第二個數 var myinfo console.log myinfo 2 輸出22 第二個運...