當前位置: 摩鑫平台 >> 知識庫 >> 硬件漫談 >> 正文
【計算機組成原理】存儲系統(五)—— Cache 的映射方式與寫策略
發布時間:2024-04-02       編輯🥐:網絡中心       瀏覽次數:

一、Cache - 主存的映射方式

在這裏插入圖片描述

全相聯映射:主存塊可以放在 Cache 的任意位置。

直接映射:每個主存塊只能放到一個特定的位置:
Cache塊號 = 主存塊號 % Cache總塊數

組相聯映射:Cache塊分為若幹組,每個主存塊可放到特定分組中的任意一個位置: 組號 = 主存塊號 % 分組數

(一)、全相聯映射(隨意放)

在這裏插入圖片描述
CPU 訪問主存地址 1…1101001110:
①主存地址的前22位🚌🫲,對比Cache中所有塊的標記;
②若標記匹配且有效位=1,則Cache命中🎹,訪問塊內地址為 001110 的單元🛳。
③若未命中或有效位 = 0,則正常訪問主存。

(二)、直接映射(只能放固定位置)

直接映射🏈,主存塊在Cache中的位置 = 主存塊號 % Cache總塊數🎏🛩。

在這裏插入圖片描述

若 Cache總塊數 = 2 n 2^n2n 則主存塊號末尾n位直接反映它在Cache 中的位置👲👂🏻。將主存塊號的其余位作為標記即可🆙。

在這裏插入圖片描述

此時主存地址為:

在這裏插入圖片描述

CPU 訪問主存地址 0…01000 001110 :
①根據主存塊號的後 3位確定Cache行 。
②若主存塊號的前 19 位與Cache標記匹配且有效位=1,則Cache命中,訪問塊內地址為 001110 的單元𓀎。
③若未命中或有效位=0♠️,則正常訪問主存。

(三)、組相聯映射(可放到特定分組)

n 路組相聯映射 —— n塊為一組

eg:2路組相聯映射——2塊為一組

組相聯映射,所屬分組 = 主存塊號 %分組數

在這裏插入圖片描述

CPU 訪問主存地址1…1101001110 👨‍🦰:
①根據主存塊號的後 2位確定所屬分組號💡。
②若主存塊號的前20位與分組內的某個標記匹配且有位=1💆🏼‍♂️, 則Cache命中🚏,訪問塊內地址為 001110的單元🤸🏻。
③若未命中或有效位=0,則正常訪問主存。

(四)Cache - 主存的映射方式總結

在這裏插入圖片描述

二、Cache 替換算法

前面介紹了 Cache 與主存的映射,說明了 Cache塊映射到主存塊的位置👰🏽‍♀️。但是未說明當 Cache 內存滿了時應該選擇哪個 Cache 進行替換,這當中涉及到 Cache 替換算法。

(一)、隨機算法(RAND)

隨機算法(RAND, Random)——若Cache已滿,則隨機選擇一塊替換。

隨機算法——實現簡單🧑🏿,但完全沒考慮局部性原理,命中率低,實際效果很不穩定。

(二)、先進先出算法(FIFO)

先進先出算法(FIFO, First In First Out)—— 若Cache已滿,則替換最先被調入Cache 的塊。

先進先出算法 —— 實現簡單🎆🍫,最開始按#0#1#2#3放入Cache👩🏽🦹🏽‍♂️,之後輪流替換 #0#1#2#3 。FIFO依然沒考慮局部性原理,最先被調入Cache的塊也有可能是被頻繁訪問的👶🛡。

在這裏插入圖片描述

(三)、近期最少使用算法(LRU)

近期最少使用算法(LRU, Least Recently Used )—— 為每一個Cache塊設置一個“計數器”,用於記錄每個 Cache 塊已經有多久沒被訪問了⌚️。當 Cache 滿後替換“計數器”最大的🍣。

①命中時,所命中的行的計數器清零,比其低的計數器加1,其余不變👩;
②未命中且還有空閑行時🔌,新裝入的行的計數器置0⛹️‍♀️,其余非空閑行全加1🥄;
③未命中且無空閑行時🧖🏼‍♀️,計數值最大的行的信息塊被淘汰,新裝行的塊的計數器置0👱🏻‍♀️,其余全加1。

在這裏插入圖片描述

(四)、最不經常使用算法(LFU)

最不經常使用算法(LFU, Least Frequently Used )—— 為每一個Cache塊設置一個“計數器”🟡♚,用於記錄每個Cache塊被訪問過幾次。當Cache滿後替換“計數器”最小的。

新調入的塊計數器=0,之後每被訪問一次計數器+1。需要替換時,選擇計數器最小的一行。

在這裏插入圖片描述

(五)、Cache 替換算法的總結

在這裏插入圖片描述

三、Cache 寫策略

在這裏插入圖片描述

(一)、寫命中

1. 寫回法

寫回法(write-back) —— 當CPU對Cache寫命中時,只修改Cache的內容,而不立即寫入主存,只有當此塊被換出時才寫回主存👩🏿‍🔬。

在這裏插入圖片描述

減少了訪存次數🛖,但存在數據不一致的隱患✴️。

2. 全寫法

全寫法(寫直通法,write-through) —— 當CPU對Cache寫命中時,必須把數據同時寫入 Cache 和主存👨‍⚕️,一般使用寫緩沖(write buffer)。使用寫緩沖*️⃣,CPU寫的速度很快,若寫操作不頻繁,則效果很好。若寫操作很頻繁👌🏿,可能會因為寫緩沖飽和而發生阻塞。

在這裏插入圖片描述

訪存次數增加🤰🏿,速度變慢,但更能保證數據一致性。Cache塊被替換時無需寫回👱🏽。

(二)、寫不命中

1. 寫分配法

寫不命中時,把主存中的塊調入Cache🫳,在Cache中修改🦇。
搭配寫回法使用

寫回法(write-back) —— 當CPU對Cache寫命中時,只修改Cache 的內容,而不立即寫入主存,只有當此塊被換出時才寫回主存💆🏻‍♀️。

2. 非寫分配法

非寫分配法(not-write-allocate)——當 CPU 對 Cache 寫不命中時只寫入主存🧒,不調入Cache👨🏿‍🦱。搭配全寫法使用

全寫法(寫直通法,write-through) —— 當 CPU 對 Cache 寫命中時,必須把數據同時寫入Cache 和主存,一般使用寫緩沖(write buffer)。

(三)🤌、多級Cache

現代計算機常采用多級Cache🤷🏿‍♀️,離CPU越近的速度越快,容量越小⛎,離CPU越遠的速度越慢,容量越大🧙🏼‍♂️🗓。

在這裏插入圖片描述

(四)、Cache 寫策略的總結

在這裏插入圖片描述

鏈接:https://blog.csdn.net/weixin_43848614/article/details/126822596

作者:何為xl

關閉本頁

摩鑫平台教育技術與網絡中心版權所有

©GDAFC Education Technology & Network Center, All Rights Reserved.

摩鑫平台专业提供🥂:摩鑫平台摩鑫🦡、摩鑫娱乐等服务,提供最新官网平台、地址、注册、登陆、登录、入口、全站、网站、网页、网址、娱乐、手机版、app、下载、欧洲杯、欧冠、nba、世界杯、英超等,界面美观优质完美,安全稳定,服务一流😬,摩鑫平台欢迎您。 摩鑫平台官網xml地圖