計算機的組成,快取記憶體與主存的資料交換

2021-10-05 04:39:39 字數 1647 閱讀 8028

不僅是記錄我的半吊子基礎知識,也是一次再學習,不敢保證都對

現在我們都已經了解到,快取記憶體容量小速度快,主存容量大速度慢。cpu為了提高效率,得盡量從快取記憶體中讀取資料。快取記憶體是主存部分內容的拷貝,它得與主存的內容保持一致,cpu得到乙個指令要修改快取記憶體的某個資料,那快取記憶體如何與主存資料保持一致呢?如果快取記憶體已經沒有空間儲存資料了,但是主存又要把乙個必要的資料放進來的時候,怎麼辦呢?

我們先來看第二個問題,主存要給快取記憶體乙個必要的資料,但是快取記憶體表示我這裡沒地方了。怎麼辦呢?那就來替換吧,找個位置,把這個位置的資料扔掉,再把那個必要資料存進來。如何選位置就涉及到了替換策略。

1)最不經常使用(lfu)演算法

根據cpu的訪問頻率,假如某個位置訪問次數最少,那就把這個位置替換出去,每乙個位置都有乙個計數器,被cpu訪問一次,計數器就加1,等到發生替換的時候,就看看哪個位置的資料很少被訪問,就把它替換出去。

2)近期最少使用(lru)演算法

這個演算法也是將最近長久沒有被訪問過的資料替換出去,所以每乙個位置都有乙個計數器,但是這個計數器可不是訪問一次就加1,而是訪問一次就清零,其他位置計數器加1,替換的時候看哪個計數器數值大,就把這個位置替換出去。

這麼看起來好像lfu演算法與lru演算法並沒有什麼區別。這就需要我們思考思考了,其實lfu演算法有點缺陷,它是被訪問一次就加1,數值小的替換出去。假如我剛放進來乙個新資料,才訪問了一次,又要發生替換,那這個新資料豈不是剛進來就要出去;假如很多資料經常被訪問,那計數器經常加1,加個幾萬次,那光計數器就得佔據快取記憶體一大片空間吧,本來快取記憶體就容量小。

但是,lru就不一樣了,訪問一次就清零,其他位置加1,這不就給新資料提供了保護,不斷地清零,又不會讓計數器數值變大,甚至只需要乙個1位就可以,要麼0要麼1。

3)隨機替換

這個策略就不需要什麼演算法,要發生替換的時候,隨機選個位置就替換。也不用設定計數器再比較判斷一下。但是這樣做,就很容易導致替換出去的資料立馬又要使用,降低快取記憶體的效率。或許大家覺得隨機替換效率肯定比上兩個低很多,它確實比前兩種低,但也沒有低很多,書上說只是稍遜。

我們再來看第乙個問題,高速快取資料發生了改變,它怎麼與主存保持一致呢?

1)寫回法

只修改快取記憶體的資料,主存的資料不修改,等到發生替換的時候,再把資料寫回主存,但是呢,假如有多個快取記憶體,這樣就會有主存與高速快取資料不一致的隱患。

2)全寫法

高速快取資料改變的同時,主存的資料也要跟著一起改變,這樣同時改變,很好的保證了資料一致性。但是這樣就降低了效率。

3)寫一次法

這是基於寫回法結合全寫法的策略,看一遍沒看懂,再看一遍,還是抽象,也不知道是不是我腦子不好使,我就大致說說我的理解,實在是不想照著書上的抄,也不知道對不對,先湊合著。

這個策略看的時候要想著cpu裡有多個快取記憶體,每個快取記憶體都有主存某個資料的拷貝,某乙個快取記憶體要進行第一次的寫操作的時候,要跟全寫法相同,主存與快取記憶體同時寫入,然後,其他快取記憶體發現這個主存資料要修改了,跟自己的拷貝不一致了,就把它的拷貝及時作廢,就是扔掉了,其他快取記憶體就沒有這個資料的拷貝了。只剩下這乙個正在進行寫操作的快取記憶體有這個資料,之後再進行寫操作,就按照寫回法來進行。可能這理解不太對,先湊合著吧。

無法寫入快取記憶體 記憶體與CPU的快取記憶體的關係

我們個人pc都有乙個叫做記憶體的硬體,有4g 8g 16g不等的容量。但我們的cpu執行時執行的指令並不是直接從記憶體中獲取,而是從cpu自身的快取記憶體中獲得指令並執行,指令執行完畢再寫回快取,然後待到特定的時機才把資料在寫回主記憶體。那cpu是如何將比自己容量大的多的記憶體放進自己的快取記憶體中...

計算機組成原理 主存與cache的對映關係

特點 指主存的乙個字塊能夠映像到整個cache的不論什麼乙個字塊中。這樣的對映方法比較靈活,cache的利用率高。但位址轉換速度慢,且須要採用某種置換演算法將cache中的內容調入調出,實現起來系統開銷大。特點 指主存的乙個字塊僅僅能映像到cache的乙個準確確定的字塊中,主存的字塊僅僅能夠和固定的...

計算機的組成

作業系統 operating system,簡稱os 是管理電腦硬體與軟體資源的程式,同時也是計算機系統的核心與基石。作業系統是控制其他程式執行,管理系統資源並為使用者提供操作介面的系統軟體的集合。作業系統身負諸如管理與配置記憶體 決定系統資源供需的優先次序 控制輸入與輸出裝置 操作網路與管理檔案系...