欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
深入淺出之CPU原理
本文希望以比較通俗的語(yǔ)言深入介紹一下CPU的原理。
一、 指令系統
要講CPU,就必須先講一下指令系統。指令系統指的是一個(gè)CPU所能夠處理的全部指令的集合,是一個(gè)CPU的根本屬性。比如我們現在所用的CPU都是采用x86指令集的,他們都是同一類(lèi)型的CPU,不管是PIII、Athlon或Joshua。我們也知道,世界上還有比PIII和Athlon快得多的CPU,比如Alpha,但它們不是用x86指令集,不能使用數量龐大的基于x86指令集的程序,如Windows98。之所以說(shuō)指令系統是一個(gè)CPU的根本屬性,是因為指令系統決定了一個(gè)CPU能夠運行什么樣的程序。
所有采用高級語(yǔ)言編出的程序,都需要翻譯(編譯或解釋?zhuān)┏蔀闄C器語(yǔ)言后才能運行,這些機器語(yǔ)言中所包含的就是一條條的指令。
1、 指令的格式
一條指令一般包括兩個(gè)部分:操作碼和地址碼。操作碼其實(shí)就是指令序列號,用來(lái)告訴CPU需要執行的是那一條指令。地址碼則復雜一些,主要包括源操作數地址、目的地址和下一條指令的地址。在某些指令中,地址碼可以部分或全部省略,比如一條空指令就只有操作碼而沒(méi)有地址碼。
舉個(gè)例子吧,某個(gè)指令系統的指令長(cháng)度為32位,操作碼長(cháng)度為8位,地址長(cháng)度也為8位,且第一條指令是加,第二條指令是減。當它收到一個(gè)“00000010000001000000000100000110”的指令時(shí),先取出它的前8位操作碼,即00000010,分析得出這是一個(gè)減法操作,有3個(gè)地址,分別是兩個(gè)源操作數地址和一個(gè)目的地址。于是,CPU就到內存地址00000100處取出被減數,到00000001處取出減數,送到ALU中進(jìn)行減法運算,然后把結果送到00000110處。
這只是一個(gè)相當簡(jiǎn)單化的例子,實(shí)際情況要復雜的多。
2、 指令的分類(lèi)與尋址方式
一般說(shuō)來(lái),現在的指令系統有以下幾種類(lèi)型的指令:
(1)算術(shù)邏輯運算指令
算術(shù)邏輯運算指令包括加減乘除等算術(shù)運算指令,以及與或非異或等邏輯運算指令?,F在的指令系統還加入了一些十進(jìn)制運算指令以及字符串運算指令等。
(2)浮點(diǎn)運算指令
用于對浮點(diǎn)數進(jìn)行運算。浮點(diǎn)運算要大大復雜于整數運算,所以CPU中一般還會(huì )有專(zhuān)門(mén)負責浮點(diǎn)運算的浮點(diǎn)運算單元?,F在的浮點(diǎn)指令中一般還加入了向量指令,用于直接對矩陣進(jìn)行運算,對于現在的多媒體和3D處理很有用。
(3)位操作指令
學(xué)過(guò)C的人應該都知道C語(yǔ)言中有一組位操作語(yǔ)句,相對應的,指令系統中也有一組位操作指令,如左移一位右移一位等。對于計算機內部以二進(jìn)制不碼表示的數據來(lái)說(shuō),這種操作是非常簡(jiǎn)單快捷的。
(4)其他指令
上面三種都是運算型指令,除此之外還有許多非運算的其他指令。這些指令包括:數據傳送指令、堆棧操作指令、轉移類(lèi)指令、輸入輸出指令和一些比較特殊的指令,如特權指令、多處理器控制指令和等待、停機、空操作等指令。
對于指令中的地址碼,也會(huì )有許多不同的尋址(編址)方式,主要有直接尋址,間接尋址,寄存器尋址,基址尋址,變址尋址等,某些復雜的指令系統會(huì )有幾十種甚至更多的尋址方式。
3、 CISC與RISC
CISC,Complex Instruction Set Computer,復雜指令系統計算機。RISC,Reduced Instruction Set Computer,精簡(jiǎn)指令系統計算機。雖然這兩個(gè)名詞是針對計算機的,但下文我們仍然只對指令集進(jìn)行研究。
(1)CISC的產(chǎn)生、發(fā)展和現狀
一開(kāi)始,計算機的指令系統只有很少一些基本指令,而其他的復雜指令全靠軟件編譯時(shí)通過(guò)簡(jiǎn)單指令的組合來(lái)實(shí)現。舉個(gè)最簡(jiǎn)單的例子,一個(gè)a乘以b的操作就可以轉換為a個(gè)b相加來(lái)做,這樣就用不著(zhù)乘法指令了。當然,最早的指令系統就已經(jīng)有乘法指令了,這是為什么呢?因為用硬件實(shí)現乘法比加法組合來(lái)得快得多。
由于那時(shí)的計算機部件相當昂貴,而且速度很慢,為了提高速度,越來(lái)越多的復雜指令被加入了指令系統中。但是,很快又有一個(gè)問(wèn)題:一個(gè)指令系統的指令數是受指令操作碼的位數所限制的,如果操作碼為8位,那么指令數最多為256條(2的8次方)。
那么怎么辦呢?指令的寬度是很難增加的,聰明的設計師們又想出了一種方案:操作碼擴展。前面說(shuō)過(guò),操作碼的后面跟的是地址碼,而有些指令是用不著(zhù)地址碼或只用少量的地址碼的。那么,就可以把操作碼擴展到這些位置。
舉個(gè)簡(jiǎn)單的例子,如果一個(gè)指令系統的操作碼為2位,那么可以有00、01、10、11四條不同的指令?,F在把11作為保留,把操作碼擴展到4位,那么就可以有00、01、10、1100、1101、1110、1111七條指令。其中1100、1101、1110、1111這四條指令的地址碼必須少兩位。
然后,為了達到操作碼擴展的先決條件:減少地址碼,設計師們又動(dòng)足了腦筋,發(fā)明了各種各樣的尋址方式,如基址尋址、相對尋址等,用以最大限度的壓縮地址碼長(cháng)度,為操作碼留出空間。
就這樣,慢慢地,CISC指令系統就形成了,大量的復雜指令、可變的指令長(cháng)度、多種的尋址方式是CISC的特點(diǎn),也是CISC的缺點(diǎn):因為這些都大大增加了解碼的難度,而在現在的高速硬件發(fā)展下,復雜指令所帶來(lái)的速度提升早已不及在解碼上浪費點(diǎn)的時(shí)間。除了個(gè)人PC市場(chǎng)還在用x86指令集外,服務(wù)器以及更大的系統都早已不用CISC了。x86仍然存在的唯一理由就是為了兼容大量的x86平臺上的軟件。
(2)RISC的產(chǎn)生、發(fā)展和現狀
1975年,IBM的設計師John Cocke研究了當時(shí)的IBM370CISC系統,發(fā)現其中占總指令數僅20%的簡(jiǎn)單指令卻在程序調用中占了80%,而占指令數80%的復雜指令卻只有20%的機會(huì )用到。由此,他提出了RISC的概念。事實(shí)證明,RISC是成功的。80年代末,各公司的RISC CPU如雨后春筍般大量出現,占據了大量的市場(chǎng)。到了90年代,x86的CPU如pentium和k5也開(kāi)始使用先進(jìn)的RISC核心。
RISC的最大特點(diǎn)是指令長(cháng)度固定,指令格式種類(lèi)少,尋址方式種類(lèi)少,大多數是簡(jiǎn)單指令且都能在一個(gè)時(shí)鐘周期內完成,易于設計超標量與流水線(xiàn),寄存器數量多,大量操作在寄存器之間進(jìn)行。由于下文所講的CPU核心大部分是講RISC核心,所以這里就不多介紹了,對于RISC核心的設計下面會(huì )詳細談到。
RISC目前正如日中天,Intel的Itanium也將最終拋棄x86而轉向RISC結構。
二、CPU內核結構
好吧,下面來(lái)看看CPU。CPU內核主要分為兩部分:運算器和控制器。
(一) 運算器
1、 算術(shù)邏輯運算單元ALU(Arithmetic and Logic Unit)
ALU主要完成對二進(jìn)制數據的定點(diǎn)算術(shù)運算(加減乘除)、邏輯運算(與或非異或)以及移位操作。在某些CPU中還有專(zhuān)門(mén)用于處理移位操作的移位器。
通常ALU由兩個(gè)輸入端和一個(gè)輸出端。整數單元有時(shí)也稱(chēng)為IEU(Integer Execution Unit)。我們通常所說(shuō)的“CPU是XX位的”就是指ALU所能處理的數據的位數。
2、 浮點(diǎn)運算單元FPU(Floating Point Unit)
FPU主要負責浮點(diǎn)運算和高精度整數運算。有些FPU還具有向量運算的功能,另外一些則有專(zhuān)門(mén)的向量處理單元。
3、通用寄存器組
通用寄存器組是一組最快的存儲器,用來(lái)保存參加運算的操作數和中間結果。在通用寄存器的設計上,RISC與CISC有著(zhù)很大的不同。CISC的寄存器通常很少,主要是受了當時(shí)硬件成本所限。比如x86指令集只有8個(gè)通用寄存器。所以,CISC的CPU執行是大多數時(shí)間是在訪(fǎng)問(wèn)存儲器中的數據,而不是寄存器中的。這就拖慢了整個(gè)系統的速度。而RISC系統往往具有非常多的通用寄存器,并采用了重疊寄存器窗口和寄存器堆等技術(shù)使寄存器資源得到充分的利用。
對于x86指令集只支持8個(gè)通用寄存器的缺點(diǎn),Intel和AMD的最新CPU都采用了一種叫做“寄存器重命名”的技術(shù),這種技術(shù)使x86CPU的寄存器可以突破8個(gè)的限制,達到32個(gè)甚至更多。不過(guò),相對于RISC來(lái)說(shuō),這種技術(shù)的寄存器操作要多出一個(gè)時(shí)鐘周期,用來(lái)對寄存器進(jìn)行重命名。
4、 專(zhuān)用寄存器
專(zhuān)用寄存器通常是一些狀態(tài)寄存器,不能通過(guò)程序改變,由CPU自己控制,表明某種狀態(tài)。
(二) 控制器
運算器只能完成運算,而控制器用于控制著(zhù)整個(gè)CPU的工作。
1、 指令控制器
指令控制器是控制器中相當重要的部分,它要完成取指令、分析指令等操作,然后交給執行單元(ALU或FPU)來(lái)執行,同時(shí)還要形成下一條指令的地址。
2、 時(shí)序控制器
時(shí)序控制器的作用是為每條指令按時(shí)間順序提供控制信號。時(shí)序控制器包括時(shí)鐘發(fā)生器和倍頻定義單元,其中時(shí)鐘發(fā)生器由石英晶體振蕩器發(fā)出非常穩定的脈沖信號,就是CPU的主頻;而倍頻定義單元則定義了CPU主頻是存儲器頻率(總線(xiàn)頻率)的幾倍。
3、 總線(xiàn)控制器
總線(xiàn)控制器主要用于控制CPU的內外部總線(xiàn),包括地址總線(xiàn)、數據總線(xiàn)、控制總線(xiàn)等等。
4、中斷控制器
中斷控制器用于控制各種各樣的中斷請求,并根據優(yōu)先級的高低對中斷請求進(jìn)行排隊,逐個(gè)交給CPU處理。
(三) CPU核心的設計
CPU的性能是由什么決定的呢?單純的一個(gè)ALU速度在一個(gè)CPU中并不起決定性作用,因為ALU的速度都差不多。而一個(gè)CPU的性能表現的決定性因素就在于CPU內核的設計。
1、超標量(Superscalar)
既然無(wú)法大幅提高ALU的速度,有什么替代的方法呢?并行處理的方法又一次產(chǎn)生了強大的作用。所謂的超標量CPU,就是只集成了多個(gè)ALU、多個(gè)FPU、多個(gè)譯碼器和多條流水線(xiàn)的CPU,以并行處理的方式來(lái)提高性能。
超標量技術(shù)應該是很容易理解的,不過(guò)有一點(diǎn)需要注意,就是不要去管“超標量”之前的那個(gè)數字,比如“9路超標量”,不同的廠(chǎng)商對于這個(gè)數字有著(zhù)不同的定義,更多的這只是一種商業(yè)上的宣傳手段。
2、流水線(xiàn)(Pipeline)
流水線(xiàn)是現代RISC核心的一個(gè)重要設計,它極大地提高了性能。
對于一條具體的指令執行過(guò)程,通??梢苑譃槲鍌€(gè)部分:取指令,指令譯碼,取操作數,運算(ALU),寫(xiě)結果。其中前三步一般由指令控制器完成,后兩步則由運算器完成。按照傳統的方式,所有指令順序執行,那么先是指令控制器工作,完成第一條指令的前三步,然后運算器工作,完成后兩步,在指令控制器工作,完成第二條指令的前三步,在是運算器,完成第二條指令的后兩部……很明顯,當指令控制器工作是運算器基本上在休息,而當運算器在工作時(shí)指令控制器卻在休息,造成了相當大的資源浪費。解決方法很容易想到,當指令控制器完成了第一條指令的前三步后,直接開(kāi)始第二條指令的操作,運算單元也是。這樣就形成了流水線(xiàn)系統,這是一條2級流水線(xiàn)。
如果是一個(gè)超標量系統,假設有三個(gè)指令控制單元和兩個(gè)運算單元,那么就可以在完成了第一條指令的取址工作后直接開(kāi)始第二條指令的取址,這時(shí)第一條指令在進(jìn)行譯碼,然后第三條指令取址,第二條指令譯碼,第一條指令取操作數……這樣就是一個(gè)5級流水線(xiàn)。很顯然,5級流水線(xiàn)的平均理論速度是不用流水線(xiàn)的4倍。
流水線(xiàn)系統最大限度地利用了CPU資源,使每個(gè)部件在每個(gè)時(shí)鐘周期都工作,大大提高了效率。但是,流水線(xiàn)有兩個(gè)非常大的問(wèn)題:相關(guān)和轉移。
在一個(gè)流水線(xiàn)系統中,如果第二條指令需要用到第一條指令的結果,這種情況叫做相關(guān)。以上面哪個(gè)5級流水線(xiàn)為例,當第二條指令需要取操作數時(shí),第一條指令的運算還沒(méi)有完成,如果這時(shí)第二條指令就去取操作數,就會(huì )得到錯誤的結果。所以,這時(shí)整條流水線(xiàn)不得不停頓下來(lái),等待第一條指令的完成。這是很討厭的問(wèn)題,特別是對于比較長(cháng)的流水線(xiàn),比如20級,這種停頓通常要損失十幾個(gè)時(shí)鐘周期。目前解決這個(gè)問(wèn)題的方法是亂序執行。亂序執行的原理是在兩條相關(guān)指令中插入不相關(guān)的指令,使整條流水線(xiàn)順暢。比如上面的例子中,開(kāi)始執行第一條指令后直接開(kāi)始執行第三條指令(假設第三條指令不相關(guān)),然后才開(kāi)始執行第二條指令,這樣當第二條指令需要取操作數時(shí)第一條指令剛好完成,而且第三條指令也快要完成了,整條流水線(xiàn)不會(huì )停頓。當然,流水線(xiàn)的阻塞現象還是不能完全避免的,尤其是當相關(guān)指令非常多的時(shí)候。
另一個(gè)大問(wèn)題是條件轉移。在上面的例子中,如果第一條指令是一個(gè)條件轉移指令,那么系統就會(huì )不清楚下面應該執行那一條指令?這時(shí)就必須等第一條指令的判斷結果出來(lái)才能執行第二條指令。條件轉移所造成的流水線(xiàn)停頓甚至比相關(guān)還要嚴重的多。所以,現在采用分支預測技術(shù)來(lái)處理轉移問(wèn)題。雖然我們的程序中充滿(mǎn)著(zhù)分支,而且哪一條分支都是有可能的,但大多數情況下總是選擇某一分支。比如一個(gè)循環(huán)的末尾是一個(gè)分支,除了最后一次我們需要跳出循環(huán)外,其他的時(shí)候我們總是選擇繼續循環(huán)這條分支。根據這些原理,分支預測技術(shù)可以在沒(méi)有得到結果之前預測下一條指令是什么,并執行它?,F在的分支預測技術(shù)能夠達到90%以上的正確率,但是,一旦預測錯誤,CPU仍然不得不清理整條流水線(xiàn)并回到分支點(diǎn)。這將損失大量的時(shí)鐘周期。所以,進(jìn)一步提高分支預測的準確率也是正在研究的一個(gè)課題。
越是長(cháng)的流水線(xiàn),相關(guān)和轉移兩大問(wèn)題也越嚴重,所以,流水線(xiàn)并不是越長(cháng)越好,超標量也不是越多越好,找到一個(gè)速度與效率的平衡點(diǎn)才是最重要的。
三、CPU的外核
1、解碼器(Decode Unit)
這是x86CPU才有的東西,它的作用是把長(cháng)度不定的x86指令轉換為長(cháng)度固定的類(lèi)似于RISC的指令,并交給RISC內核。解碼分為硬件解碼和微解碼,對于簡(jiǎn)單的x86指令只要硬件解碼即可,速度較快,而遇到復雜的x86指令則需要進(jìn)行微解碼,并把它分成若干條簡(jiǎn)單指令,速度較慢且很復雜。好在這些復雜指令很少會(huì )用到。
Athlon也好,PIII也好,老式的CISC的x86指令集嚴重制約了他們的性能表現。
2、一級緩存和二級緩存(Cache)
以及緩存和二級緩存是為了緩解較快的CPU與較慢的存儲器之間的矛盾而產(chǎn)生的,以及緩存通常集成在CPU內核,而二級緩存則是以OnDie或OnBoard的方式以較快于存儲器的速度運行。對于一些大數據交換量的工作,CPU的Cache顯得尤為重要。
好了,看到了吧,CPU其實(shí)也就這樣,并不是很神秘。這篇文章的所有內容都不針對某一種CPU,而是適合于任何CPU,是一些最基本的CPU原理,希望能夠對你有所幫助。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
寄存器和內存的關(guān)系
單片機入門(mén)
一種帶Cache的嵌入式CPU的設計與實(shí)現
討論MIPS 體系和CISC體系結構的不同之處
CPU內部組成結構及指令執行過(guò)程
第3章_處理器架構CPU組成
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久