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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Cache工作原理,Cache一致性,你想知道的都在这里

發布時間:2025/3/16 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Cache工作原理,Cache一致性,你想知道的都在这里 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

可以隨便到網上查一查,各大互聯網公司筆試面試特別喜歡考一道算法題,即?LRU緩存機制,又順手查了一下LRU緩存機制最近有哪些企業喜歡考察,超級大熱門!

今天給大家分享一篇關于 Cache 的硬核的技術文,基本上關于Cache的所有知識點都可以在這篇文章里看到。

作者:桔里貓?

來源:https://zhuanlan.zhihu.com/p/386919471

關于 Cache 這方面內容圖比較多,不想自己畫了,所以圖都來自《Computer Architecture : A Quantitative Approach》。

這是一本體系架構方面的神書,推薦大家看一下。

本文主要內容如下,基本涉及了Cache的概念,工作原理,以及保持一致性的入門內容。

1、為什么需要 Cache

1.1 為什么需要 Cache

我們首先從一張圖來開始講為什么需要 Cache.

上圖是 CPU 性能和 Memory 存儲器訪問性能的發展。

我們可以看到,隨著工藝和設計的演進,CPU 計算性能其實發生了翻天覆地的變化,但是DRAM存儲性能的發展沒有那么快。

所以造成了一個問題,存儲限制了計算的發展。

容量與速度不可兼得。

如何解決這個問題呢?可以從計算訪問數據的規律入手。

我們隨便貼段代碼:

for?(j?=?0;?j?<?100;?j?=?j?+?1)for(?i?=?0;?i?<?5000;?i?=?i?+?1)x[i][j]?=?2?*?x[i][j];

可以看到,由于大量循環的存在,我們訪問的數據其實在內存中的位置是相近的。

換句專業點的話說,我們訪問的數據有局部性。

我們只需要將這些數據放入一個小而快的存儲中,這樣就可以快速訪問相關數據了。

總結起來,Cache是為了給CPU提供高速存儲訪問,利用數據局部性而設計的小存儲單元。

1.2 實際系統中的 Cache

我們展示一下實際系統中的 Cache 。

如上圖所示,整個系統的存儲架構包括了 CPU 的寄存器,L1/L2/L3 CACHE,DRAM 和硬盤。

數據訪問時先找寄存器,寄存器里沒有找 L1 Cache, L1 Cache 里沒有找 L2 Cache 依次類推,最后找到硬盤中。

同時,我們可以看到,速度與存儲容量的折衷關系。容量越小,訪問速度越快!

其中,一個概念需要搞清楚。

CPU 和 Cache 是 word 傳輸的,而 Cache 到主存是以塊傳輸的,一塊大約 64Byte 。

現有 SOC 中的 Cache 一般組成如下。

1.3 Cache 的分類

Cache按照不同標準分類可以分為若干類。

  • 按照數據類型劃分:I-Cache與D-Cache。其中I-Cache負責放置指令,D-Cache負責方式數據。兩者最大的不同是D-Cache里的數據可以寫回,I-Cache是只讀的。

  • 按照大小劃分:分為small Cache和large Cache。沒路組(后文組相連介紹)<4KB叫small Cache, 多用于L1 Cache, 大于4KB叫large Cache。多用于L2及其他Cache.

  • 按照位置劃分:Inner Cache和Outer Cache。一般獨屬于CPU微架構的叫Inner Cache, 例如上圖的L1 L2 CACHE。不屬于CPU微架構的叫outer Cache.

  • 按照數據關系劃分:Inclusive/exclusive Cache: 下級Cache包含上級的數據叫inclusive Cache。不包含叫exclusive Cache。舉個例子,L3 Cache里有L2 Cache的數據,則L2 Cache叫exclusive Cache。

2、Cache的工作原理

要講清楚 Cache 的工作原理,需要回答 4 個問題:

  • 數據如何放置

  • 數據如何查詢

  • 數據如何被替換

  • 如果發生了寫操作,Cache如何處理

2.1 數據如何放置

這個問題也好解決。我們舉個簡單的栗子來說明問題。

假設我們主存中有 32 個塊,而我們的 Cache 一共有 8 個 Cache 行( 一個 Cache 行放一行數據)。

假設我們要把主存中的塊 12 放到 Cache 里。

那么應該放到 Cache 里什么位置呢?

三種方法:

  • 全相連(Fully associative)。可以放在Cache的任何位置。

  • 直接映射(Direct mapped)。只允許放在Cache的某一行。比如12 mod 8

  • 組相連(set associative)。可以放在Cache的某幾行。例如2路組相連,一共有4組,所以可以放在0,1位置中的一個。

可以看到,全相連和直接映射是Cache組相連的兩種極端情況。

不同的放置方式主要影響有兩點:

1、組相連組數越大,比較電路就越大,但Cache利用率更高,Cache miss發生的概率小。2、組相連數目變小,Cache經常發生替換,但是比較電路比較小。

這也好理解,內存中的塊在Cache中可放置的位置多,自然找起來就麻煩。

2.2 如何在Cache中找數據

其實找數據就是一個比對過程,如下圖所示。

我們地址都以 Byte 為單位的。

但主存于Cache之間的數據交換單位都是塊(block,現代Cache一般一個block大約64Byte)。所以地址對最后幾位是block offset。

由于我們采用了組相連,則還有幾個比特代表的是存儲到了哪個組。

組內放著若干數據,我們需要比較Tag, 如果組內有Tag出現,則說明我們訪問的數據在緩存中,可以開心的使用了。

比如舉個 2 路組相連的例子,如下圖所示。

T表示Tag。直接比較Tag,就能得知是不是命中了。如果命中了,則根據index(組號)將對應的塊取出來即可。

如上圖所示。用index選出位于組相連的哪個組。然后并行的比較Tag, 判斷最后是不是在Cache中。上圖是2路組相連,也就是說兩組并行比較。

那如果不在緩存中呢?這就涉及到另一個問題。

不在緩存中如何替換 Cache ?

2.3 如何替換Cache中的數據

Cache中的數據如何被替換的?這個就比較簡單直接。

  • 隨機替換。如果發生Cache miss里隨機替換掉一塊。

  • Least recently used. LRU。最近使用的塊最后替換。

  • First in, first out (FIFO), 先進先出。

實際上第一個不怎么使用,LRU 和 FIFO 根據實際情況選擇即可。

Cache 在什么時候數據會被替換內?也有幾種策略。

  • 不在本 Cache 替換。如果Cache miss了,直接轉發訪問地址到主存,取到的數據不會寫到Cache.

  • 在讀MISS時替換。如果讀的時候Cache里沒有該數據,則從主存讀取該數據后寫入Cache。

  • 在寫MISS時替換。如果寫的時候Cache里沒有該數據,則將本數據調入Cache再寫。

2.4 如果發生了寫操作怎么辦

Cache畢竟是個臨時緩存。

如果發生了寫操作,會造成Cache和主存中的數據不一致。如何保證寫數據操作正確呢?

也有三種策略。

  • 通寫:直接把數據寫回Cache的同時寫回主存。極其影響寫速度。

  • 回寫:先把數據寫回Cache, 然后當Cache的數據被替換時再寫回主存。

  • 通寫隊列:通寫與回寫的結合。先寫回一個隊列,然后慢慢往主存儲寫。如果多次寫同一個數據,直接寫這個隊列。避免頻繁寫主存。

3、Cache一致性

Cache 一致性是 Cache 中遇到的比較坑的一個問題。

什么原因需要 Cache 處理一致性呢?

主要是多核系統中,假如core 0讀了主存儲的數據,寫了數據。core 1也讀了主從的數據。這個時候core 1并不知道數據已經被改動了,也就是說,core 1 Cache中的數據過時了,會產生錯誤。

Cache一致性的保證就是讓多核訪問不出錯。

Cache一致性主要有兩種策略。

策略一:基于監聽的一致性策略

這種策略是所有Cache均監聽各Cache的寫操作,如果一個Cache中的數據被寫了,有兩種處理辦法。

寫更新協議:某個Cache發生寫了,就索性把所有Cache都給更新了。

寫失效協議:某個Cache發生寫了,就把其他Cache中的該數據塊置為無效。

策略 1 由于監聽起來成本比較大,所以只應用于極簡單的系統中。

策略二:基于目錄的一致性策略

這種策略是在主存處維護一張表。記錄各數據塊都被寫到了哪些Cache, 從而更新相應的狀態。一般來講這種策略采用的比較多。又分為下面幾個常用的策略。

  • SI: 對于一個數據塊來講,有share和invalid兩種狀態。如果是share狀態,直接通知其他Cache, 將對應的塊置為無效。

  • MSI:對于一個數據塊來講,有share和invalid,modified三種狀態。其中modified狀態表表示該數據只屬于這個Cache, 被修改過了。當這個數據被逐出Cache時更新主存。這么做的好處是避免了大量的主從寫入。同時,如果是invalid時寫該數據,就要保證其他所有Cache里該數據的標志位不為M,負責要先寫回主存儲。

  • MESI:對于一個數據來講,有4個狀態。modified, invalid, shared, exclusive。其中exclusive狀態用于標識該數據與其他Cache不依賴。要寫的時候直接將該Cache狀態改成M即可。

我們著重講講 MESI。圖中黑線:CPU的訪問。紅線:總線的訪問,其他Cache的訪問。

當前狀態時I狀態時,如果發生處理器讀操作 prrd。

  • 如果其他Cache里有這份數據,如果其他Cache里是M態,先 把M態寫回主存再讀。否則直接讀。最終狀態變為S。

  • 其他Cache里沒這個數據,直接變到E狀態。

當前狀態為S態。

  • 如果發生了處理器讀操作,仍然在S態。

  • 如果發生了處理器寫操作,則跳轉到M狀態。

  • 如果其他Cache發生了寫操作,跳到I態。

當前狀態E態

  • 發生了處理器讀操作還是E。

  • 發生了處理器寫操作變成M。

  • 如果其他Cache發生了讀操作,變到S狀態。

當前狀態M態

  • 發生了讀操作依舊是M態。

  • 發生了寫操作依舊是M態。

  • 如果其他Cache發生了讀操作,則將數據寫回主存儲,變換到S態。

4、總結

Cache 在計算機體系架構中有非常重要的地位,本文講了 Cache中最主要的內容,具體細節可以再根據某個點深入研究。

END

推薦閱讀滴滴這名員工的N+1飛了,離職帶走公司文檔 2021-10-26 一位前同事猝死了 2021-10-22 35歲,年入60萬,我卻從菊廠離職了! 2021-09-28 互聯網大廠員工平均年齡出爐:字節27,滴滴33 2021-10-11 駱俊武:五年了,我的技術管理成長之路 2021-06-21 女神節快樂!世界上第一位程序員就是女神 2021-03-08 劉朋:從技術到管理 - 團隊制勝六步工作法(開篇) 2021-02-08 阿里涉江:你真的會學習嗎?從結構化思維說起 2021-01-08 阿里資深技術專家崮德:8 個影響我職業生涯的重要技能 2020-12-19 阿里高級技術專家宋意:平凡人在阿里十年的成長之旅 2020-12-14 漫畫:下輩子你還當程序員么? 2020-12-01 工程師的基本功是什么?如何練習?聽美團技術大咖怎么說 2020-10-19 美團技術專家云鵬:寫給工程師的十條精進原則! 2020-10-15 找CTO杜仲:再談中年危機和應對策略 2020-10-10 Mobvista首席架構師蔡超:工作感悟之失敗與成功,我的8點總結 2020-09-20 左耳朵耗子:程序員如何把控自己的職業? 2020-08-22 程序員怎樣在35歲前實現財務自由? 2020-07-28 他,用了14年,從初代豆瓣工程師到AI公司CTO,創業心一直未變 2020-07-19 他,用了8年,從程序員到CTO再到天使投資人蝶變記 2020-07-16 漫畫:程序員每天的6場戰斗 2020-05-15

總結

以上是生活随笔為你收集整理的Cache工作原理,Cache一致性,你想知道的都在这里的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 狠狠入| 欧美视频三区 | 日韩在线精品视频 | 一级片一区二区三区 | 日韩av在线一区二区 | 福利小视频 | 老熟女高潮喷水了 | 奇米影视色 | 日韩av综合网站 | 日韩一卡二卡三卡四卡 | 国产一区二区免费视频 | 老女人性生活视频 | 亚洲区第一页 | 日本高清黄色电影 | 污污免费视频 | 那里可以看毛片 | 九九热在线免费视频 | 动漫涩涩免费网站在线看 | 久久免费高清视频 | 亚洲美女自拍偷拍 | 成人精品三级 | 亚洲视频播放 | 四季av中文字幕一区 | 在线无遮挡 | 在线观看亚洲成人 | 日本3p视频| 国产无遮挡免费视频 | 成人精品免费 | 中文字幕日韩专区 | 亚洲乱码一区二区 | 日韩av电影网 | 一区二区视频在线播放 | 网爆门在线 | 国产精品国产三级国产专播精品人 | 日韩视频中文 | 亚洲无限观看 | 麻豆偷拍| 羞辱狗奴的句子有哪些 | 中文字幕亚洲在线观看 | 黑人精品无码一区二区三区AV | 色撸撸av | 91成人短视频在线观看 | 大学生一级一片全黄 | 日本中文字幕高清 | 91av入口| 免费在线a | 国内毛片视频 | 激情久久av | 欧美熟妇精品一区二区蜜桃视频 | 久久一级免费视频 | 日韩a在线 | 婷色 | 国产精彩视频一区二区 | 四虎av影视| 亚洲在线一区 | 日本乱码一区二区 | 日本一区二区不卡在线 | 欧美第一精品 | 国产在线青青草 | 精品国产黄色片 | 日韩xx视频| 欧美日韩在线播放三区四区 | 樱桃视频一区二区三区 | 久久久久国产精品 | 国产黄色观看 | 黄色激情av | 亚洲13p| 精品91久久久 | 91网站永久免费看nba视频 | 北条麻妃av在线播放 | 日日草视频 | 国产资源网站 | 久久免费影院 | 成人日韩视频 | 日本熟妇色xxxxx日本免费看 | 国产又粗又硬视频 | 日韩欧美一二区 | 99精品免费观看 | 欧美色就是色 | 欲求不满在线小早川怜子 | 一区二区中文字幕 | 欧美91成人网 | 波多野结衣理论片 | 深爱五月综合网 | 国产精品国产精品国产专区 | 日韩极品一区 | 黄色一及毛片 | 你懂的在线视频网站 | 91精品国产综合久久久久 | 丰满肥臀噗嗤啊x99av | 中文字幕一区电影 | 婷婷午夜精品久久久久久性色av | a一级黄色片 | 国产中文字字幕乱码无限 | 亚洲天堂一区二区 | 国产精品久久久久久久一区二区 | 91亚洲精 | 免费av导航 | 天天干少妇 |