日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计组—缓存Cache

發布時間:2023/12/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计组—缓存Cache 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

緩存

通過大量統計發現了一個訪問規律:程序對存儲空間90%的訪問局限于存儲空間的10%的區域中,另外10%的訪問則分布在存儲空間的90%區域中。(即:存儲器10%的存儲空間是高頻訪問區,90%的存儲空間是低頻訪問區)

計算機程序對存儲器的訪問有兩種局限性規律:

1.時間局限性:

如果一個存儲單元被訪問,則可能這個存儲單元很快再次被訪問。

2.空間局限性:

如果一個存儲單元被訪問,則它臨近的存儲單元可能很快被訪問。

?

cache的功能

早期的計算機只有主存及外存,沒有cache,因為cpu速度不斷提高,為了滿足cpu和存儲器之間的速度差異,采用了cache技術。

cache是介于cpu和主存之間的小容量存儲器,存取速度比主存快。能高速的向cpu提供指令和數據,加快程序的執行速度,它的內容為主存一部分內容的副本。當存儲器接到有關讀取指令時,現在cache中查找此信息是否存在,若有則不經主存直接從cache中取出,否則直接從主存取出,同時寫入cache,以備再次使用。

cache目的是為了解決cpu和主存速度不匹配的技術。cache用來存放程序中當前最活躍的程序和數據。

總的原則:盡量使計算機的存取速度接近cache,容量為內存大小。

?

cache的基本原理

cpu與cache之間的數據交換是以字位單位。而cache與主存之間的數據交換是以塊為單位,一個塊由若干定長字組成。如下圖

當cpu讀取主存中一個字時,便發出此字的地址到cache和主存,此時cache控制邏輯依據地址判斷此字當前是否在cache中,若是,此字立即傳送給cpu;若非,則用主存讀取周期把此字從主存讀出送到cpu,與此同時,把含有這個字的整個數據庫從主存讀出送到cache中。

?

cache的命中率

增加cache的目的。就是在性能上使主存的平均讀出時間盡可能接近cache的讀出時間。因此,cache的命中率應盡量接近于1(100%)。由于程序訪問的局限性,這是可能的。在一個程序執行期間,設Nc表示cache完成存取的總次數,Nm表示主存完成存取的總次數,h定義為命中率,則有

主存與cache的地址映射

cache的容量很小,他保存的內容只是主存內容的一個子集,且cache與主存的數據交換是以塊為單位。

cpu指令對對存儲器進行讀寫時,指令中的地址是內存系統中存儲器的地址即大地址

cache的數據塊稱為行(L),設cache共有2^r行,則行地址(行號)有r(例:cache有8行即2^3,即行地址有3位);

主存的數據塊稱為塊(B),設主存有2^s塊,則塊地址(塊號)有s

注:行的容量=塊的容量

每個塊(行)由若干連續的字(W)組成,字時cpu訪問存儲器的單位。

若一個塊(行)有2^m個字,即1塊(行)=2^m字,則塊(行)內字地址有m位。

所以,cache的地址位數?= r + m?(位),即行地址+字地址

內存地址=?s + m(位),即塊地址+字地址

顯然:由于內存容量大于cache容量,即內存塊地址大于cache行地址,所以內存地址要大于cache地址

主存中的一個塊的地址(塊號)與塊的內容一起存于cache的行中,其中塊地址存于cache行的標記部分中

?

地址映射即是應用某種方法把主存地址定位到cache中;當cpu訪問存儲器時,它所給的一個字的內存地址會自動變成cache的地址,由于這個變換過程是用硬件實現的,因此地址變換過程速度非常快,軟件人員絲毫感覺不到cache的存在。這種特性稱為cache的透明性

?

地址映射方式有全相聯方式直接方式組相聯方式三種 。

1.全相聯方式

主存中的一個塊的地址(塊號)與塊的內容一起存于cache的行中,其中塊地址存于cache行的標記部分中。全相聯映射方式是指主存的一個塊直接拷貝到cache中的任意一行,非常靈活。

優點:沖突概率小,cache的利用高。

缺點:比較器電路難于實現,適合小容量cache采用。(因為在定位cache行的時候需要將塊地址與cache中的每一行的行號即標記位進行比較,找出命中的那一行,然后對命中的行進行字地址的查找,如果找到則直接取出,否則就直接去主存讀取)

全相聯映射主存地址的劃分:主存總容量64k=2^6*2^10=2^16=65536,共有256=2^8個塊,所以每個塊大小為65536/256=256=2^8即每個塊大小為2^8,即主存地址=塊號地址8位和快內字地址8位組成,共16位;

即全相聯映射方式中主存地址中對應的塊號對應于cache中的標記位.

?

2.直接映射方式

一個主存的塊只能拷貝到cache中一個特定行位置上去(通過函數映射)

cache的行號?i?與主存的塊號?j?有如下的函數關系(取余數):

i=j mod m (m為cache中的總行數)

優點:硬件簡單,成本低

缺點:每個主存塊只有一個固定的行位置可存放,容易產生沖突。因此適合大容量cache采用

?

直接映射主存地址的劃分:

說明:主存容量為64K=2^16即內存總共16位地址,低8位塊內字地址,高8位塊號(其中高8位塊號中,低3位為cache行號,高5位位標記位)

查找過程:首先通過行號定位cache中的行位置,然后進行標記位的比較,最后通過字地址查找值

?

3.組相聯映射方式

這種方式是前兩種方式的折中方案。它將m行cache分成u組,每組v行,主存塊存放到哪個組是固定的(直接映射方式),至于存到該組的哪一行是靈活的(全相聯映射方式 ),即有如下函數關系:(m 為cache總行數,j 為內存塊號,q為cache組號

m = u * v ? ?

q= j mod u

(每組幾行就叫幾路組相聯,例如4組,每組兩行則叫2路組相聯)

組相聯映射主存地址的劃分:

說明:內存總共16位,其中低8位為字地址,高8位為快號(其中高8位塊號中,低2位cache組號,高6位為標記位)

查找過程:首先通過組號定位到cache所屬組,然后比較對應的標記位,最后通過字地址查找值

?

替換策略

cache工作原理要求它盡量保存最新數據,必然存在將有用的信息從主存調進cache中,這樣就產生替換。

對于直接映射cache來說,只要把此特定位置上的原主存塊替換即可;對于全相聯和組相聯cache,就要從允許存放新主存塊的若干特定行中選取一行換出。常用的替換算法有如下4中。

cache的寫操作策略

1.寫回法(write back,回寫法)

當cpu寫cache命中時,只修改cache的內容,而不立即寫入主存,只有當此行(塊)被替換時才寫回主存。這種方法減少了訪問主存的次數,但是存在不一致性的隱患。實現這種方法時,每個cache行必須配置一個修改位,以反映此行是否被cpu修改過。

2.全寫法(write through,寫直達法)

當寫cache命中時,cache與主存同時發生寫修改,因而較好的維護了cache與主存的內容一致性。

當寫cache未命中時,直接向主存進行寫入。cache中每行無需設置一個修改位以及相應的判斷邏輯。此時是否修將改過的主存塊調入cache,有兩種方法:一種是調入cache,并分配一行;另一種是不調入cache。

缺點是降低了cache的功效。

3.寫一次法

基于寫回法并結合全寫法的寫策略,寫命中與寫未命中的處理方法與寫回法基本相同,只是第一次寫命中時要同時寫入主存,這便于維護系統全部cache的一致性。

總結

以上是生活随笔為你收集整理的计组—缓存Cache的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。