欧美日韩国产一区二区|qovd片|小明个人发布看看|小浪货你夹真紧水又多|老头把我添高潮了A片故|99热久久精品国产一区二区|久久久春色AV

Air Tag|簡單易懂計算機內存模型之什么是高速緩存?

Air Tag|簡單易懂計算機內存模型之什么是高速緩存?

文章圖片

Air Tag|簡單易懂計算機內存模型之什么是高速緩存?

簡單易懂計算機內存模型之什么是高速緩存?
計算機內存模型1.高速緩存的誕生【Air Tag|簡單易懂計算機內存模型之什么是高速緩存?】大家都知道計算機在執行程序時 , 是處理器CPU在執行 , 具體到每條指令 。 而這些指令數據 , 涉及了讀取和寫入 , 也就是內存 。 CPU的速度不用多說 , 是極快的 , 但是讀取和寫入內存這個操作卻遠遠跟不上CPU的處理速度 , 如果每條指令都得等從內存中存取 , 那就太影響效率了 。 所以這時候 , CPU中就加了一層高速緩存 , 作為內存與CPU之間的緩沖 。
將每次運算需要使用到的數據復制到緩存中 , 讓運算能夠快速進行 , 當運算處理結束后 , 再從緩存同步回內存 , 這樣CPU就不用執行每條指令都等內存了 。

2.高速緩存在多線程模式下的緩存一致性問題雖然高速緩存成功的解決了處理器與內存間的矛盾 , 但是它也為計算機系統帶來了更高的復雜度 , 那就是多線程情況下的緩存一致性 。
首先假設我們有4個CPU , 每個CPU都有自己的高速緩存 , 但是主內存就只有一個 , 是共享的 。
如果他們共享使用的數據不是同一個就算了 , 萬一用到了同一個變量 , 就會出問題了 。
例如簡單的a=1 , a=a+1 , a=a+1 , a=a+1 , a=a+1 , 就是a加了4次1 , 結果應該是5 。 但這時我們使用了多線程 , 4個CPU同時執行 , 剛好每個線程執行一次a+1 。 它們首先先把a的值讀取到高速緩存中 , 然后進行a+1的運算 , 得到結果后再把高速緩存中的a同步回內存 。 那么結果會是5嗎?很顯然 , 不一定 。 說不定結果是2 , 也可能是3 , 也可能是4或5 。 如果CPU在讀取a的值時 , 其他CPU沒有得出結果并返回賦值給內存 , 那結果肯定是2 。
這就是緩存一致性 , 通常這種多個線程訪問的變量 , 被稱之為【共享變量】 。
3.解決緩存不一致的問題知道了問題 , 就要想辦法解決 。
早期的CPU是通過在總線上加LOCK#鎖的方式解決的 , 因為CPU和其他部件的通信都是通過總線的 , 總線上加LOCK#鎖的話 , 就會阻塞CPU對其他部件的訪問 。 從而使同一時間 , 只有一個CPU能訪問內存 , 其他CPU在總線上被鎖了 , 只能干巴巴的等著這個CPU處理完 。 這種方式其實就是強制單線程執行 , 而且過于簡單粗暴 , 非常影響效率 。
上面這種解決方式顯然并不完美 , 所以后面就出了一個新的解決方法:緩存一致性協議 。
通過協議解決 , 最出名的緩存一致性協議是Intel的MESI協議 , 它的核心思想是 , 當CPU在寫入數據時 , 如果發現操作的變量是共享變量 , 就會發出信號通知其他的CPU將該變量的緩存設置為無效狀態 。 這樣當其他CPU需要讀取這個變量使用時 , 就會發現自己緩存中的變量失效了 , 只能重新去內存讀取 。
結構大概如圖:

對于高速緩存 , 我們就了解到這了 , 更多關于這塊的詳細內容 , 我會后期繼續發布講解 。

    相關經驗推薦