⑴ TLB與Cache有什麼區別
TLB:加速虛擬地址-->物理地址的轉換,如果沒有TLB的話每次進行地址轉換都要訪問內存。TLB結構有點像cache。
cache:存放最近使用的數據和指令,對於上層來說cache是透明的。
cache和TLB的區別,我說說吧。
cache中的數據存在時間局域性和空間局域性。TLB中存放的是物理地址只有時間局域性。
cache存放數據,TLB存放物理地址
具體了解一下【虛擬內存】相關的知識
⑵ CPU Cache一L1 L2 L3 TLB
cache是一種又小又快的存儲器。它存在的意義是彌合Memory與CPU之間的速度差距。
現在的CPU中有好幾個等級的緩存。通常L1和L2緩存都是每個CPU一個的, L1緩存有分為L1i和L1d,分別用來存儲指令和數據。L2緩存是不區分指令和數據的。L3緩存多個核心共用一個,通常也不區分指令和數據。 還有一種緩存叫TLB,它主要用來緩存MMU使用的頁表,通常我們講緩存(cache)的時候是不算它的。
Cache hierarchy of the K8 core in the AMD Athlon 64 CPU
Cache Line
Cache存儲數據是固定大小為單位的,稱為一個Cache entry,這個單位稱為Cache line或Cache block。給定Cache容量大小和Cache line size的情況下,它能存儲的條目個數(number of cache entries)就是固定的。因為Cache是固定大小的,所以它從DRAM獲取數據也是固定大小。對於X86來講,它的Cache line大小與DDR3、4一次訪存能得到的數據大小是一致的,即64Bytes。對於ARM來講,較舊的架構(新的不知道有沒有改)的Cache line是32Bytes,但一次內存訪存只訪問一半的數據也不太合適,所以它經常是一次填兩個Cache line,叫做double fill。
CPU從Cache數據的最小單位是位元組,Cache從Memory拿數據的最小單位(這里不講嵌入式系統)是64Bytes,Memory從硬碟拿數據通常最小是4092Bytes。
替換策略
Cache里存的數據是Memory中的 常用 數據一個拷貝,Cache比較小,不可以緩存Memory中的所有數據。當Cache存滿後,再需要存入一個新的條目時,就需要把一個舊的條目從緩存中拿掉,這個過程稱為evict,一個被evict的條目稱為victim。緩存管理單元通過一定的演算法決定哪些數據有資格留在Cache里,哪些數據需要從Cache里移出去。這個策略稱為 替換策略(replacement policy) 。最簡單的替換策略稱為LRU(least recently used),即Cache管理單元記錄每個Cache line最近被訪問的時間,每次需要evict時,選最近一次訪問時間最久遠的那一條做為victim。在實際使用中,LRU並不一定是最好的替換策略,在CPU設計的過程中,通常會不段對替換策略進行改進,每一款晶元幾乎都使用了不同的替換策略。
寫入策略與一致性
CPU需要讀寫一個地址的時候,先去Cache中查找,如果數據不在Cache中,稱為Cache miss,就需要從Memory中把這個地址所在的那個Cache line上的數據載入到Cache中。然後再把數返回給CPU。這時會伴隨著另一個Cache 條目成為victim被替換出去。
如果CPU需要訪問的數據在Cache中,則稱為Cache hit。
針對寫操作,有兩種寫入策略,分別為write back和write through。write through策略下,數據直接同時被寫入到Memory中,在write back策略中,數據僅寫到Cache中,此時Cache中的數據與Memory中的數據不一致,Cache中的數據就變成了臟數據(dirty)。如果其他部件(DMA, 另一個核)訪問這段數據的時候,就需要通過 Cache一致性協議 (Cache coherency protocol)保證取到的是最新的數據。另外這個Cache被替換出去的時候就需要寫回到內存中。
Cache Miss 與CPU stall
如果發生了Cache Miss,就需要從Memory中取數據,這個取數據的過程中,CPU可以執行幾十上百條指令的,如果等待數據時什麼也不做時間就浪費了。可以在這個時候提高CPU使用效率的有兩種方法,一個是亂序執行(out of order execution),即把當前線程中後面的、不依賴於當前指令執行結果的指令拿過來提前執行,另一個是超線程技術,即把另一個線程的指令拿過來執行。
L1/L2 Cache速度差別
L1 cache: 3 cycles
L2 cache: 11 cycles
L3 cache: 25 cycles
Main Memory: 100 cycles
L1/L2 Cache都是用SRAM做為存儲介質,為什麼說L1比L2快呢?這裡面有三方面的原因:
1. 存儲容量不同導致的速度差異
L1的容量通常比L2小,容量大的SRAM訪問時間就越長,同樣製程和設計的情況下,訪問延時與容量的開方大致是成正比的。
2. 離CPU遠近導致的速度差異
通常L1 Cache離CPU核心需要數據的地方更近,而L2 Cache則處於邊緩位置,訪問數據時,L2 Cache需要通過更遠的銅線,甚至更多的電路,從而增加了延時。
L1 Cache分為ICache(指令緩存)和DCache(數據緩存),指令緩存ICache通常是放在CPU核心的指令預取單遠附近的,數據緩存DCache通常是放在CPU核心的load/store單元附近。而L2 Cache是放在CPU pipeline之外的。
為什麼不把L2 Cache也放在很近的地方呢?由於Cache的容量越大,面積越大,相應的邊長的就越長(假設是正方形的話),總有離核遠的。
下面的圖並不是物理上的圖,只是為大家回顧一下CPU的pipe line。
另外需要注意的是這張圖里展示了一個二級的DTLB結構,和一級的ITLB。
3. 製程不同的造成的速度差異
在實際設計製造時,針對L1/L2的不同角色,L1更加註重速度, L2更加註重節能和容量。在製程上這方面有體現,(但我不懂,。。。。)。在設計時,這方面的有體現:
首先, L1 Cache都是N路組相聯的,N路組相聯的意思時,給定一個地址,N個Cache單元同時工作,取出N份tag和N份數據,然後再比較tag,從中選出hit的那一個採用,其它的丟棄不用。這種方式一聽就很浪費,很不節能。
另外,L2 Cache即便也是N路組相聯的,但它是先取N個tag,然後比對tag後發現cache hit之後再把對應的數據取出來。由於L2是在L1 miss之後才會訪問,所以L2 cache hit的概率並不高,訪問的頻率也不高,而且有前面L1抵擋一下,所以它的延遲高點也無所謂,L2容量比較大,如果數據和tag一起取出來,也比較耗能。
通常專家都將L1稱為latency filter, L2稱為bandwidth filter。
L3 Cache
L1/L2 Cache通常都是每個CPU核心一個(x86而言,ARM一般L2是為一個簇即4個核心共享的),這意味著每增加一個CPU核心都要增加相同大小的面積,即使各個CPU核心的L2 Cache有很多相同的數據也只能各保存一份,因而一個所有核心共享的L3 Cache也就有必要了。
L3 Cache通常都是各個核心共享的,而且DMA之類的設備也可以用。
由於L3 Cache的時延要求沒有那麼高,現在大家也要考慮不使用SRAM,轉而使用STT-MRAM,或是eDRAM來做L3 Cache。
邏輯Cache和物理Cache
Cache在系統中的位置根據與MMU的相對位置不同,分別稱為logical Cache和physical cache。
Logical Cache接受的是邏輯地址,物理Cache接受的是物理地址。
logical cache有一個優勢就是可以在完成虛擬地址到物理地址的翻譯之前就可以開始比對cache,但是有一個問題就是Cache 一致性還有cache eviction必須通過物理地址來做,因為多個虛擬地址可能對應同一個物理地址,不能保證不同的虛擬地址所以應的cache就一定不是同一份數據。為了解決這個問題,就不得不把物理地址也保存在為tag。這樣tag要存的內容就增加了一倍。
相對而言,physical cache由於一開始就是物理地址,所以只需要存物理地址為tag,而不需要再保存虛擬地址為tag,看起來簡單了很多。
其實總結起來,Cache的tag有兩種作用:(1)對於N路組相聯cache中,通過tag比對選擇使用哪一路的數據,(2)決定cache hit還是miss。前者配合操作系統的情況下,虛擬地址就可以做到,比如說給虛擬地址和物理頁配對的時候總是保證根據兩者的某些位來選way的時候是一樣的,而且前者不需要完全的正確,偶爾錯一些是可以接受的,你可以先選出數據,默認是cache hit,然後拿著數據是計算,但後來通過物理tag比對時發現是miss的情況下,再無效掉這次計算,反正cache miss的情況下cpu本來也需要stall好多個cycle。後者則必須依靠物理地址才可以做到。這樣一來,很多設計都把虛擬地址tag弱化為hint, 僅用於選哪個way。
又沒寫完了,心情不好,吐嘈一下,為什麼有些人自己能力差無法跟上優秀的人節奏,一點都不感到羞愧,反而理直氣壯的要求別人為他維持他自己的心理舒適區?
以下是後面接著寫時需要參考的資料,大家也可以自己看看。
CPU cache - Wikipedia
https://faculty.tarleton.e/agapie/documents/cs_343_arch/04_CacheMemory.pdf
http://www.ecs.csun.e/~cputnam/Comp546/Putnam/Cache%20Memory.pdf
進一步閱讀:
https://cseweb.ucsd.e/classes/fa14/cse240A-a/pdf/08/CSE240A-MBT-L15-Cache.ppt.pdf
http://www.ecs.csun.e/~cputnam/Comp546/Putnam/Cache%20Memory.pdf
https://ece752.ece.wisc.e/lect11-cache-replacement.pdf
http://www.ipdps.org/ipdps2010/ipdps2010-slides/session-22/2010IPDPS.pdf
⑶ 計算機的多級儲存系統系統的組成及優點
答:一、計算機的多級儲存系統的組成
1、最內層是CPU中的通用寄存器,很多運算可直接在CPU的通用寄存器中進行,減少了CPU與主存的數據交換,很好地解決了速度匹配的問題,但通用寄存器的數量是有限的一般在幾個到幾百個之間。
2、高速緩沖存儲器設置在CPU和主存之間,可以放在CPU 內部或外部。
3、以上兩層僅解決了速度匹配問題,存儲器的容量仍受到內存容量的制約。
因此,在多級存在儲結構中又增設了輔助存儲器(由磁碟構成)和大容量存儲器(由磁帶構成)。
二、計算機的多級儲存系統的優點
從CPU看來,這個整體的速度接近於Cache和寄存器的操作速度、容量是輔存的容量,每位價格接近於輔存的位價格。
從而較好地解決了存儲器中速度、容量、價格三者之間的矛盾,滿足了計算機系統的應用需要。
三、存儲層次
1、在計算機系統中存儲層次可分為高速緩沖存儲器、主存儲器、輔助存儲器三級。
2、高速緩沖存儲器用來改善主存儲器與中央處理器的速度匹配問題。
3、輔助存儲器用於擴大存儲空間。
⑷ 現代計算機系統採用的多級存儲體系包括哪幾部分
第一級是cache,第二級是主存,也就是內存,第三級是外存,也就是硬碟。cache是主存的副本,而主存是硬碟的副本
⑸ 常用的存儲架構有
順序存儲方法它是把邏輯上相鄰的結點存儲在物理位置相鄰的存儲單元里,結點間的邏輯關系由存儲單元的鄰接關系來體現,由此得到的存儲表示稱為順序存儲結構。順序存儲結構是一種最基本的存儲表示方法,通常藉助於程序設計語言中的數組來實現。
鏈接存儲方法它不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關系是由附加的指針欄位表示的。由此得到的存儲表示稱為鏈式存儲結構,鏈式存儲結構通常藉助於程序設計語言中的指針類型來實現。
順序存儲和鏈接存儲的基本原理
順序存儲和鏈接存儲是數據的兩種最基本的存儲結構。
在順序存儲中,每個存儲空間含有所存元素本身的信息,元素之間的邏輯關系是通過數組下標位置簡單計算出來的線性表的順序存儲,若一個元素存儲在對應數組中的下標位置為i,則它的前驅元素在對應數組中的下標位置為i-1,它的後繼元素在對應數組中的下標位置為i+1。在鏈式存儲結構中,存儲結點不僅含有所存元素本身的信息,而且含有元素之間邏輯關系的信息。
數據的鏈式存儲結構可用鏈接表來表示。
其中data表示值域,用來存儲節點的數值部分。Pl,p2,…,Pill(1n≥1)均為指針域,每個指針域為其對應的後繼元素或前驅元素所在結點(以後簡稱為後繼結點或前驅結點)的存儲位置。通過結點的指針域(又稱為鏈域)可以訪問到對應的後繼結點或前驅結點,若一個結點中的某個指針域不需要指向其他結點,則令它的值為空(NULL)。
在數據的順序存儲中,由於每個元素的存儲位置都可以通過簡單計算得到,所以訪問元素的時間都相同;而在數據的鏈接存儲中,由於每個元素的存儲位置保存在它的前驅或後繼結點中,所以只有當訪問到其前驅結點或後繼結點後才能夠按指針訪問到,訪問任一元素的時間與該元素結點在鏈式存儲結構中的位置有關。
儲存器方面的儲存結構
儲存系統的層次結構為了解決存儲器速度與價格之間的矛盾,出現了存儲器的層次結構。
程序的局部性原理
在某一段時間內,CPU頻繁訪問某一局部的存儲器區域,而對此范圍外的地址則較少訪問的現象就是
程序的局部性原理。層次結構是基於程序的局部性原理的。對大量典型程序運行情況的統計分析得出的結論是:CPU對某些地址的訪問在短時間間隔內出現集中分布的傾向。這有利於對存儲器實現層次結構。
多級存儲體系的組成
目前,大多採用三級存儲結構。
即:Cache-主存-輔存,如下圖:
3、多級存儲系統的性能
考慮由Cache和主存構成的兩級存儲系統,其性能主要取決於Cache和貯存的存取周期以及訪問它們的
次數。(存取周期為: Tc,Tm ;訪問次數為: Nc,Nm)
(1)Cache的命中率 H= Nc / (Nc+Nm)
(2)CPU訪存的平均時間 Ta= H * Tc+ (1-H) Tm
Cache-主存系統的效率
e= Tc / Ta
=1/H+(1-H)Tm/Tc
根據統計分析:Cache的命中率可以達到90%~98%
當Cache的容量為:32KB時,命中率為86%
64KB時,命中率為92%
128KB時,命中率為95%
256KB時,命中率為98%
⑹ 存儲結構的儲存器方面的儲存結構
儲存系統的層次結構為了解決存儲器速度與價格之間的矛盾,出現了存儲器的層次結構。 在某一段時間內,CPU頻繁訪問某一局部的存儲器區域,而對此范圍外的地址則較少訪問的現象就是
程序的局部性原理。層次結構是基於程序的局部性原理的。對大量典型程序運行情況的統計分析得出的結論是:CPU對某些地址的訪問在短時間間隔內出現集中分布的傾向。這有利於對存儲器實現層次結構。 目前,大多採用三級存儲結構。
即:Cache-主存-輔存,如下圖:
3、多級存儲系統的性能
考慮由Cache和主存構成的兩級存儲系統,其性能主要取決於Cache和貯存的存取周期以及訪問它們的
次數。(存取周期為: Tc,Tm ;訪問次數為: Nc,Nm)
(1)Cache的命中率 H= Nc / (Nc+Nm)
(2)CPU訪存的平均時間 Ta= H * Tc+ (1-H) Tm
Cache-主存系統的效率
e= Tc / Ta
=1/H+(1-H)Tm/Tc
根據統計分析:Cache的命中率可以達到90%~98%
當Cache的容量為:32KB時,命中率為86%
64KB時,命中率為92%
128KB時,命中率為95%
256KB時,命中率為98%
⑺ 三級存儲系統是指哪三種存儲器計算機系統為何採用三級存儲系統
摘要 Cache(高速緩沖存儲器)、主存儲器、輔助存儲器;三者速度依次降低。
⑻ 計算機系統採用多級存儲體系,包括哪三方面
常見的三級存儲體系(從CPU往外)是:Cache、主存、外存。 主存儲器用來存放需CPU運行的程序和數據。用半導體RAM構成,常包含少部分ROM。可由CPU直接編程訪問,採取隨機存取方式,即:可按某個隨機地址直接訪問任一單元(不需順序尋找),存取時間與地址無關。存儲容量較大,常用位元組數表示,有時也用單元數×位數表示。速度較快,以存取周期表示。 Cache位於CPU與主存之間(有些Cache集在CPU晶元之中),用來存放當前運行的程序和數據,它的內容是主存某些局部區域(頁)的復製品。它用快速的半導體RAM構成,採取隨機存取方式。存儲容量較小而速度最快。 外存儲器用來存放暫不運行但需聯機存放的程序和數據。用磁碟、光碟、磁帶等構成,磁碟用於需頻繁訪問場合,光碟目前多用於提供系統軟體,而磁帶多用於較大系統的備份。CPU不能直接編址訪問外存,而是將它當作外圍設備調用。磁帶採取順序存取方式。磁碟與光碟採取直接存取(半順序)方式,先直接定位到某個局部區域,再在其中順序存取。外存容量可以很大,以位元組數表示。由於外存的存取時間與數據所在位置有關,所以不能用統一的存取周期指標來表示。例如磁碟的速度指標可按其工作過程分成三個階段描述:①平均尋道時間②平均旋轉延遲(等待)時間③數據傳輸率
⑼ 多級存儲體系的簡介
存儲器的多級結構如圖1所示。
圖中最內層是CPU中的通用寄存器,很多運算可直接在CPU的通用寄存器中進行,減少了CPU與主存的數據交換,很好地解決了速度匹配的問題,但通用寄存器的數量是有限的一般在幾個到幾百個之間,如Pentium CPU中有8個32位的通用寄存器。
高速緩沖存儲器(Cache)設置在CPU和主存之間,可以放在CPU 內部或外部。其作用也是解決主存與CPU的速度匹配問題。Cache一般是由高速SRAM組成,其速度要比主存高1到2個數量級。由主存與Cache構成的「主存-Cache存儲層次,從CPU來看,有接近於Cache的速度與主存的容量,並有接近於主存的每位價格。通常,Cache還分為一級Cache和二級Cache。
但是,以上兩層僅解決了速度匹配問題,存儲器的容量仍受到內存容量的制約。因此,在多級存在儲結構中又增設了輔助存儲器(由磁碟構成)和大容量(又稱海量)存儲器(由磁帶構成)。隨著操作系統和硬體技術的完善,主存之間的信息傳送均可由操作系統中的存儲管理部件和相應的硬體自動完成,從而構成了主存一輔存的價格,從而彌補了主存容量不足的問題。
⑽ 快表TLB和高速緩沖存儲器cache有什麼區別
1、快表TLB: 用於虛擬存儲技術,是為了加快輔存向主存的地址映射速度(主存—輔存系統)
2、高速緩存器cache:用於解決CPU與主存速度不匹配問題。(CPU—主存系統)
2.1、cache補充:因為CPU速度遠高於主存,主存跟不上,導致CPU的大量時間在等待主存,效率低下。因為cache速度介於CPU與主存之間,價格也介於兩者之間,所以人們在CPU與主存之間添加「高速緩沖器cache」來緩解速度不匹配問題。
總的來說,兩者屬於兩個不同的系統層次,功能也不同。