By JackKing_defier算法
首先說明一下,本文內容主要是簡單說明CPU的大體原理,所須要的前提知識我會提出,可是因爲篇幅我不會再詳細講解須要的其餘基礎知識。默認學過工科基礎課。學習
先從計算機的結構提及,在現代計算機中,CPU是核心,經常被比喻爲人的大腦。如今的計算機都爲「馮·諾依曼機」,「馮諾依曼機」的一個顯著的特色就是由運算器、存儲器、控制器、輸入設備和輸出設備組成。CPU是運算器和控制器合起來的統稱,由於運算器和控制器在邏輯關係和電路結構上聯繫十分緊密,尤爲在大規模集成電路製做工藝出現以後,因此這兩個部件就集成在同一芯片上。設計
瞭解CPU怎麼工做就轉化爲了解運算器和控制器的做用和功能。排序
運算器由ALU(算術邏輯單元)和若干通用寄存器組成。//寄存器須要數字邏輯知識遊戲
ALU即爲一個芯片,有相應的輸入,會給出相應的輸出,由邏輯運算功能表可肯定不一樣針腳會有的相應的運算輸出。//這裏能夠類比於數字邏輯中的74LS138芯片,只不過74181給出的是相應輸入的運算結果。
在這裏我想到,不少同窗並無學習過數字邏輯這門課,簡單介紹一下。咱們高中物理就學過「與門」、「或門」和「非門」,也就是經過電路能夠實現邏輯上的「與」、「或」和「非」運算。同時呢,有一個門叫作「與非門」,也就是A和B先作與運算,再作非運算取反。經過布爾代數的運算法則能夠把全部「門」的運算都用「與非門」表示出來,也就是等價變換。這樣咱們就有了異或、同或、或非等各類門電路。內存
經過若干個輸入的信號經過各類門電路以後會產生一個或多個結果,知足咱們須要的功能。好比加法器、移位器、觸發器、寄存器、譯碼器。基礎
ALU就是這樣一個知足咱們運算功能的部件。因爲ALU功能不少,你能夠理解爲能作各類基本算術運算和基本邏輯運算。原理
說到如今,你如今應該清楚CPU內部有一個專職作運算的部件ALU了,並且由電路就能夠實現。用電路能夠很方便地表達出二進制信息,好比高電平爲「1」,低電平爲「0」。CPU處理的數據都爲二進制,能夠經過原碼、反碼和補碼完成加減乘除運算,這樣就把一切運算經過電路實現。擴展
機器能作解題的運算是由於人們利用了機器語言,機器語言能被機器自身識別,同時也能夠被人理解。機器語言是由一條條語句構成的,每一條語句有必定的含義。好比,它能夠規定機器作什麼操做,指出參與操做的數或其餘信息在什麼地方等。咱們習慣把每一條機器語言的語句稱爲機器指令,所有機器指令系統的集合稱爲機器的指令系統。計算機的設計者主要研究如何肯定機器的指令系統,如何用硬件電路、芯片、設備來實現機器指令系統的功能。計算機使用者則是依據指令系統,使用匯編語言來編制各類程序。軟件
上面一段話的內容也就是說:咱們利用計算機作的全部操做,本質上都被還原成一個個指令。
指令是由操做碼和地址碼組成的。也就是分爲不一樣的字段。操做碼來指明要進行的操做,地址碼來指出該指令的源操做數的地址、結果的地址以及下一條指令的地址。(這裏又涉及到指令的格式,指令以及數據的尋址方式等,容易繞並且限於篇幅,略)一條指令包含的信息:它是幹什麼的,它須要的參數在哪裏。
指令存儲在存儲器中,也就是咱們日常說的內存。
在第二小節中,我說了CPU的運算,這一段主要闡述CPU的控制。CPU的實質包含運算器和控制器兩部分。對於馮·諾依曼結構的計算機來講,一旦程序放入存儲器後,就能夠經過計算機自動完成取指令和分析指令的任務,控制器就是專門作這個工做的。它負責協調而且控制計算機各部件執行程序的指令序列,其基本功能是取指令、分析指令和執行指令。
取指令,控制器必須具有能自動地從存儲器中取出指令的功能。
分析指令,第一,要分析完成什麼操做,即爲控制器須要發出什麼樣的操做命令;第二要分析參與此次操做的操做數的有效地址。
執行指令,這一階段就是根據分析指令產生的「操做命令」和「操做數地址」的要求,造成操做控制信號序列(不一樣的指令有不一樣的操做控制信號序列),經過對運算器、存儲器以及I/O設備的操做,執行每一條指令。
除此以外,控制器還有其它控制的功能,所有羅列會讓人頭大。簡短地講,就是控制!
根據上文的內容,能夠得出CPU必須有的功能:
根據前面提到的CPU必須有的功能,要取指令,必須有一個寄存器專用存放當前指令的地址,告訴你從哪裏取出如今須要執行的指令;要分析指令,必須有存放當前指令的寄存器和對指令操做碼進行譯碼的部件,即爲分析出這一個指令對應着什麼操做,須要幹什麼;要執行指令,必須有一個可以發出各類操做命令序列的控制部件CU;要完成算術運算和邏輯運算,必需要有存放操做數的寄存器和實現運算的部件ALU;爲了處理一些異常狀況和特殊請求,還須要有中斷系統。
CPU主要由四大部分組成:ALU、CU、寄存器、中斷系統。
在數字邏輯中學到,寄存器就能夠存放二進制信息。CPU中一些主要的寄存器和它們的功能:
這裏能夠舉例,CPU從主存中取指令的通路。/MM表明存儲器/
取指令:PC–>MAR–>MM–>MDR–>IR
解釋:PC中存儲着咱們將要執行的指令的地址,將現行指令地址存入地址寄存器MAR,而後進行命令存儲器讀操做,現行指令從存儲器中讀到數據寄存器MDR中,再將現行指令從MDR送至指令寄存器IR,接下來就進行譯碼執行部分了,後面根據指令的操做碼,由CU譯碼去執行。
控制單元CU提供微操做命令序列,以完成計算機的所有指令操做。
CPU取出並執行一條指令所需的時間稱爲指令週期,也就是CPU完成一條指令的時間。
指令週期簡單來說,分爲兩個階段:取指週期和執行週期。
大多數狀況下,CPU就是「取指–執行–取指–執行·······」的順序自動工做。剛纔提到過取指令的通路,全部的指令取指令都是這個通路,因此取指週期都相同。根據指令狀況,執行週期長短不一,有的甚至沒有,直接就是轉移指令。
這裏要提到一個比較重要的概念:中斷
中斷比較好理解,就是CPU執行過程當中被打斷。這裏面講太細了就太多了。我能夠用個人語言通俗地讓你理解一下:這就比如你去網吧上網,是按照時間計費的,這個時間能夠理解爲指令週期。在你還正玩着的時候,有人不當心把網線拔了,你就得中斷,你得去把網線插好繼續玩。這裏面就涉及到你得保留以前的位置,不要被別人佔了,遊戲不退出,讓你可以在處理完以後還能繼續玩。因爲你也比較喜歡玩這個遊戲,通常的事情是叫不動你的,這時候哥們叫你去打球,你就說正忙着呢,打完遊戲再去打球。這個就說明有個優先級排序,打球的優先級不如玩遊戲,因此你屏蔽掉了這個能夠干擾你的中斷,繼續你目前的操做,去玩遊戲。
由於在CPU中也會被各類狀況打斷,能夠軟件調控的就按照規矩來了,若是是斷電什麼的,那就是不可操做的了。
在週期這一塊有不少劃分和概念,好比機器週期,節拍週期等。不說太多,怕你繞。
你就能夠理解爲一點,CPU對時間把控的很緊,一切按照時間步驟來。
CPU部件之間傳輸數據也是依靠總線,總線擴展也不少,你能夠簡單理解爲傳輸數據。 這裏面有不少我都沒細說,細說確定扯不完,由於我一開始寫就發現,這其中都是有聯繫的,我不可能只說一部分,因此基本就把計算機組成原理都說了一下,CPU是計算機的核心,CPU是怎麼工做的,詳細內容仍是來自《計算機組成原理》。 我回顧了一下,我貌似就是把這本教材極致簡化了,不少都是一筆帶過,不過能夠做爲非計算機專業同窗去初步瞭解CPU的文章。