ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

直接映射(Direct Mapping)是一种Cache地址映射方式,其核心规则是:主存中的每个数据块只能映射到Cache中**唯一确定的行(Cache line)

直接映射(Direct Mapping)是一种Cache地址映射方式,其核心规则是:主存中的每个数据块只能映射到Cache中**唯一确定的行(Cache line) 直接映射Direct Mapping是一种Cache地址映射方式其核心规则是主存中的每个数据块只能映射到Cache中唯一确定的行Cache line即通过主存地址中的“索引位Index”直接计算出该块应存放的Cache位置。✅ 优点硬件实现简单、查找速度快只需比较1个Cache行的标记Tag❌ 缺点存在**冲突失效Conflict Miss**风险高——即使Cache未满若多个常用主存块映射到同一Cache行会频繁相互驱逐降低命中率。例如若Cache有64行则主存块号 mod 64 决定其映射到哪一行块号0、64、128…均映射到第0行。在直接映射Cache中主存地址被划分为三个字段Tag标记、Index索引和Block Offset块内偏移划分依据由Cache的三个关键参数决定Cache总大小Capacity如 32 KB行Line/Block大小Block Size如 64 字节Cache行数Number of Lines Capacity ÷ Block Size对直接映射也等于“组数”因每组仅1行✅ 划分规则如下从低地址到高地址即右→左字段位宽计算方式作用Block Offsetblog⁡2(Block Size)b \log_2(\text{Block Size})blog2​(Block Size)由块内字节数决定定位块内具体字节如64B →b6b 6b6位Indexilog⁡2(Number of Lines)i \log_2(\text{Number of Lines})ilog2​(Number of Lines)由Cache行数决定直接选择Cache中哪一行如2048行 →i11i 11i11位Tag剩余高位t主存地址总位数−i−bt \text{主存地址总位数} - i - bt主存地址总位数−i−b用于与Cache行的Tag字段比对确认是否命中 示例32位主存地址Cache容量 16 KB块大小 32 字节Block Size 32 B →blog⁡2325b \log_2 32 5blog2​325位OffsetNumber of Lines 16 KB÷32 B51216\,\text{KB} ÷ 32\,\text{B} 51216KB÷32B512→ilog⁡25129i \log_2 512 9ilog2​5129位IndexTag位数t32−9−518t 32 - 9 - 5 18t32−9−518位因此地址格式为[Tag: 18位] [Index: 9位] [Offset: 5位]注意Index字段不经过哈希或计算而是直接作为Cache行号使用Tag存储在Cache行中匹配时需完全一致才命中。
返回列表