【组成原理

您所在的位置:网站首页 cache总容量的位数 【组成原理

【组成原理

2024-01-04 17:20| 来源: 网络整理| 查看: 265

目录1 高速缓冲存储器(Cache)1.1 组相联映射例 1(按字节编址)例 2(按字编址)例 3(按字节编址,考虑 LRU 算法、回写策略)1.2 全相联映射例 4(按字节编址)例 5(按字编址)1.3 直接映射例 6(按字节编址)1.4 Cache 命中率的计算2 页式虚拟存储器2.1 页表2.2 快表(TLB)2.2.1 组相联 TLB2.2.2 全相联 TLB2.2.3 直接相联 TLB3 LRU 替换算法3.1 直接映射的 LRU 算法3.2 组相联的 LRU 算法

1 高速缓冲存储器(Cache) 1.1 组相联映射

将 Cache 分为 Q 个大小相等的组,每组有 r 个 Cache行,称为 r 路组相联。

Cache 组号 = 主存块号 mod Cache 组数 (Q) 例 1(按字节编址)

【假设】

某计算机的主存地址空间为 256MB,按字节编址(1B),则有 256MB/1B = 256M = 228 个存储单元,地址位数为 28 一个主存块大小为 64B(即 Cache 行长为 64B),则一个主存块的存储单元个数为 64B/1B = 64 Cache 有 16 行,又已知 Cache 行长为 64B,二路组相联(即 2 行/组 或 2 块/组),一共 16/2=8 组

【解答】

主存的物理地址的结构:

Cache 一共 23 = 8 组,所以组号占 3 位;主存块(行长)存储单元个数为 26 = 64,所以块内地址占 6 位;因此标记占 28-3-6=19 位。

标记 组号 块内地址 19b 3b 6b Cache 地址的结构:

Cache 的存储单元个数为 64B * 16 / 1B = 1024 = 210,所以 Cache 地址一共 10 位;Cache 一共 23 = 8 组,所以组号占 3 位;每组有两行,所以行号(块号)占 1 位;块内地址占 6 位。

组号 行号 块内地址 3b 1b 6b Cache 结构(组号、行号不是 Cache 的组成部分): (组号) (行号) 有效位 标记位(Tag) 数据(行长) (0) (0) 1b 19b 64B (0) (1) 1b 19b 64B (1) (2) 1b 19b 64B (1) (3) 1b 19b 64B (...) (...) ... ... ... (...) (...) ... ... ... (7) (14) 1b 19b 64B (7) (15) 1b 19b 64B Cache 行位数 = 标记阵列位数 + Cache 行长 = 1 + 19 + 64 * 8 = 532 Cache 总位数 = Cache 总行数 * Cache 行位数 = 16 * (1 + 19 + 64 * 8) b = 8512b

【注】Cache 总容量指的是 Cache 的存储容量,不包括标记阵列(标记位、有效位、脏位等),不要与 Cache 总位数搞混!比如某个 Cache 总容量为 64KB,指的是 Cache 存储容量为 64KB,若再加条件:Cache 行长(即主存块大小)为 128B,则该 Cache 总行数为 64KB/128B = 512 行。

例 2(按字编址)

【假设】

某计算机的主存地址空间为 256MB,按字编址(4B),则有 256MB/4B = 64M = 226 个存储单元,地址位数为 26 一个主存块大小为 64B(即 Cache 行长为 64B),则一个主存块的存储单元个数为 64B/4B = 16 Cache 有 16 行,又已知 Cache 行长为 64B,二路组相联,一共 16/2=8 组

【解答】

主存的物理地址的结构:

Cache 一共 23 = 8 组,所以组号占 3 位;主存块(行长)存储单元个数为 24 = 16,所以块内地址占 4 位;因此标记占 26-3-4=19 位。

标记 组号 块内地址 19b 3b 4b Cache 地址的结构:

Cache 的存储单元个数为 64B * 16 / 4B = 256 = 28,所以 Cache 地址一共 8 位;Cache 一共 23 = 8 组,所以组号占 3 位;每组有两行,所以行号(块号)占 1 位;块内地址占 4 位。

组号 行号 块内地址 3b 1b 4b Cache 结构(组号、行号不是 Cache 的组成部分): (组号) (行号) 有效位 标记位(Tag) 数据(行长) (0) (0) 1b 19b 64B (0) (1) 1b 19b 64B (1) (2) 1b 19b 64B (1) (3) 1b 19b 64B (...) (...) ... ... ... (...) (...) ... ... ... (7) (14) 1b 19b 64B (7) (15) 1b 19b 64B Cache 行位数 = 标记阵列位数 + Cache 行长 = 1 + 19 + 64 * 8 = 532 Cache 总位数 = Cache 总行数 * Cache 行位数 = 16 * (1 + 19 + 64 * 8) b = 8512b 例 3(按字节编址,考虑 LRU 算法、回写策略)

【假设】

某计算机的主存地址空间为 256MB,按字节编址(1B),则有 256MB/1B = 256M = 228 个存储单元,地址位数为 28 一个主存块大小为 16B(即 Cache 行长为 16B),则一个主存块的存储单元个数为 16B/1B = 16 Cache 有 64 行,又已知 Cache 行长为 16B,四路组相联,一共 64/4=16 组 考虑 LRU 算法、回写策略(LRU 位的位数与 Cache 组大小有关,2 路时有一位,4 路时有两位)

【解答】

主存的物理地址的结构:

Cache 一共 24 = 16 组,所以组号占 4 位;主存块(行长)存储单元个数为 24 = 16,所以块内地址占 4 位;因此标记占 28-4-4=20 位。

标记 组号 块内地址 20b 4b 4b Cache 地址的结构:

Cache 的存储单元个数为 64B * 16 / 1B = 1024 = 210,所以 Cache 地址一共 10 位;Cache 一共 24 = 16 组,所以组号占 4 位;每组有四行,所以行号(块号)占 2 位;块内地址占 4 位。

组号 行号 块内地址 4b 2b 4b Cache 结构(组号、行号不是 Cache 的组成部分):

考虑 LRU 算法,因为是四路组相联,22 = 4,所以替换控制位占 2 位;考虑回写策略,所以脏位占 1 位。(注意:如果题目中没有要求考虑,则不需要加这些东西)

(组号) (行号) 有效位 替换控制位 脏位 标记位(Tag) 数据(行长) (0) (0) 1b 2b 1b 20b 16B (0) (1) 1b 2b 1b 20b 16B (0) (2) 1b 2b 1b 20b 16B (0) (3) 1b 2b 1b 20b 16B (1) (4) 1b 2b 1b 20b 16B (1) (5) 1b 2b 1b 20b 16B (1) (6) 1b 2b 1b 20b 16B (1) (7) 1b 2b 1b 20b 16B (...) (...) ... ... ... (...) (...) ... ... ... (15) (62) 1b 2b 1b 20b 16B (15) (63) 1b 2b 1b 20b 16B Cache 行位数 = 标记阵列位数 + Cache 行长 = 1 + 2 + 1 + 20 + 16 * 8 = 152 Cache 总位数 = Cache 总行数 * Cache 行位数 = 64 * (1 + 2 + 1 + 20 + 16 * 8) b = 9728b 1.2 全相联映射

当 Q=1 时变为全相联映射,即整个 Cache 都是一个组。

例 4(按字节编址)

【假设】

某计算机的主存地址空间为 256MB,按字节编址(1B),则有 256MB/1B = 256M = 228 个存储单元,地址位数为 28 一个主存块大小为 64B(即 Cache 行长为 64B),则一个主存块的存储单元个数为 64B/1B = 64 Cache 有 16 行,又已知 Cache 行长为 64B

【解答】

主存的物理地址的结构:

主存块(行长)存储单元个数为 26 = 64,所以块内地址占 6 位;因此标记占 28-6=22 位。

标记 组号 块内地址 22b 0b 6b Cache 地址的结构:

Cache 的存储单元个数为 64B * 16 / 1B = 1024 = 210,所以 Cache 地址一共 10 位;Cache 有 16 行,因此块号占 4 位;块内地址占 6 位。

行号 块内地址 4b 6b Cache 结构(组号、行号不是 Cache 的组成部分): (组号) (行号) 有效位 标记位(Tag) 数据(行长) (0) (0) 1b 22b 64B (0) (1) 1b 22b 64B (0) (2) 1b 22b 64B (0) (3) 1b 22b 64B (...) (...) ... ... ... (...) (...) ... ... ... (0) (14) 1b 22b 64B (0) (15) 1b 22b 64B Cache 行位数 = 标记阵列位数 + Cache 行长 = 1 + 22 + 64 * 8 = 279 Cache 总位数 = Cache 总行数 * Cache 行位数 = 16 * (1 + 22 + 64 * 8) b = 4464b 例 5(按字编址)

【假设】

某计算机的主存地址空间为 256MB,按字编址(4B),则有 256MB/4B = 64M = 226 个存储单元,地址位数为 26 一个主存块大小为 64B(即 Cache 行长为 64B),则一个主存块的存储单元个数为 64B/4B = 16 Cache 有 16 行,又已知 Cache 行长为 64B

【解答】

主存的物理地址的结构:

主存块(行长)存储单元个数为 24 = 16,所以块内地址占 4 位;因此标记占 28-4=24 位。

标记 组号 块内地址 24b 0b 4b Cache 地址的结构:

Cache 的存储单元个数为 64B * 16 / 4B = 256 = 28,所以 Cache 地址一共 8 位;Cache 有 16 行,因此块号占 4 位;块内地址占 4 位。

行号 块内地址 4b 4b Cache 结构(组号、行号不是 Cache 的组成部分): (组号) (行号) 有效位 标记位(Tag) 数据(行长) (0) (0) 1b 24b 64B (0) (1) 1b 24b 64B (0) (2) 1b 24b 64B (0) (3) 1b 24b 64B (...) (...) ... ... ... (...) (...) ... ... ... (0) (14) 1b 24b 64B (0) (15) 1b 24b 64B Cache 行位数 = 标记阵列位数 + Cache 行长 = 1 + 24 + 64 * 8 = 281 Cache 总位数 = Cache 总行数 * Cache 行位数 = 16 * (1 + 24 + 64 * 8) b = 4496b 1.3 直接映射

当 r=1 时变为直接映射,即每行 Cache 都是一个组。

Cache 组号 = 主存块号 mod Cache 总行数 例 6(按字节编址)

【假设】

某计算机的主存地址空间为 256MB,按字节编址(1B),则有 256MB/1B = 256M = 228 个存储单元,地址位数为 28 一个主存块大小为 64B(即 Cache 行长为 64B),则一个主存块的存储单元个数为 64B/1B = 64 Cache 有 16 行,又已知 Cache 行长为 64B

【解答】

主存的物理地址的结构:

Cache 一共 24 = 16 行,所以行号占 4 位;主存块(行长)存储单元个数为 26 = 64,所以块内地址占 6 位;因此标记占 28-4-6=18 位。

标记 行号(组号) 块内地址 18b 4b 6b Cache 地址的结构:

Cache 的存储单元个数为 64B * 16 / 1B = 1024 = 210,所以 Cache 地址一共 10 位;Cache 有 16 行,因此块号占 4 位;块内地址占 6 位。

行号 块内地址 4b 6b Cache 结构(组号、行号不是 Cache 的组成部分): (组号) (行号) 有效位 标记位(Tag) 数据(行长) (0) (0) 1b 18b 64B (1) (1) 1b 18b 64B (2) (2) 1b 18b 64B (3) (3) 1b 18b 64B (...) (...) ... ... ... (...) (...) ... ... ... (14) (14) 1b 18b 64B (15) (15) 1b 18b 64B Cache 行位数 = 标记阵列位数 + Cache 行长 = 1 + 18 + 64 * 8 = 275 Cache 总位数 = Cache 总行数 * Cache 行位数 = 16 * (1 + 18 + 64 * 8) b = 4400b 1.4 Cache 命中率的计算

【例 7】有如下 C 语言程序段:

for (k=0; k


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3