CPU基礎(chǔ)知識(shí)大全
CPU的英文全稱是(Central Processing Unit),中文意思翻譯中央處理器,是計(jì)算機(jī)的主要設(shè)備之一,功能主要是解釋計(jì)算機(jī)指令以及處理計(jì)算機(jī)軟件中的數(shù)據(jù)。計(jì)算機(jī)的可編程性主要是指對(duì)中央處理器的編程。下面就讓小編帶你去看看CPU基礎(chǔ)知識(shí)大全,希望能幫助到大家!
關(guān)于 CPU 的一些基本知識(shí)總結(jié)
CPU是計(jì)算機(jī)的大腦。
1、程序的運(yùn)行過(guò)程,實(shí)際上是程序涉及到的、未涉及到的一大堆的指令的執(zhí)行過(guò)程。
當(dāng)程序要執(zhí)行的部分被裝載到內(nèi)存后,CPU要從內(nèi)存中取出指令,然后指令解碼(以便知道類型和操作數(shù),簡(jiǎn)單的理解為CPU要知道這是什么指令),然后執(zhí)行該指令。再然后取下一個(gè)指令、解碼、執(zhí)行,以此類推直到程序退出。
2、這個(gè)取指、解碼、執(zhí)行三個(gè)過(guò)程構(gòu)成一個(gè)CPU的基本周期。
3、每個(gè)CPU都有一套自己可以執(zhí)行的專門的指令集(注意,這部分指令是CPU提供的,CPU-Z軟件可查看)。
正是因?yàn)椴煌珻PU架構(gòu)的指令集不同,使得__86處理器不能執(zhí)行ARM程序,ARM程序也不能執(zhí)行__86程序。(Intel和AMD都使用__86指令集,手機(jī)絕大多數(shù)使用ARM指令集)。
注:指令集的軟硬件層次之分:硬件指令集是硬件層次上由CPU自身提供的可執(zhí)行的指令集合。軟件指令集是指語(yǔ)言程序庫(kù)所提供的指令,只要安裝了該語(yǔ)言的程序庫(kù),指令就可以執(zhí)行。
4、由于CPU訪問(wèn)內(nèi)存以得到指令或數(shù)據(jù)的時(shí)間要比執(zhí)行指令花費(fèi)的時(shí)間長(zhǎng)很多,因此在CPU內(nèi)部提供了一些用來(lái)保存關(guān)鍵變量、臨時(shí)數(shù)據(jù)等信息的通用寄存器。
所以,CPU需要提供 一些特定的指令,使得可以從內(nèi)存中讀取數(shù)據(jù)存入寄存器以及可以將寄存器數(shù)據(jù)存入內(nèi)存。
此外還需要提供加法、減、not/and/or等基本運(yùn)算指令,而乘除法運(yùn)算都是推算出來(lái)的(支持的基本運(yùn)算指令參見ALU Functions),所以乘除法的速度要慢的多。這也是算法里在考慮時(shí)間復(fù)雜度時(shí)常常忽略加減法次數(shù)帶來(lái)的影響,而考慮乘除法的次數(shù)的原因。
5、除了通用寄存器,還有一些特殊的寄存器。典型的如:
PC:program counter,表示程序計(jì)數(shù)器,它保存了將要取出的下一條指令的內(nèi)存地址,指令取出后,就會(huì)更新該寄存器指向下一條指令。
堆棧指針:指向內(nèi)存當(dāng)前棧的頂端,包含了每個(gè)函數(shù)執(zhí)行過(guò)程的棧幀,該棧幀中保存了該函數(shù)相關(guān)的輸入?yún)?shù)、局部變量、以及一些沒有保存在寄存器中的臨時(shí)變量。
PSW:program status word,表示程序狀態(tài)字,這個(gè)寄存器內(nèi)保存了一些控制位,比如CPU的優(yōu)先級(jí)、CPU的工作模式(用戶態(tài)還是內(nèi)核態(tài)模式)等。
6、在CPU進(jìn)行進(jìn)程切換的時(shí)候,需要將寄存器中和當(dāng)前進(jìn)程有關(guān)的狀態(tài)數(shù)據(jù)寫入內(nèi)存對(duì)應(yīng)的位置(內(nèi)核中該進(jìn)程的??臻g)保存起來(lái),當(dāng)切換回該進(jìn)程時(shí),需要從內(nèi)存中拷貝回寄存器中。即上下文切換時(shí),需要保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)。
7、為了改善性能,CPU已經(jīng)不是單條取指-->解碼-->執(zhí)行的路線,而是分別為這3個(gè)過(guò)程分別提供獨(dú)立的取值單元,解碼單元以及執(zhí)行單元。這樣就形成了流水線模式。
例如,流水線的最后一個(gè)單元——執(zhí)行單元正在執(zhí)行第n條指令,而前一個(gè)單元可以對(duì)第n+1條指令進(jìn)行解碼,再前一個(gè)單元即取指單元可以去讀取第n+2條指令。這是三階段的流水線,還可能會(huì)有更長(zhǎng)的流水線模式。
8、更優(yōu)化的CPU架構(gòu)是superscalar架構(gòu)(超標(biāo)量架構(gòu))。這種架構(gòu)將取指、解碼、執(zhí)行單元分開,有大量的執(zhí)行單元,然后每個(gè)取指+解碼的部分都以并行的方式運(yùn)行。比如有2個(gè)取指+解碼的并行工作線路,每個(gè)工作線路都將解碼后的指令放入一個(gè)緩存緩沖區(qū)等待執(zhí)行單元去取出執(zhí)行。
9、除了嵌入式系統(tǒng),多數(shù)CPU都有兩種工作模式:內(nèi)核態(tài)和用戶態(tài)。這兩種工作模式是由PSW寄存器上的一個(gè)二進(jìn)制位來(lái)控制的。
10、內(nèi)核態(tài)的CPU,可以執(zhí)行指令集中的所有指令,并使用硬件的所有功能。
11、用戶態(tài)的CPU,只允許執(zhí)行指令集中的部分指令。一般而言,IO相關(guān)和把內(nèi)存保護(hù)相關(guān)的所有執(zhí)行在用戶態(tài)下都是被禁止的,此外其它一些特權(quán)指令也是被禁止的,比如用戶態(tài)下不能將PSW的模式設(shè)置控制位設(shè)置成內(nèi)核態(tài)。
12、用戶態(tài)CPU想要執(zhí)行特權(quán)操作,需要發(fā)起系統(tǒng)調(diào)用來(lái)請(qǐng)求內(nèi)核幫忙完成對(duì)應(yīng)的操作。其實(shí)是在發(fā)起系統(tǒng)調(diào)用后,CPU會(huì)執(zhí)行trap指令陷入(trap)到內(nèi)核。當(dāng)特權(quán)操作完成后,需要執(zhí)行一個(gè)指令讓CPU返回到用戶態(tài)。
13、除了系統(tǒng)調(diào)用會(huì)陷入內(nèi)核,更多的是硬件會(huì)引起trap行為陷入內(nèi)核,使得CPU控制權(quán)可以回到操作系統(tǒng),以便操作系統(tǒng)去決定如何處理硬件異常。
關(guān)于CPU的基本組成
1、CPU是用來(lái)運(yùn)算的(加法運(yùn)算+、乘法運(yùn)算__、邏輯運(yùn)算and not or等),例如c=a+b。
2、運(yùn)算操作涉及到數(shù)據(jù)輸入(input)、處理、數(shù)據(jù)輸出(output),a和b是輸入數(shù)據(jù),加法運(yùn)算是處理,c是輸出數(shù)據(jù)。
3、CPU需要使用一個(gè)叫做存儲(chǔ)器(也就是各種寄存器)的東西保存輸入和輸出數(shù)據(jù)。以下是幾種常見的寄存器(前文也介紹了一些)
MAR: memory address register,保存將要被訪問(wèn)數(shù)據(jù)在內(nèi)存中哪個(gè)地址處,保存的是地址值
MDR: memory data register,保存從內(nèi)存讀取進(jìn)來(lái)的數(shù)據(jù)或?qū)⒁獙懭雰?nèi)存的數(shù)據(jù),保存的是數(shù)據(jù)值
AC: Accumulator,保存算術(shù)運(yùn)算和邏輯運(yùn)算的中間結(jié)果,保存的是數(shù)據(jù)值
PC: Program Counter,保存下一個(gè)將要被執(zhí)行指令的地址,保存的是地址值
CIR: current instruction register,保存當(dāng)前正在執(zhí)行的指令
4、CPU還要將一些常用的基本運(yùn)算工具(如加法器)放進(jìn)CPU,這部分負(fù)責(zé)運(yùn)算,稱為算術(shù)邏輯單元(ALU, Arithmetic Logic Unit)。
5、CPU中還有一個(gè)控制器(CU, Control Unit),負(fù)責(zé)將存儲(chǔ)器中的數(shù)據(jù)送到ALU中去做運(yùn)算,并將運(yùn)算后的結(jié)果存回到存儲(chǔ)器中。
控制器還包含了一些控制信號(hào)。
5、控制器之所以知道數(shù)據(jù)放哪里、做什么運(yùn)算(比如是做加法還是邏輯運(yùn)算?)都是由指令告訴控制器的,每個(gè)指令對(duì)應(yīng)一個(gè)基本操作,比如加法運(yùn)算對(duì)應(yīng)一個(gè)指令。
6、例如,將兩個(gè)MDR寄存器(保存了來(lái)自內(nèi)存的兩個(gè)數(shù)據(jù))中的值拷貝到ALU中,然后根據(jù)指定的操作指令執(zhí)行加法運(yùn)算,將運(yùn)算結(jié)果拷貝會(huì)一個(gè)MDR寄存器中,最后寫入到內(nèi)存。
7、這就是馮諾依曼結(jié)構(gòu)圖,也就是現(xiàn)在計(jì)算機(jī)的結(jié)構(gòu)圖。
關(guān)于CPU的多核和多線程
1、CPU的物理個(gè)數(shù)由主板上的插槽數(shù)量決定,每個(gè)CPU可以有多核心,每核心可能會(huì)有多線程。
2、多核CPU的每核(每核都是一個(gè)小芯片),在OS看來(lái)都是一個(gè)獨(dú)立的CPU。
3、對(duì)于超線程CPU來(lái)說(shuō),每核CPU可以有多個(gè)線程(數(shù)量是兩個(gè),比如1核雙線程,2核4線程,4核8線程),每個(gè)線程都是一個(gè)虛擬的邏輯CPU(比如windows下是以邏輯處理器的名稱稱呼的),而每個(gè)線程在OS看來(lái)也是獨(dú)立的CPU。
這是欺騙操作系統(tǒng)的行為,在物理上仍然只有1核,只不過(guò)在超線程CPU的角度上看,它認(rèn)為它的超線程會(huì)加速程序的運(yùn)行。
4、要發(fā)揮超線程優(yōu)勢(shì),需要操作系統(tǒng)對(duì)超線程有專門的優(yōu)化。
5、多線程的CPU在能力上,比非多線程的CPU核心要更強(qiáng),但每個(gè)線程不足以與獨(dú)立的CPU核心能力相比較。
6、每核上的多線程CPU都共享該核的CPU資源。
例如,假設(shè)每核CPU都只有一個(gè)"發(fā)動(dòng)機(jī)"資源,那么線程1這個(gè)虛擬CPU使用了這個(gè)"發(fā)動(dòng)機(jī)"后,線程2就沒法使用,只能等待。
所以,超線程技術(shù)的主要目的是為了增加流水線(參見前文對(duì)流水線的解釋)上更多個(gè)獨(dú)立的指令,這樣線程1和線程2在流水線上就盡量不會(huì)爭(zhēng)搶該核CPU資源。所以,超線程技術(shù)利用了superscalar(超標(biāo)量)架構(gòu)的優(yōu)點(diǎn)。
7、多線程意味著每核可以有多個(gè)線程的狀態(tài)。比如某核的線程1空閑,線程2運(yùn)行。
8、多線程沒有提供真正意義上的并行處理,每核CPU在某一時(shí)刻仍然只能運(yùn)行一個(gè)進(jìn)程,因?yàn)榫€程1和線程2是共享某核CPU資源的??梢院?jiǎn)單的認(rèn)為每核CPU在獨(dú)立執(zhí)行進(jìn)程的能力上,有一個(gè)資源是唯一的,線程1獲取了該資源,線程2就沒法獲取。
但是,線程1和線程2在很多方面上是可以并行執(zhí)行的。比如可以并行取指、并行解碼、并行執(zhí)行指令等。所以雖然單核在同一時(shí)間只能執(zhí)行一個(gè)進(jìn)程,但線程1和線程2可以互相幫助,加速進(jìn)程的執(zhí)行。
并且,如果線程1在某一時(shí)刻獲取了該核執(zhí)行進(jìn)程的能力,假設(shè)此刻該進(jìn)程發(fā)出了IO請(qǐng)求,于是線程1掌握的執(zhí)行進(jìn)程的能力,就可以被線程2獲取,即切換到線程2。這是在執(zhí)行線程間的切換,是非常輕量級(jí)的。(WIKI: if resources for one process are not available, then another process can continue if its resources are available)
9、多線程可能會(huì)出現(xiàn)一種現(xiàn)象:假如2核4線程CPU,有兩個(gè)進(jìn)程要被調(diào)度,那么只有兩個(gè)線程會(huì)處于運(yùn)行狀態(tài),如果這兩個(gè)線程是在同一核上,則另一核完全空轉(zhuǎn),處于浪費(fèi)狀態(tài)。更期望的結(jié)果是每核上都有一個(gè)CPU分別調(diào)度這兩個(gè)進(jìn)程。
關(guān)于CPU上的高速緩存
1、最高速的緩存是CPU的寄存器,它們和CPU的材料相同,最靠近CPU或最接近CPU,訪問(wèn)它們沒有時(shí)延(<1ns)。但容量很小,小于1kb。
32bit:32__32比特=128字節(jié)
64bit:64__64比特=512字節(jié)
2、寄存器之下,是CPU的高速緩存。分為L(zhǎng)1緩存、L2緩存、L3緩存,每層速度按數(shù)量級(jí)遞減、容量也越來(lái)越大。
3、每核心都有一個(gè)自己的L1緩存。L1緩存分兩種:L1指令緩存(L1-icache)和L1數(shù)據(jù)緩存(L1-dcache)。L1指令緩存用來(lái)存放已解碼指令,L1數(shù)據(jù)緩存用來(lái)放訪問(wèn)非常頻繁的數(shù)據(jù)。
4、L2緩存用來(lái)存放近期使用過(guò)的內(nèi)存數(shù)據(jù)。更嚴(yán)格地說(shuō),存放的是很可能將來(lái)會(huì)被CPU使用的數(shù)據(jù)。
5、多數(shù)多核CPU的各核都各自擁有一個(gè)L2緩存,但也有多核共享L2緩存的設(shè)計(jì)。無(wú)論如何,L1是各核私有的(但對(duì)某核內(nèi)的多線程是共享的)。
操作系統(tǒng)之CPU知識(shí)掃盲
關(guān)于馮·諾依曼結(jié)構(gòu)
馮·諾依曼結(jié)構(gòu)(Von Neumann architecture)是一種將程序指令存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器合并在一起的計(jì)算機(jī)設(shè)計(jì)概念結(jié)構(gòu)。馮·諾依曼結(jié)構(gòu)隱約指導(dǎo)了將存儲(chǔ)設(shè)備與中央處理器分開?的概念,因此依本結(jié)構(gòu)設(shè)計(jì)出的計(jì)算機(jī)又稱存儲(chǔ)程序計(jì)算機(jī),這也是目前大多數(shù)計(jì)算機(jī)設(shè)計(jì)的主要參考原則。
最早的計(jì)算機(jī)器僅內(nèi)含固定用途的程序?,F(xiàn)代的某些計(jì)算機(jī)依然維持這樣的設(shè)計(jì)方式,通常是為了簡(jiǎn)化或教育目的。例如一個(gè)計(jì)算器僅有固定的數(shù)學(xué)計(jì)算程序,它不能拿來(lái)當(dāng)作文字處理軟件,更不能拿來(lái)玩游戲。若想要改變此機(jī)器的程序,你必須更改線路、更改結(jié)構(gòu)甚至重新設(shè)計(jì)此機(jī)器。當(dāng)然最早的計(jì)算機(jī)并沒有設(shè)計(jì)的那么可編程。當(dāng)時(shí)所謂的“重寫程序”很可能指的是紙筆設(shè)計(jì)程序步驟,接著制訂工程細(xì)節(jié),再施工將機(jī)器的電路配線或結(jié)構(gòu)改變。
而存儲(chǔ)程序型計(jì)算機(jī)的概念改變了這一切。借由創(chuàng)造一組指令集結(jié)構(gòu),并將所謂的運(yùn)算轉(zhuǎn)化成一串程序指令的運(yùn)行細(xì)節(jié),可讓程序運(yùn)行時(shí)自我修改程序的運(yùn)算內(nèi)容,讓此機(jī)器更有彈性。借著將指令當(dāng)成一種特別類型的靜態(tài)數(shù)據(jù),一臺(tái)存儲(chǔ)程序型計(jì)算機(jī)可輕易改變其程序,并在程控下改變其運(yùn)算內(nèi)容。 馮·諾伊曼結(jié)構(gòu)與存儲(chǔ)程序型計(jì)算機(jī)是互相通用的名詞。而哈佛結(jié)構(gòu)則是一種將程序數(shù)據(jù)與普通數(shù)據(jù)分開存儲(chǔ)的設(shè)計(jì)概念,但是它并未完全突破馮.諾伊曼架構(gòu)。
CPU執(zhí)行原理
CPU的主要運(yùn)作原理,不論其外觀,都是執(zhí)行儲(chǔ)存于被稱為程序里的一系列指令。在此討論的是遵循普遍的馮·諾伊曼結(jié)構(gòu)(von Neumann architecture)設(shè)計(jì)的裝置。程序以一系列數(shù)字儲(chǔ)存在計(jì)算機(jī)存儲(chǔ)器中。差不多所有的馮·諾伊曼CPU的運(yùn)作原理可分為四個(gè)階段:提取、解碼、執(zhí)行和寫回。
(1)提取
從程序內(nèi)存中檢索指令(為數(shù)值或一系列數(shù)值)。由程序計(jì)數(shù)器指定程序存儲(chǔ)器的位置,程序計(jì)數(shù)器保存供識(shí)別目前程序位置的數(shù)值。換言之,程序計(jì)數(shù)器記錄了CPU在目前程序里的蹤跡。提取指令之后,PC根據(jù)指令式長(zhǎng)度增加存儲(chǔ)器單元[iwordlength]。指令的提取常常必須從相對(duì)較慢的存儲(chǔ)器查找,導(dǎo)致CPU等候指令的送入。這個(gè)問(wèn)題主要被論及在現(xiàn)代處理器的緩存和管線化架構(gòu)。
(2)解碼
CPU根據(jù)從存儲(chǔ)器提取到的指令來(lái)決定其執(zhí)行行為。在解碼階段,指令被拆解為有意義的片斷。根據(jù)CPU的指令集架構(gòu)(ISA)定義將數(shù)值解譯為指令[isa]。一部分的指令數(shù)值為運(yùn)算碼,其指示要進(jìn)行哪些運(yùn)算。其它的數(shù)值通常供給指令必要的信息
(3)執(zhí)行
在提取和解碼階段之后,接著進(jìn)入執(zhí)行階段。該階段中,連接到各種能夠進(jìn)行所需運(yùn)算的CPU部件。例如,要求一個(gè)加法運(yùn)算,算術(shù)邏輯單元將會(huì)連接到一組輸入和一組輸出。輸入提供了要相加的數(shù)值,而且在輸出將含有總和結(jié)果。ALU內(nèi)含電路系統(tǒng),以于輸出端完成簡(jiǎn)單的普通運(yùn)算和邏輯運(yùn)算(比如加法和比特運(yùn)算)。如果加法運(yùn)算產(chǎn)生一個(gè)對(duì)該CPU處理而言過(guò)大的結(jié)果,在標(biāo)志寄存器里,溢出標(biāo)志可能會(huì)被設(shè)置
(4)寫回
最終階段,寫回,以一定格式將執(zhí)行階段的結(jié)果簡(jiǎn)單的寫回。運(yùn)算結(jié)果經(jīng)常被寫進(jìn)CPU內(nèi)部的寄存器,以供隨后指令快速訪問(wèn)。在其它案例中,運(yùn)算結(jié)果可能寫進(jìn)速度較慢,如容量較大且較便宜的主存
注意,這上面的4個(gè)階段與我們編寫程序是非常相關(guān)的,但編程語(yǔ)言里面可能會(huì)簡(jiǎn)化,并把2和3階段合并,分為:加載,處理,寫回。在多線程編程里面,了解這幾個(gè)概念至關(guān)重要,由此可以延伸,數(shù)據(jù)從哪里加載,在哪里執(zhí)行,最后結(jié)果又寫回了哪里。指令數(shù)據(jù)一般從內(nèi)存里面加載,但是內(nèi)存的訪問(wèn)時(shí)間,相比cpu慢了n多倍,所以為了加速處理,cpu一般把指令給加載到離cpu更近的寄存器里面,或者是L1,L2,L3的cache來(lái)提速,最終計(jì)算出來(lái)的結(jié)果,還要寫回內(nèi)存。正是因?yàn)閏pu執(zhí)行指令復(fù)雜,所以這里面其實(shí)牽扯到很多問(wèn)題,比如多個(gè)線程如何協(xié)作處理任務(wù),以及如何保證程序數(shù)據(jù)的原子性,有序性,可見性。而這正是Java的內(nèi)存模型出現(xiàn)的意義。在其他不同的編程語(yǔ)言里面其實(shí)都有在操作系統(tǒng)之上抽象的內(nèi)存模型來(lái)應(yīng)對(duì)不同的cpu架構(gòu)的的差異,這一點(diǎn)需要注意。
多個(gè)單核CPU vs 單個(gè)多核CPU
多個(gè)單核CPU:
成本更高,因?yàn)槊總€(gè)CPU都需要一定的線路電路支持,這樣對(duì)主板上布局布線極為不便。并且當(dāng)運(yùn)行多線程任務(wù)時(shí),多線程間通信協(xié)同合作也是一個(gè)問(wèn)題。依賴總線的傳輸,速度較慢,且每一個(gè)線程因?yàn)檫\(yùn)行在不同的CPU上。導(dǎo)致不同線程間各開一個(gè)Cache,會(huì)造成資源的浪費(fèi),同時(shí)如果線程間協(xié)作就會(huì)有冗余數(shù)據(jù)的產(chǎn)生,更加大了內(nèi)存的開銷。
單個(gè)多核CPU:
可以很好地規(guī)避基本上多個(gè)單核CPU提到的所有缺點(diǎn)。他不需要考慮硬件上的開銷以及復(fù)雜性問(wèn)題,同時(shí)也可以很好地解決多線程間協(xié)同工作的問(wèn)題,減少內(nèi)存的開銷,因?yàn)槎嗑€程程序在多核CPU中運(yùn)行是共用一塊內(nèi)存區(qū)的,數(shù)據(jù)的傳輸速度比總線來(lái)的要快同時(shí)不會(huì)有冗余數(shù)據(jù)的產(chǎn)生。單個(gè)多核CPU的問(wèn)題也是顯而易見的,假設(shè)倆大程序,每一個(gè)程序都好多線程還幾乎用滿cache,它們分時(shí)使用CPU,那在程序間切換的時(shí)候,光指令和數(shù)據(jù)的替換就是個(gè)問(wèn)題。
單個(gè)多核cpu已經(jīng)成為個(gè)人計(jì)算機(jī)的主流配置,多個(gè)多核的cpu在一些大型的服務(wù)器里面也很常見。
超線程
“超線程”(Hyperthreading Technology)技術(shù)就是通過(guò)采用特殊的硬件指令,可以把兩個(gè)邏輯內(nèi)核模擬成兩個(gè)物理超線程芯片,在單處理器中實(shí)現(xiàn)線程級(jí)的并行計(jì)算,同時(shí)在相應(yīng)的軟硬 件的支持下大幅度的提高運(yùn)行效能,從而使單處理器上模擬雙處理器的效能。其實(shí),從實(shí)質(zhì)上說(shuō),超線程是一種可以將CPU內(nèi)部暫時(shí)閑置處理資源充分“調(diào)動(dòng)”起來(lái)的技術(shù)。
每個(gè)單位時(shí)間內(nèi),CPU只能處理一個(gè)線程,以這樣的單位進(jìn)行,如果想要在單位時(shí)間內(nèi)處理超過(guò)一個(gè)的線程,是不可能的,除非是有兩個(gè)核心處理單元,英特爾的HT技術(shù)便是以單個(gè)核心處理單元,去整合兩個(gè)邏輯處理單元,也就是一個(gè)實(shí)體核心,兩個(gè)邏輯核心,在單位時(shí)間內(nèi)處理兩個(gè)線程,模擬雙核心運(yùn)作。
簡(jiǎn)單的說(shuō),超線程就是在單個(gè)core中,模擬出兩個(gè)邏輯處理單元,以此能夠提高程序執(zhí)行的并發(fā)能力,提高系統(tǒng)cpu資源的利用率。
至此,關(guān)于CPU的個(gè)數(shù),核數(shù),邏輯CPU的個(gè)數(shù)計(jì)算關(guān)系如下:
(1)總核數(shù) = 物理CPU個(gè)數(shù) __ 每顆物理CPU的核數(shù)
(2)總邏輯CPU數(shù) = 物理CPU個(gè)數(shù) __ 每顆物理CPU的核數(shù) __ 超線程數(shù)
一些概念解釋如下:
舉例,在一個(gè)Mac Pro的機(jī)器上,可以通過(guò)關(guān)于本機(jī),系統(tǒng)報(bào)告選項(xiàng)中,看到當(dāng)前系統(tǒng)的基本配置情況,如下:
比如上面的信息中,顯示了當(dāng)前的系統(tǒng)物理上只擁有一個(gè)cpu,但是這個(gè)cpu有4個(gè)核。然后,我們查詢其邏輯cpu的個(gè)數(shù),會(huì)發(fā)現(xiàn)顯示是8個(gè):(在Mac上打開活動(dòng)監(jiān)視器,然后雙擊最下面的中間的cpu負(fù)載的地方,就可以看到)
這就是因?yàn)槊總€(gè)核又有2個(gè)超線程,所以8個(gè)邏輯cpu個(gè)數(shù)=1物理cpu個(gè)數(shù) __ 4核 __ 2個(gè)超線程,最終也就是說(shuō)如果我要編寫一個(gè)多線程計(jì)算密集型的程序任務(wù),起的線程數(shù)可以以邏輯cpu的個(gè)數(shù)作為參照。當(dāng)然如果是io密集型的任務(wù),可以開的更多一點(diǎn)。
CPU性能參數(shù)
計(jì)算機(jī)的性能在很大程度上由CPU的性能決定,而CPU的性能主要體現(xiàn)在其運(yùn)行程序的速度上。影響運(yùn)行速度的性能指標(biāo)包括CPU的工作頻率、Cache容量、指令系統(tǒng)和邏輯結(jié)構(gòu)等參數(shù)。
大多數(shù)情況下,我們主要關(guān)注的是CPU的主頻,也稱時(shí)鐘頻率,是指同步電路中時(shí)鐘的基礎(chǔ)頻率,它以“每秒時(shí)鐘周期”(clock cycles per second)來(lái)度量,單位是兆赫(MHz)或千兆赫(GHz)用來(lái)表示CPU的運(yùn)算、處理數(shù)據(jù)的速度。通常,主頻越高,CPU處理數(shù)據(jù)的速度就越快。
在上面的mac的參數(shù)里面,我們能夠看到在Intel Core i7處理器下,主頻是2.2 GHz,當(dāng)前主頻高的處理器也在4 GHz之內(nèi),其主要原因主要在于散熱,提高主頻超過(guò)一定范圍后熱密度急速提高,很不經(jīng)濟(jì),也造成散熱困難。
總結(jié)
本文主要介紹了計(jì)算機(jī)操作系統(tǒng)中CPU有關(guān)的知識(shí),計(jì)算機(jī)的核心就在于CPU,了解CPU相關(guān)的知識(shí),可以讓我們更清楚我們的程序底層執(zhí)行的過(guò)程,從而寫出更健壯的代碼及調(diào)優(yōu)相關(guān)的程序。
CPU科普知識(shí)
CPU歷來(lái)都是一個(gè)高大上的話題,普通吃瓜群眾除了CPU越貴越好之外,可能就一無(wú)所知了。曾經(jīng)小編對(duì)于CPU也是一頭霧水,后來(lái)請(qǐng)教了很多大神,又查閱了很多資料,才粗略地搞明白了一點(diǎn)。在此,小編就按照自己的理解,盡量用最通俗的語(yǔ)言去撕開CPU神秘的面紗,讓更多人能夠明白CPU。
CPU的中文翻譯叫中央處理器,好吧,這其實(shí)只是一句廢話,不過(guò)為了這個(gè)牛逼的翻譯,我們也給它一個(gè)牛逼的比喻,那我們就把CPU比喻成一個(gè)國(guó)家的中央機(jī)構(gòu),接下來(lái)我們一一對(duì)應(yīng)打比喻講解。
影響CPU性能的主要因素可以分為兩大塊:主頻和架構(gòu)。這里看不懂不要緊,接下來(lái)聽小編為你一一解釋就懂了。
主頻我們可以理解為中央部門的工作能力,架構(gòu)可以理解為國(guó)家的管理制度,主要用于協(xié)調(diào)中央機(jī)構(gòu)各部門之間的工作。所以整個(gè)中央機(jī)構(gòu)的工作效率(CPU性能)主要就是受到這兩個(gè)方面的影響。工作能力越高各部門之間協(xié)調(diào)越好,整體工作效率自然就越高。反之,任何一方面不夠好,都會(huì)對(duì)整體工作效率造成明顯的影響。
我們知道市面上最大的PC處理器主要由兩大品牌Intel和AMD壟斷,而大部分時(shí)間里,Intel都是壓著AMD打的,原因就是因?yàn)锳MD的架構(gòu)不行,雖然主頻對(duì)比Intel不落下風(fēng)甚至稍微領(lǐng)先,但是整體性能卻被Intel徹底壓制了。這就是因?yàn)锳MD的中央機(jī)構(gòu)各部門協(xié)調(diào)能力比Intel差多了,所以即使工作能力差不多,但協(xié)調(diào)不好,所以整體工作性能就比不過(guò)了。
說(shuō)完了性能接下來(lái)我們就來(lái)說(shuō)說(shuō)CPU的結(jié)構(gòu)和工作原理。
CPU的結(jié)構(gòu)主要由運(yùn)算器、控制器、寄存器三大塊組成。
①運(yùn)算器就是中央機(jī)構(gòu)里負(fù)責(zé)執(zhí)行任務(wù)的部門,也就是專門干活的;而控制器就是中央機(jī)構(gòu)的領(lǐng)導(dǎo)小組,針對(duì)不同需要,給運(yùn)算器下達(dá)不同的命令;寄存器可以理解為控制器和運(yùn)算器之間的聯(lián)絡(luò)小組,主要工作就是協(xié)調(diào)控制器和運(yùn)算器。
運(yùn)算器這個(gè)干活的部門,平日里整個(gè)中央機(jī)構(gòu)要干點(diǎn)啥事就找這個(gè)部門。例如東邊洪災(zāi)了,你去賑災(zāi)吧;西邊發(fā)現(xiàn)金礦了,你去主導(dǎo)挖礦吧;北邊下大雪了,你去送溫暖吧;南邊下暴雨了,你去疏導(dǎo)洪流吧……
②而控制器這個(gè)部門比較牛逼,他們是不用干活的,主要就是對(duì)國(guó)家(整部計(jì)算機(jī))發(fā)生的各種情況,做出應(yīng)對(duì),然后讓運(yùn)算器去把活干好。在這里,我們會(huì)發(fā)現(xiàn)一個(gè)大問(wèn)題:如果這個(gè)部門閑的蛋疼,亂下命令怎么辦?這也好辦,我們就制定出一套行為規(guī)范來(lái)限制他們,不讓他們亂搞。而這套行為規(guī)范就是CPU的指令集。
指令集就是CPU的行為規(guī)范,所有的命令都必須嚴(yán)格按照這部行為規(guī)范來(lái)執(zhí)行。在這里說(shuō)明一下不同類型的CPU指令集也不一樣,其中最常見的就是__86架構(gòu)下的復(fù)雜指令集和ARM架構(gòu)下的簡(jiǎn)單指令集。__86就是我們平常電腦CPU的架構(gòu),ARM就是手機(jī)CPU的架構(gòu)。
由于電腦CPU這個(gè)中央機(jī)構(gòu)所在的國(guó)家(電腦)面積大、人口多、國(guó)情復(fù)雜,啥事都會(huì)發(fā)生,所以規(guī)章制度就需要特別完善,考慮到方方面面的情況要怎么應(yīng)對(duì)。而手機(jī)CPU這個(gè)中央機(jī)構(gòu)國(guó)家小、人口少、面積窄,所以規(guī)章制度簡(jiǎn)單一點(diǎn)就可以了。這就是復(fù)雜指令集和簡(jiǎn)單指令集的區(qū)別。
③寄存器這個(gè)部門稍微復(fù)雜一點(diǎn),因?yàn)樗m然沒有運(yùn)算器和控制器那么重要,但是它P事多,控制器平時(shí)總喜歡讓寄存器去給運(yùn)算器傳達(dá)個(gè)命令。而運(yùn)算器有時(shí)候也會(huì)擔(dān)心數(shù)據(jù)太多一時(shí)處理不過(guò)來(lái),就讓寄存器幫它先記著,有時(shí)候工作需要紙筆、螺絲刀之類的小工具,也讓寄存器幫它拿著。
了解完寄存器的功能后,又發(fā)現(xiàn)了一個(gè)問(wèn)題,如果控制部門下達(dá)的命令太多,而運(yùn)算部門又沒那么快可以做完,又或者運(yùn)算器讓它記住的東西或者臨時(shí)拿著的東西太多,寄存器部門太小,人太少,忙不過(guò)來(lái)怎么辦?好辦,擴(kuò)招人員吧,可是這個(gè)部門的人員都是編制內(nèi)的,沒有在編名額了怎么辦?也好辦,那就招些編外人員吧,也就是我們常說(shuō)的臨時(shí)工。
招了臨時(shí)工,總要給他個(gè)名號(hào)吧,那就再成立一個(gè)部門,叫高速緩存。為了體現(xiàn)親疏有別,這個(gè)部門把臨時(shí)工分為三個(gè)等級(jí),分別是一級(jí)高速緩存、二級(jí)高速緩存、三級(jí)高速緩存。反正也是臨時(shí)工,名號(hào)就這么隨便叫吧。
在CPU這個(gè)中央機(jī)構(gòu)可跟新聞上說(shuō)的事給臨時(shí)工做、鍋給臨時(shí)工背不同,在這里高速緩存這個(gè)臨時(shí)工部門是作為寄存器替補(bǔ)而存在的,也是說(shuō),必須在寄存器完成不了工作量時(shí),才能交給高速緩存來(lái)做。一開始交給一級(jí)高速緩存來(lái)做,一級(jí)也做不完再給二級(jí),二級(jí)還做不完就給三級(jí)。這里又有一個(gè)問(wèn)題出現(xiàn)了,那就是如果三級(jí)也做不完怎么辦?
這完全沒問(wèn)題,交給中央機(jī)構(gòu)的一個(gè)下屬部門去辦,這個(gè)部門就是內(nèi)存。但是因?yàn)閮?nèi)存畢竟不屬于中央機(jī)構(gòu),工作能力沒有中央機(jī)構(gòu)人員那么強(qiáng),效率也沒有那么高。
所以控制部門要下達(dá)命令或者運(yùn)算部門要做事時(shí),首先想到的就是寄存器,寄存器忙不過(guò)來(lái)了就找高速緩存幫忙,高速緩存也忙不過(guò)來(lái)就找內(nèi)存幫忙。那么,內(nèi)存也傳達(dá)不過(guò)來(lái)呢?內(nèi)存?zhèn)鬟_(dá)不過(guò)來(lái)那就沒辦法了,只能讓電腦卡著吧,等運(yùn)算部門先把上一件事處理好再說(shuō)。所以,買電腦,不能光看CPU牛不牛,內(nèi)存容量也要跟上。
還有一個(gè)容易被大家忽略的問(wèn)題,在這里也說(shuō)一下吧,那就是晶體管。晶體管是構(gòu)成CPU最基礎(chǔ)的原件,可以理解為整個(gè)中央機(jī)構(gòu)的工作人員。隨著科技的進(jìn)步,CPU生產(chǎn)工藝越來(lái)越精細(xì),目前手機(jī)端CPU(ARM架構(gòu))制程已經(jīng)提升到7nm,電腦端也達(dá)到了14nm。
制程的提升,我們可以理解為,縮減每個(gè)辦公人員的辦公面積,以前科技不發(fā)達(dá)每個(gè)辦公人員必須配一個(gè)獨(dú)立辦公室,才能有效完成工作,現(xiàn)在技術(shù)進(jìn)步了,每個(gè)辦公人員只需要一張辦公桌就能完成工作了。所以同樣的一棟大樓,可以容納的辦公人員(晶體管)就多了,工作能力就上升了。
以前一個(gè)CPU由于制程落后,只能容納幾千萬(wàn)或者幾億個(gè)晶體管,現(xiàn)在制程進(jìn)步了,一個(gè)同樣體積的CPU可以容納幾十億個(gè)晶體管,性能自然就提升了。
那么,為什么晶體管數(shù)量增加了,CPU的能耗卻沒有增加呢?我們可以這么理解,每個(gè)工作人員都需要吃飽了才有力氣干活,以前的工作人員需要吃九菜一湯才夠力氣,現(xiàn)在改為營(yíng)養(yǎng)配餐了,每個(gè)工作人員只需要吃一片營(yíng)養(yǎng)藥丸就可以工作了,所以工作人員雖然增加了,但是整體伙食成本(耗電量)并沒有增加。
最后,我們說(shuō)一下CPU的核心和進(jìn)程又是什么呢?我們可以這么理解,在單核時(shí)代,每個(gè)CPU只有一個(gè)核心,也就是只有一個(gè)中央機(jī)構(gòu),但是國(guó)家那么大,事那么多,中央機(jī)構(gòu)每天加班25個(gè)小時(shí)都忙不完了。那就沒辦法了,擴(kuò)充中央機(jī)構(gòu)吧。于是乎雙核、四核、多核CPU就出來(lái)了。每一個(gè)核心都是一個(gè)獨(dú)立的中央機(jī)構(gòu),都具有相同的工作能力。
這么多個(gè)中央機(jī)構(gòu)成立了,那聽誰(shuí)的,有事情交給哪個(gè)中央機(jī)構(gòu)去做,要知道它們的權(quán)利和功能都是一樣的啊。這時(shí)候就要改變CPU架構(gòu)了,也就是國(guó)家的管理制度了。以前國(guó)家只有一個(gè)中央機(jī)構(gòu),啥事都交給它去做準(zhǔn)沒錯(cuò),現(xiàn)在突然變成好幾個(gè)中央機(jī)構(gòu)了,怎么辦?
這個(gè)時(shí)候就需要為每個(gè)核心安排去負(fù)責(zé)不同的事務(wù)了,這套中央機(jī)構(gòu)專門負(fù)責(zé)農(nóng)業(yè),那套負(fù)責(zé)工業(yè),剩下的負(fù)責(zé)稅收、財(cái)政等等之類的。
那什么是進(jìn)程呢,進(jìn)程其實(shí)可以理解為一個(gè)中央機(jī)構(gòu)里面的人員組成。有時(shí)候事太多了,光這幾個(gè)中央機(jī)構(gòu)處理起來(lái)還是有點(diǎn)吃力,但是為了節(jié)約成本,我們不能再組建新的中央機(jī)構(gòu)了,那就只好折中處理,不另外成立新的中央機(jī)構(gòu)了,就在原有的基礎(chǔ)上,每個(gè)中央機(jī)構(gòu)組建兩套完全一致的工作班子吧。
所以,4核CPU就是擁有四個(gè)獨(dú)立的中央機(jī)構(gòu),都具備相同的工作能力和權(quán)限,但是每個(gè)核心都會(huì)負(fù)責(zé)不同的事務(wù)。4核8線程就是四個(gè)獨(dú)立的中央機(jī)構(gòu),每一個(gè)中央機(jī)構(gòu)都擁有兩套完整的工作班子,每套工作班子權(quán)限也一樣。
這時(shí)候問(wèn)題又出現(xiàn)了,例如某個(gè)中央機(jī)構(gòu)負(fù)責(zé)的事特別多,忙不過(guò)來(lái),而其他的中央機(jī)構(gòu)負(fù)責(zé)的事很少,閑的發(fā)慌,那怎么辦?這時(shí)候,我們的架構(gòu)又出現(xiàn)了,好辦!今天你這個(gè)核心負(fù)責(zé)的事多,就你來(lái)主導(dǎo),讓其他事少的核心輔助你工作。明天另外一個(gè)核心負(fù)責(zé)的事多,就由它來(lái)主導(dǎo),其他核心輔助它工作。
在這里小編想起來(lái)一個(gè)網(wǎng)上很火的段子:MTK的CPU一核有難九核圍觀。這就是架構(gòu)落后造成的,它的管理制度不完善,沒辦法調(diào)節(jié)每個(gè)中央機(jī)構(gòu)之間的互相配合,有事情要做,往死里用一個(gè)核心,其他九個(gè)核心啥事沒有,只好吃瓜圍觀了。
所以,在最后,重申一遍,CPU架構(gòu)很重要!!!
CPU基礎(chǔ)知識(shí)大全相關(guān)文章:
CPU基礎(chǔ)知識(shí)大全
上一篇:CPU基本知識(shí)大全
下一篇:沒有了