三種Cache寫入方式原理簡介

2021-08-27 01:16:19 字數 2549 閱讀 7195

三種cache寫入方式原理簡介

在386以上檔次的微機中,為了提高系統效率,普遍採用cache(高速緩衝儲存器),現在的系統甚至可以擁有多級cache。cache實際上是位於cpu與dram主儲存器之間少量超高速的靜態儲存器(sram),通常的大小為8kb~512kb。

對cache的工作原理可以進行如下描述:具有cache的計算機,當cpu需要進行儲存器訪問時,首先檢查所需資料是否在cache中。如果存在,則可以直接訪問其中的資料而不必插入任何等待狀態,這是最佳情況,稱為高速命中。當cpu所需資訊不在cache中時,則需切換訪問主儲器,由於速度較慢,需 要插入等待,這種情況稱高速未命中。在cpu訪問主儲存器的時候,按照最優化原則將儲存資訊同時寫入到cache中以保證下次可能的高速命中。因此,同一資料可能同時儲存在主儲存器和cache中;同樣,按照優化演算法,可以淘汰cache中的一些不常使用的資料。

所以,提高高速命中率的最好方法是盡量使cache存放cpu最近一直在使用的指令與資料,當 cache 裝滿後,可將相對長期不用的資料刪除,提高 cache的使用效率。為保持 cache 中資料與主儲存器中資料的一致性,避免cpu在讀寫過程中,將cache中的新資料遺失,造成錯誤的讀資料,確保cache 中更新過程的資料不會因覆蓋而消失,必須將 cache 中的資料更新及時準確地反映到主儲存器中,這是乙個寫入過程,通常採用的處理方法有:直寫式、緩衝直寫式與回寫式三種。

1.直寫式系統: cpu對cache寫入時,將資料同時寫入到主儲存器中,這樣可保證cache中的內容與主儲存器的內容完全一致。這種方式比較直觀,而且簡單、可靠,但由於每次對cache更新時都要對主儲存器進行寫操作,而這必須通過系統匯流排來完成,因此匯流排工作頻繁,系統執行速度就會受到影響。

2.緩衝直寫式系統:為解決直寫式系統對匯流排速度的影響問題,在主儲存器的資料寫入時增加緩衝器區。當要寫入主儲存器的資料被緩衝器鎖存後,cpu 便可執行下乙個週期的操作,不必等待資料寫入主儲存器 。 這相對於給主儲存器增加了乙個單向單次快取記憶體。比如,在寫入週期之後可以緊接著乙個資料已存在於cache中的讀取週期,這樣就可避免直寫式系統造成的 操作延時。但這個緩衝器只能儲存一次寫入的資料,當連續兩次寫操作發生時,cpu仍需等待。

3.回寫式系統:以前的兩種寫入方式系統,都是在 寫cache的同時,對主儲存器進行寫操作。實際上這不僅是對匯流排頻寬的占用,浪費了寶貴的執行時間,而且對於有的情況是不必要的,可以通過增加額外的標準來判斷是否有必要更新資料。回寫式系統就是通過在cache中的每一資料塊的標誌欄位中加入一更新位,解決主儲存器不必要的寫操作。比如,若cache 中的資料曾被cpu更新過但還未同時更新主儲存器,則該更新位被置1。每次cpu將一塊新內容寫入cache時,首先,檢查cache中該資料塊的更新 位,若更新位為0,則將資料直接寫入cache;反之,若更新位為1,則先將 cache 中的該項內容寫入到主儲存器中相應的位置,再將新資料寫回到cache中。

與直寫式系統相比,回寫式系統可省下一些不必要的立即回寫操作,而在許多情況下這是很頻繁出現的。即使乙個cache被更新,若未被新的資料所取代,則 沒有必要立刻進行主儲存器的寫操作。也就是說,實際寫入主儲存器的次數,可能少於cpu實際所執行的寫入週期的次數,但回寫式系統的結構較複雜, cache也必須用額外的容量用來儲存標誌。

由於回寫系統的高效率,現代的cache大多採取這種方式進行操作。

由上面的介紹可以看出,寫透(上述直寫式)和寫回(上述回寫式)有著截然不同的操作,在不同的場合,不同的記憶體塊使用不同的回寫策略(如果你的系統可以實現的話)要比使用一種策略要高效得多。具體一點,對於反覆訪問的記憶體塊置成寫回,而把一次寫入而很長時間以後再使用的記憶體置為寫透,可以大大提高 cache的效率。

第一點很容易理解,第二點就需要琢磨一下了,由於寫透的操作是,當快取有該位址的資料時同時更新快取和主存,當快取沒有該位址資料直接寫主存,忽略快取。當該位址的資料很長時間後才被使用到,那麼在使用的時候該資料肯定不在cache中(被替換了),所以不如直接寫入主存來得直接;

相反,如果使用寫回操作,當cache中有該位址資料,需要更新該資料,設定dirty位,很長時間後再使用該資料或被替換的時候才將其刷進主存,這有佔了茅坑不拉屎的嫌疑;而當cache沒有該位址資料時,情況更糟糕,首先需要將相應的主存資料(乙個cache line)匯入cache,再更新資料,設定dirty位,再等待被刷回記憶體,這種情況不僅占用了cache的空間,還多一次從主存中匯入資料的過程,同樣佔據匯流排,開銷很大。至於為什麼要先從主存中匯入資料,是因為cache往主存回寫資料時是按照乙個cache line 單位來寫的,但被更新的資料可能沒有乙個cache line這麼多,所以為了保證資料一致性,必須先把資料匯入cache,更新後再刷回來。

相似的內容cache操作的小技巧還有prefetch操作,prefetch操作是將主存的資料匯入cache而期間cpu不需要等待,繼續下一 條指令的執行,如果下一條指令也是匯流排的操作,那麼就必須等待prefetch完成以後再開始。所以,在使用該指令時,在prefetch指令後面插入盡 可能大於一次快取不命中所需要的clock數對應的指令,那麼prefetch與其後面的指令可以並行執行,從而省去了等待的過程,相當於抵消快取不命中 的損失。當然,如果插入的指令太多而cache太小,有可能prefetch的資料進入cache後又被替換掉了,所以,這需要自己去評估。

三種分頁方式

1.分頁方案一 利用not in和select top分頁 語句形式 selecttop10 fromtesttablewhere idnotin selecttop20id fromtesttable orderbyid orderbyidselecttop頁大小 fromtesttablewhe...

三種備份方式

2 在ntfs格式下建乙個資料夾,起用壓縮,然後備份到這個資料夾 備份時間變長,還原時間也長 3。起用壓縮胡備份 壓縮時間短,還原時間也短 這點非常重要 但是缺點是cpu使用率高 普通備份 backup database adventureworks to disk c backup adv 1.b...

三種繼承方式

派生類繼承了基類的全部資料成員和除了建構函式,析構函式之外的全部資料成員,但是這些成員的訪問屬性在派生的過程中是可以調整的。從基類繼承的成員,其訪問屬性由繼承方式控制。類的公有繼承 當繼承方式為公有繼承時,基類的公有成員和保護成員的訪問屬性在派生類中不變,而基類的私有成員不可直接訪問。類的私有繼承 ...