”你誰啊?“ ”我CPU啊,你剛纔還看我呢。“

“不好,居然睡過去了!”

我一躍而起,猛然睜開了眼,打算抄起書本接着看CPU的內容。

結果發現,我書沒了,桌子也沒了,臥槽,四周白茫茫的,這哪兒呢?

面前還站着一個年輕人,挖着鼻孔盯着我,然後仰頭就說:“小老弟,機械式看書有啥意思,問吧,什麼問題我都能給你解答。”

“你誰啊?”

“我CPU啊,你剛纔還看我呢。”

我愣了,仔細打量,這人衣着寬鬆,一副慵懶得吊兒郎當的樣子,搭上那嬉皮笑臉的樣子,整體顯得有點猥瑣。

我實在難以將這人與精準計算的CPU扯上勾,吐槽了一句:”要你是CPU,那運算得多不靠譜啊。“

”此言差矣,別說人了,CPU也不可貌相。“年輕人擡手認真說理了一番,又問:”你們都是怎麼介紹我的?“

我一琢磨,也是,我認識的那些程序員大佬,又哪幾個長得像我一樣俊俏,認可了他的身份,回答說:”一說到你,經常就是甩過來一句:CPU是中央處理器,是計算機的大腦。“

”額···“年輕人愣了一下,”然後這句話有什麼用?“

”僅僅是被告訴這句話,並沒有卵用,只是外行人拿來忽悠小朋友的。“我也是看了一點書才知道,真要掌握編程能力,就得要直到CPU是如何運行的,還得清楚指令和數據是如何保存的,誰知纔看了一點,就睡過去了,真是不爭氣。

”你到底是怎麼解釋程序然後運行它的,又是怎麼轉換成機器語言的?“我皺着眉頭,眼裏滿是疑惑。

”這個啊,簡單,其實我是由寄存器,控制器,運算器和時鐘組成的。“年輕人一聽有人對自己感興趣,立馬露出了興致:”就相當於我的口袋,四肢,大腦和心臟一樣,這樣一對比,他們的功能就能從中窺探一二了。“

寄存器:

暫存指令和數據

”既然是相當於口袋,那肯定是用來存放東西的,放的就是指令和數據。“

控制器:

將指令和數據存入寄存器,並利用運算結果來控制計算機

”我是如何進行數據輸入和數據輸出的,靠的就是這‘四肢’來協調數據進出和掌握全局,比如你們經常用的打印和顯示器的輸出,鼠標鍵盤的輸入,還有內存和磁盤的輸入輸出,靠的這就是這控制器,它不要求有什麼高深的本領,但是一定要確保指令的正確執行和異常事件處理。“

運算器:

讀取寄存器的數據

“既然有了數據,還保存好了數據,接下來就當然是用我這個聰明的‘大腦’進行計算了。”

時鐘:

發出CPU開始工作的時鐘信號

“這心臟是我能‘活着’的源泉,當它開始跳動的時候,我就知道我該工作了,不過有些時鐘是位於外部的,從體外爲我提供生命的跳動。”

“簡單點劃分就是下面這樣:”

看着年輕人不知從哪裏抽出了這樣一張圖,我仔細瞅了一眼,雖然畫的相當簡陋,卻一目瞭然,而且,我還發現了一點。

”你這連線,是不是說明其實控制器、運算器和時鐘都是可以人爲去控制寄存器進行配置的?“

“是的,甚至可以這樣認爲,我們CPU就是寄存器的集合體,不過在這裏我必須鄭重生命一點,我們CPU內部的組成多而複雜,遠遠不止這四個,起主要作用的就是這四個,與你們編程息息相關的也是這四個,你可別跟我扛。“

年輕人收起了那張圖,又接着說:”控制器和運算器你們無法作主,但是卻可以通過寄存器時刻進行監督和配置,因爲組成它們的,大部分也是寄存器。“

“就好比控制器中就有:”

地址寄存器:

簡稱AR,存放內存的地址,供CPU訪問,直到內存的讀寫操作完成。

指令譯碼器:

簡稱ID,就是對指令進一步分析成更加底層的指令。

指令寄存器:

簡稱IR,當CPU要執行一條指令的時候,會先從內存讀取出來(訪問內存就是用的地址寄存器),先放進數據緩衝寄存器(這裏後面會講到),然後再放進IR中,最後由譯碼寄存器解釋成更加貼近硬件的微指令操作,直接控制硬件動作。

程序計數器:

簡稱PC,存放着CPU下一條要執行指令的地址

年輕人講到這裏稍微頓了頓,語氣稍微正經了起來:“這個程序計數器需要重視一下,這傢伙兒不僅決定你們程序的執行流程,還還是你們編程中分支和循環機制的原理,來,上圖。”

說着又不知道從哪裏抽出一張圖片來。

我一看這圖片怎麼這麼熟悉呢,忽然醒悟過來,臥槽,我剛看過。

“你這盜圖手法挺熟練啊,不過這個PC我熟。”我擺了擺手。

“哦?那你說說。”年輕人摸了下巴,能懂和能說是兩碼事。

我也就不客氣,直接說道:“CPU都是將數據存儲在連續的地址上,而程序計數器就相當於CPU的引路人,告訴CPU下一步需要執行哪個地址上的數據,當執行完一條指令的時候,程序計數器的值會+1,相當於告訴CPU地址+1了,CPU就知道下一步應該執行地址+1那裏的指令。”

“沒錯,你小子記得不錯。”年輕人肯定的點了點頭,補充道:“雖然這圖片上每個指令都佔據了一個地址,但是實際上我們CPU在處理的時候是將一個指令或者數據放在多個地址上的。,不過執行的原理都一樣。”

而且如此一講,便自然而然知道了分支和循環操作是怎麼實現的:

編程界都知道這一行有三大執行力,分別是順序執行,分支執行和循環執行。

同時還有這樣一條誰也無法打破的定理,那就是一切操作都是由順序執行,分支執行和循環執行來完成。

而順序執行,內部原理自然就是程序計數器不斷+1,CPU不斷按照+1的地址執行指令;

分支指令和循環指令,無非就是程序計數器的值設定爲任何值,那麼CPU就可以隨意跳轉到任意地址執行,甚至還可以返回到上一次執行過的地址。

比如以下的條件分支:程序開始運行的地址是0100,隨後程序計數器不斷+1,到了地址0102的時候,跳轉到地址0104執行其中的指令內容。而要完成跳轉這個動作,就是用到跳轉指令(JUMP指令)(這裏關於指令的部分就不展開了,我擔心自己扯遠了。)

 

 

 

“控制器大概就是這些情況,接下來是運算器:”

算術邏輯單元:

簡稱ALU,負責對數據的算術運算和邏輯運算

累計寄存器:

簡稱AC,ALU處理完之後將結果存放於AC中

條件狀態寄存器:

簡稱PSW,指令完成後產生的狀態標誌和控制標誌,就放這寄存器中

數據緩衝寄存器:

簡稱DR,從內存讀取的數據會暫時存放於DR中

這個就剛纔說到的當從內存讀取指令會先放在這個數據緩存寄存器中,而且從它的名字中我也不難猜想出來,這一定是起到了某些緩衝的作用,“難道是速度嗎?”

年輕人笑了笑,“接着說。”

“因爲我知道CPU的工作頻率比內存的讀寫頻率要大得多,兩者相差這麼多,那必定是需要有一個驛站來做緩衝。”

“哈,你知道的還是挺可以的。”年輕人得意一笑,“那你知道什麼叫單核和雙核嗎?”

“每一塊CPU上都嵌有一塊運算單元,這就是單核,雙核不就是嵌入了兩塊運算單元嗎?”這點我還是清楚的,而且,從15年起,主流的CPU就已經是雙核架構了。

“那多核呢?”

“····”我白了他一眼,這傢伙是侮辱我智商嗎,“多核不就是嵌入了兩塊以上運算單元嗎,你在逗我呢。”

“哈哈,那超線程呢?”年輕人沒有在意,又接着問了。

不過這一問,卻難倒我了,線程我是知道,超線程是個什麼鬼?

“世界很大,小老弟知道得還是不夠啊。”年輕人微微搖了搖頭,一副賣弄的樣子。

“別扯犢子,快告訴我。”對於新鮮東西,我是挺想去摸清楚的。

“超線程技術被稱爲HT技術,是在不增加內存資源的情況下開闢出更多的核。要知道我們CPU執行指令的週期太快了,大部分事件都處於空閒狀態,即使有了多任務系統,讓衆多程序不斷切換執行,讓我們看似在同時執行兩份程序,可儘管如此我們CPU還是沒有物盡其用,這時候就有人站出來了,能不能讓CPU真正意義上同時執行兩份程序呢。”

“很快HT技術就出來了,而機制就是將CPU的寄存器資源分成兩份,然後給兩組程序使用,這一次不是採用多任務分配的方法,而是讓這兩組程序同時使用CPU的運算單元。所以以後你有機會去檢測CPU內核的時候,會發現雖然CPU名義上是n核,但是檢測出來的卻有2n核,毫無疑問,用的就是超線程技術,可以從邏輯上同時運行2n個程序。”

“哦哦。”我煥然大悟,沒想到還有這種東西,果然世界之大。

“”最後就是對程序員最重要的寄存器了,這些傢伙太多了,但是從種類來區分可以分成八類:“

累加寄存器:

存儲運算後的數據

標誌寄存器:

存儲運算後CPU的狀態(比如正數、負數、零、存放溢出、奇偶校驗等等)

程序計數器:這個咱們剛纔討論過。

存儲下一條指令所在內存地址,它決定着程序的流程

指令寄存器:這個咱們剛纔好像也討論過。

存儲指令,這一部分是供CPU內部處理的,程序員無法操作

棧寄存器:咱們這個剛纔也好像···哦沒說過。

存儲棧區域的起始地址

基址寄存器:跟下面那個寄存器相輔相成的。

存儲數據內存的起始地址

變址寄存器:還記得剛纔講到的存儲訪問的內存地址的地址寄存器嗎,二者要區分來,不要混淆。

存儲相對於基址寄存器的相對地址

通用寄存器:

存儲任意數據

”在以上八種寄存器種,只有基址寄存器、變址寄存器和通用寄存器是可以有多個的,其他5個寄存器都只有一個。”

“好了,大致上CPU內部環境,就是這麼多了。”年輕人吐了口氣,顯得輕鬆多了。

但是我的疑惑並沒有因此而減少,整理了一下,發現了一個問題,“你輸了這麼多關於CPU的東西,但是這CPU究竟是長什麼樣子呢?”

“這個你就別糾結了,CPU你是看不到的,市面你能看到的,都是CPU與內存的結合產物,按照你們的說法,就是IC,我找了兩個IC兄弟的自拍照你看了就明白了。”

“你這兩兄弟長得還挺別緻。”我差點笑出了聲,還以爲他會拿出什麼來,不過這也讓我腦子一下子就通了,一直一來對CPU只是抽象種的存在,現在終於腦子中有了個框架。

“那你這兩個兄弟,哪一個的性能好點呢?應該是第2號兄弟吧,我看針腳挺多的。”我摸着腦袋,又生出一問。

“沒錯,但是在性能好壞這方面,單單隻看引腳數量是不準確的,應該從以下三個方面及西寧判斷:”

一、指令集

CPU內部含有指令集,不同的指令集會影響CPU的工作效率

二、CPU頻率,即主頻

首先要明確知道什麼是頻率,就是CPU一秒鐘能進行多少次工作,比如3.6GHZ的CPU頻率,表示可以一秒鐘內進行3.6 * 10^9次工作。

當然了,以上說的是CPU內部自身的頻率,既然有內部,自然就會有外部頻率,而CPU與外部組件進行數據傳輸的速度,就叫外頻。

此外還要牽涉一個概念——倍頻,倍頻就是CPU內部調節頻率的倍數,所以外頻與倍頻相乘,纔是CPU的主頻。

“當然,有些裝機黨喜歡手動將倍頻的倍數設置超過最大倍頻倍數,就是超頻。雖然CPU頻率和外頻都會得到提升,但是由於超頻並非是正常速度,我都記不清楚戎機多少次了。"

“不過慶幸的是,如今的CPU會主動根據計算機的使用情況進行超頻,這才讓我的工作壓力輕鬆許多。”

三、CPU的位寬

”我不清楚你對於內存的理解有多少,不過這裏只要知道CPU的所有數據都是從內存來的即可。“

既然如此,那麼CPU每次能從內存取到的數據量越大,性能也會提高。因此就有了“位寬”的概念,位寬就是CPU每次工作能從內存中取到多少位數據,目前就有8位、32位、64位

”就是以上三者判斷需要結合,既不能單純的以指令集來判斷性能高低,也不能僅僅憑藉CPU頻率來判斷性能高低,更不能認爲位寬更高,性能越好。一切都要結合實際需要與實際執行情況。“

”嘖嘖嘖。“聽完後,我不禁咂舌,原來這裏頭還有這麼多道道,今兒收穫不虧啊。

”叮~“

”呦,時間到了,該走了。“年輕人看了下沒有帶表的手腕。

”啊?什麼時間,你要走了?別啊,再多講點。“我還沉浸在消化剛剛聽到的信息,一聽他要走竟然有些低沉。

”這個怕是不行了,不過你下次有需要的話可以聯繫我。“說着塞給了我一張紙,”上面有我聯繫方式。歡迎下次惠顧。“

”惠顧?“我沒懂這啥意思呢,趕緊看了一下紙條,那竟然是一張賬單,上面清晰寫着:諮詢付費總額 xxx天堂幣。

臥槽,我什麼時候要付費諮詢了,這天堂幣又是個什麼鬼?

”尼瑪···“剛想問候一下,擡手一看人沒了,回想起剛纔他那麼熱情給我解答的樣子,不禁一聲感慨:

全TM是套路啊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章