chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>電子百科>主機(jī)配件>cpu>

計(jì)算機(jī)中內(nèi)存、cache和寄存器之間的關(guān)系

2019年07月22日 09:19 lq 作者: 用戶評(píng)論(0

  寄存器(Cache)是CPU內(nèi)部集成的,內(nèi)存是掛在CPU外面的數(shù)據(jù)總線上的,訪問內(nèi)存時(shí)要在CPU的寄存器(Cache)填上地址,再執(zhí)行相應(yīng)的匯編指令,這時(shí)CPU會(huì)在數(shù)據(jù)總線上生成讀取或?qū)懭雰?nèi)存數(shù)據(jù)的時(shí)鐘信號(hào),最終內(nèi)存的內(nèi)容會(huì)被CPU寄存器(Cache)的內(nèi)容更新(寫入)或者被讀入CPU的寄存器(Cache)(讀?。?。如圖:

  

計(jì)算機(jī)中內(nèi)存、cache和寄存器之間的關(guān)系

  CPU、內(nèi)存、寄存器之間的關(guān)系cpu 取址 -》地址輸入地址寄存器 -》 緩存命中即,則數(shù)據(jù)進(jìn)入數(shù)據(jù)寄存器 -》 緩存未命中則進(jìn)入內(nèi)存 -》 內(nèi)存TLB快表命中則數(shù)據(jù)塊進(jìn)入緩存,數(shù)據(jù)進(jìn)入寄存器 -》 內(nèi)存TLB快表未命中則局部數(shù)據(jù)塊進(jìn)入緩存和快表 -》 內(nèi)存未命中則進(jìn)入硬盤虛擬存儲(chǔ)區(qū)

  CPU里的寄存器

  其實(shí)就是我們常說的:Cache,有1級(jí) 和 2級(jí),(L1,L2)L1容量比較小,L2(集成在主板上,說使用的為靜態(tài)RAM)會(huì)多一些,L1是集成在CPU內(nèi)部的寄存器(L1與CPU 同步),訪問它速度自然很快,但容量比較小,L1 64K L2現(xiàn)在最高的就2MB,這顯然是不夠的,所以我們都需要擴(kuò)展它,內(nèi)存(DDR RAM)就是擴(kuò)展的“寄存器”,它的訪問速度就比 Cache 速度慢!CPU 在運(yùn)行某計(jì)算時(shí),它會(huì)把使用頻率高的數(shù)據(jù)放到L1,L2,把不常用的數(shù)據(jù)保存在RAM中,需要訪問的時(shí)候再讀入Cache,當(dāng)然相比之下硬盤的速度就更低。

  計(jì)算機(jī)中內(nèi)存、cache和寄存器之間的關(guān)系

  寄存器是中央處理器內(nèi)的組成部份。寄存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、數(shù)據(jù)和位址。在中央處理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序計(jì)數(shù)器(PC)。在中央處理器的算術(shù)及邏輯部件中,包含的寄存器有累加器(ACC)。

  內(nèi)存包含的范圍非常廣,一般分為只讀存儲(chǔ)器(ROM)、隨機(jī)存儲(chǔ)器(RAM)和高速緩存存儲(chǔ)器(cache)。

  寄存器是CPU內(nèi)部的元件,寄存器擁有非常高的讀寫速度,所以在寄存器之間的數(shù)據(jù)傳送非??臁?/p>

  Cache :即高速緩沖存儲(chǔ)器,是位于CPU與主內(nèi)存間的一種容量較小但速度很高的存儲(chǔ)器。由于CPU的速度遠(yuǎn)高于主內(nèi)存,CPU直接從內(nèi)存中存取數(shù)據(jù)要等待一定時(shí)間周期,Cache中保存著CPU剛用過或循環(huán)使用的一部分?jǐn)?shù)據(jù),當(dāng)CPU再次使用該部分?jǐn)?shù)據(jù)時(shí)可從Cache中直接調(diào)用,這樣就減少了CPU的等待時(shí)間,提高了系統(tǒng)的效率。Cache又分為一級(jí)Cache(L1

  Cache)和二級(jí)Cache(L2 Cache),L1 Cache集成在CPU內(nèi)部,L2 Cache早期一般是焊在主板上,現(xiàn)在也都集成在CPU內(nèi)部,常見的容量有256KB或512KB L2 Cache。

  總結(jié):大致來說數(shù)據(jù)是通過內(nèi)存-Cache-寄存器,Cache緩存則是為了彌補(bǔ)CPU與內(nèi)存之間運(yùn)算速度的差異而設(shè)置的的部件。

  首先看一下計(jì)算機(jī)的存儲(chǔ)體系(Memory hierarchy)金字塔:

 

計(jì)算機(jī)中內(nèi)存、cache和寄存器之間的關(guān)系

  其次我們看看一個(gè)計(jì)算機(jī)的存儲(chǔ)體系

  

計(jì)算機(jī)中內(nèi)存、cache和寄存器之間的關(guān)系

  Register

  寄存器是CPU的內(nèi)部組成單元,是CPU運(yùn)算時(shí)取指令和數(shù)據(jù)的地方,速度很快,寄存器可以用來暫存指令、數(shù)據(jù)和地址。在CPU中,通常有通用寄存器,如指令寄存器IR;特殊功能寄存器,如程序計(jì)數(shù)器PC、sp等。

  Cache

  緩存即就是用于暫時(shí)存放內(nèi)存中的數(shù)據(jù),若果寄存器要取內(nèi)存中的一部分?jǐn)?shù)據(jù)時(shí),可直接從緩存中取到,這樣可以調(diào)高速度。高速緩存是內(nèi)存的部分拷貝。

  CPU 《--- 》 寄存器《--- 》 緩存《--- 》內(nèi)存

  寄存器的工作方式很簡(jiǎn)單,只有兩步:(1)找到相關(guān)的位,(2)讀取這些位。

  內(nèi)存的工作方式就要復(fù)雜得多:

  (1)找到數(shù)據(jù)的指針。(指針可能存放在寄存器內(nèi),所以這一步就已經(jīng)包括寄存器的全部工作了。)

 ?。?)將指針?biāo)屯鶅?nèi)存管理單元(MMU),由MMU將虛擬的內(nèi)存地址翻譯成實(shí)際的物理地址。

 ?。?)將物理地址送往內(nèi)存控制器(memory controller),由內(nèi)存控制器找出該地址在哪一根內(nèi)存插槽(bank)上。

  (4)確定數(shù)據(jù)在哪一個(gè)內(nèi)存塊(chunk)上,從該塊讀取數(shù)據(jù)。

  (5)數(shù)據(jù)先送回內(nèi)存控制器,再送回CPU,然后開始使用。

  內(nèi)存的工作流程比寄存器多出許多步。每一步都會(huì)產(chǎn)生延遲,累積起來就使得內(nèi)存比寄存器慢得多。

  為了緩解寄存器與內(nèi)存之間的巨大速度差異,硬件設(shè)計(jì)師做出了許多努力,包括在CPU內(nèi)部設(shè)置緩存、優(yōu)化CPU工作方式,盡量一次性從內(nèi)存讀取指令所要用到的全部數(shù)據(jù)等等。

  RAM-memory

  即內(nèi)存,是用于存放數(shù)據(jù)的單元。其作用是用于暫時(shí)存放CPU中的運(yùn)算數(shù)據(jù),以及與硬盤等外部存儲(chǔ)器交換的數(shù)據(jù)。

  HardDisk

  硬盤

  一條匯編指令大概執(zhí)行過程是(不是絕對(duì)的,不同平臺(tái)有差異):

  取指(取指令)、譯碼(把指令轉(zhuǎn)換成微指令)、取數(shù)(讀內(nèi)存里的操作數(shù))、計(jì)算(各種計(jì)算的過程,ALU負(fù)責(zé))、寫回(將計(jì)算結(jié)果寫回內(nèi)存),有些平臺(tái)里,前兩步會(huì)合并成一步,某些指令也不會(huì)有取數(shù)或者回寫的過程。

  再提一下CPU主頻的概念:首先,主頻絕對(duì)不等于一秒鐘可以執(zhí)行的指令個(gè)數(shù),每個(gè)指令的執(zhí)行成本是不同的,比如x86平臺(tái)里匯編指令I(lǐng)NC就比ADD要快,具體每個(gè)指令的時(shí)鐘周期可以參考intel的手冊(cè)。

  為什么要提主頻?因?yàn)樯厦娴膱?zhí)行過程中,每個(gè)操作都需要占用一個(gè)時(shí)鐘周期,對(duì)于一個(gè)操作內(nèi)存的加法,就需要5個(gè)時(shí)鐘周期,換句話說,500Mhz主頻的CPU,最多執(zhí)行100MHz條指令。

  仔細(xì)觀察,上面的步驟里不包括寄存器操作,對(duì)于CPU來說讀/寫寄存器是不需要時(shí)間的,或者說如果只是操作寄存器(比如類似mov BX,AX之類的操作),那么一秒鐘執(zhí)行的指令個(gè)數(shù)理論上說就等于主頻,因?yàn)榧拇嫫魇荂PU的一部分。

  然后寄存器往下就是各級(jí)的cache,有L1 cache,L2,甚至有L3的,以及TLB這些(TLB也可以認(rèn)為是cache),之后就是內(nèi)存,前面說寄存器快,現(xiàn)在說為什么這些慢:

  對(duì)于各級(jí)的cache,訪問速度是不同的,理論上說L1cache(一級(jí)緩存)有著跟CPU寄存器相同的速度,但L1cache有一個(gè)問題,當(dāng)需要同步cache和內(nèi)存之間的內(nèi)容時(shí),需要鎖住cache的某一塊(術(shù)語是cache line),然后再進(jìn)行cache或者內(nèi)存內(nèi)容的更新,這段期間這個(gè)cache塊是不能被訪問的,所以L1cache的速度就沒寄存器快,因?yàn)樗鼤?huì)頻繁的有一段時(shí)間不可用。

  L1 cache下面是L2 cache,甚至L3 cache,這些都有跟L1 cache一樣的問題,要加鎖,同步,并且L2比L1慢,L3比L2慢,這樣速度也就更低了。

  最后說說內(nèi)存,內(nèi)存的主頻現(xiàn)在主流是1333左右吧?或者1600,單位是MHz,這比CPU的速度要低的多,所以內(nèi)存的速度起點(diǎn)就更低,然后內(nèi)存跟CPU之間通信也不是想要什么就要什么的。

  內(nèi)存不僅僅要跟CPU通信,還要通過DMA控制器與其它硬件通信,CPU要發(fā)起一次內(nèi)存請(qǐng)求,先要給一個(gè)信號(hào)說“我要訪問數(shù)據(jù)了,你忙不忙?”如果此時(shí)內(nèi)存忙,則通信需要等待,不忙的時(shí)候,通信才能正常。并且,這個(gè)請(qǐng)求信號(hào)的時(shí)間代價(jià),就是夠執(zhí)行幾個(gè)匯編指令了,所以,這是內(nèi)存慢的一個(gè)原因。

  另一個(gè)原因是:內(nèi)存跟CPU之間通信的通道也是有限的,就是所謂的“總線帶寬”,但,要記住這個(gè)帶寬不僅僅是留給內(nèi)存的,還包括顯存之類的各種通信都要走這條路,并且由于路是共享的,所以任何請(qǐng)求發(fā)起之間都要先搶占,搶占帶寬需要時(shí)間,帶寬不夠等待的話也需要時(shí)間。

  以上兩條加起來導(dǎo)致了CPU訪問內(nèi)存更慢,比cache還慢。

  舉個(gè)更容易懂的例子:

  CPU要取寄存器AX的值,只需要一步:把AX給我拿來,AX就拿來了。

  CPU要取L1 cache的某個(gè)值,需要1-3步(或者更多):把某某cache行鎖住,把某個(gè)數(shù)據(jù)拿來,解鎖,如果沒鎖住就慢了。

  CPU要取L2 cache的某個(gè)值,先要到L1 cache里取,L1說,我沒有,在L2里,L2開始加鎖,加鎖以后,把L2里的數(shù)據(jù)復(fù)制到L1,再執(zhí)行讀L1的過程,上面的3步,再解鎖。

  CPU取L3 cache的也是一樣,只不過先由L3復(fù)制到L2,從L2復(fù)制到L1,從L1到CPU。

  CPU取內(nèi)存則最復(fù)雜:通知內(nèi)存控制器占用總線帶寬,通知內(nèi)存加鎖,發(fā)起內(nèi)存讀請(qǐng)求,等待回應(yīng),回應(yīng)數(shù)據(jù)保存到L3(如果沒有就到L2),再從L3/2到L1,再從L1到CPU,之后解除總線鎖定。

非常好我支持^.^

(6) 100%

不好我反對(duì)

(0) 0%

( 發(fā)表人:李倩 )

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?