關於計算機儲存器中快取的一些思考

2021-08-19 03:17:32 字數 1545 閱讀 3539

在計算機硬體當中,主要有運算器,控制器,儲存器,輸入輸出裝置幾種。儲存器大致有快取記憶體(cache),記憶體,輔存這樣的體系架構.而cpu在工作時,主要從記憶體中獲取指令或資料進行操作,而快取存在於cpu與記憶體之間,是乙個小容量,高速的儲存器。

一。 為什麼會有快取的存在呢?原因大概有兩點:

2.隨著積體電路發展,cpu執行速度越來越快,而記憶體的發展遠遠跟不上cpu,兩者之間速度差異過大會影響到效率。我們很自然的想到可以在兩者之間新增乙個快取,快取速度高於記憶體而低於cpu,快取提取記憶體資料,cpu訪問快取,這樣可以提公升效率。

二。快取基本原理

快取處於記憶體與cpu之間,不斷在兩者之間交換資料。cpu與快取交換資料以位元組為單位,而記憶體與快取交換資料以塊為單位。任何時刻都會有一些記憶體塊存在於快取中。當cpu欲訪問記憶體中某位元組時,會先去到快取中尋找。這時就會有兩種情況:

1.所需要的字在快取當中,這種情況稱為快取命中。

2.所需要的字不在快取中,成為快取未命中。

若快取命中,則此字立刻傳送給cpu。不命中時,則從記憶體讀出送到cpu,並且把含有這個位元組的整個資料塊送到快取。

針對區域性性原理來看,計算機在向快取新增資料時,總是把這個資料周圍整個資料塊調到快取中,這很好的運用區域性性原理,所以較大提公升效率。

三。替換策略

快取工作時盡量要求它儲存最新的資料,對此需要經常呼叫新的主存塊到快取當中,但是快取容量很小,所以經常需要把舊的主存塊調離快取。這時究竟調離哪個主存塊,這就涉及到了替換策略:

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

將一段時間內被訪問次數最少的資料塊換出。為此,每行設定乙個計數器。新行建立後從0開始計數,每訪問一次,則該行計數器加一。當需要替換時,對各行計數器進行比較,計數器值最小的那行換出,同時將此行計數器清零。

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

將近期內長久未被訪問過的行換出。為此,每行也設定乙個計數器,快取每命中一次,命中行計數器清零,其他各行計數器加一。當需要替換時,比較各行計數器的值,將計數器值最大的行換出。這種方法保護了剛被調入的新資料行。

3.隨機替換

這種方法完全是隨機選取,但會降低快取命中率。

四。快取的寫操作策略

快取的內容只是記憶體部分內容的拷貝,因此要與記憶體內容保持一致,但cpu對快取的寫入更改了快取內容,如何與記憶體內容保持一致呢?這裡有如下三種策略:

1.寫回法

當快取命中時,只修改快取內容,而不立即寫入主存。只有此行被換出時才寫回主存。這樣使得多次寫操作都在快取中完成,只在替換時才寫會速度較慢的記憶體,減少了訪問記憶體的次數。為了實現這個策略,每乙個快取行必須配備乙個修改位,以反映此行是否被修改過。當某行被換出時,根據其修改位是0還是1,來決定是否將此行內容寫回記憶體。

2.全寫法

當對快取進行寫操作時,快取與記憶體同時發生了寫修改,較好的維護了快取與記憶體內容一致性。當快取未命中,只向記憶體寫入。此策略缺點是,cpu對主存的寫操作太慢,降低了效率。

3.寫一次法

這是對寫回法與全寫法的綜合:寫命中與寫未命中的處理方法與寫回法相同,只是第一次寫命中時要同時寫入記憶體。

總結:快取的引入極大提高了計算機執行速度。當然,在快取與cpu之間,還有暫存器,這比快取還要快,這裡不再贅述。

關於計算機學習的一些思考

在上學期,我已經完成了c語言的學習。我也粗略了解了python語言 matlab語言的運用,接下來我將會就這個寒假所學習的計算機知識進行總結,希望在未來有一天,我回顧此刻,能心懷壯闊,而不是懊悔當初不學習。學習計算機程式設計,我認為最為重要的是 演算法和程式結構。演算法將決定執行這個程式的簡便性,比...

關於計算機的一些發展史

發展歷史 1 大型主機階段 20世紀40 50年代,是第一代電子管計算機。經歷了電子管數字計算機 電晶體數字計算機 積體電路數字計算機和大規模積體電路數字計算機的發展歷 程,計算機技術逐漸走向成熟。2 小型計算機階段 20世紀60 70年代,是對大型主機進行的第一次 縮小化 可以滿足中小企業事業單位...

關於計算機的一些名詞或是概念

xx對xx透明 在計算機中,從某個角度看不到的特性就稱這個特性是透明的,比如我們寫 的時候,變數的位址是由編譯系統分配的,那麼我們就稱這個位址對我們是完全透明的,我們根本不知道變數的具體位址。與現實生活中理解的透明正好相反。好多人把 mac book pro 喜歡簡稱為 mac pro,其實是不對的...