直接映射缓存示例
Direct mapped cache example
我对直接映射缓存这个话题真的很困惑我一直在寻找一个有很好解释的例子,这让我比以往任何时候都更加困惑。
例如:我有
- 2048字节内存
- 64 字节大缓存
8 字节高速缓存行
使用直接映射缓存,我如何确定 'LINE' 'TAG' 和“字节偏移量”?
我相信寻址位的总数是11位,因为2048 = 2^11
2048/64 = 2^5 = 32 个块(0 到 31)(需要 5 位)(标签)
64/8 = 8 = 2^3 = 索引的 3 位
8 字节缓存行 = 2^3 这意味着我需要 3 位字节偏移
所以地址应该是这样的:5 个用于标记,3 个用于索引,3 个用于字节偏移量
我猜对了吗?
我猜对了吗? 是
说明
1) 主内存大小为2048字节=211。所以你需要 11 位来寻址一个字节(如果你的字大小是 1 个字节)[word = 将使用地址访问的最小单个单元]
2) 可以通过(main memory size / cash size)计算直接映射中的标记位。但我会解释更多关于标记位的信息。
这里cashe line的大小(总是和主内存块的大小一样)是8个字节。这是 23 字节。因此,您需要 3 位来表示现金行中的一个字节。现在地址中还剩下 8 位 (11 - 3)。
现在缓存中的总行数是(现金大小/行大小)= 26 / 23 = 23
因此,您有 3 位来表示所需字节所在的行。
现在剩余的位数是 5 (8 - 3)。
这5位可以用来表示一个标签。 :)
3) 3 位用于索引。如果您试图将表示一行所需的位数标记为索引。是的,你是对的。
4) 3 位将用于访问具有高速缓存行的字节。 (8 = 23)
所以,
11位总地址长度=5个标记位+3位代表一行+3位代表一个字节(字)与一行
希望现在没有混乱。
我对直接映射缓存这个话题真的很困惑我一直在寻找一个有很好解释的例子,这让我比以往任何时候都更加困惑。
例如:我有
- 2048字节内存
- 64 字节大缓存
8 字节高速缓存行 使用直接映射缓存,我如何确定 'LINE' 'TAG' 和“字节偏移量”?
我相信寻址位的总数是11位,因为2048 = 2^11
2048/64 = 2^5 = 32 个块(0 到 31)(需要 5 位)(标签)
64/8 = 8 = 2^3 = 索引的 3 位
8 字节缓存行 = 2^3 这意味着我需要 3 位字节偏移
所以地址应该是这样的:5 个用于标记,3 个用于索引,3 个用于字节偏移量
我猜对了吗?
我猜对了吗? 是
说明
1) 主内存大小为2048字节=211。所以你需要 11 位来寻址一个字节(如果你的字大小是 1 个字节)[word = 将使用地址访问的最小单个单元]
2) 可以通过(main memory size / cash size)计算直接映射中的标记位。但我会解释更多关于标记位的信息。
这里cashe line的大小(总是和主内存块的大小一样)是8个字节。这是 23 字节。因此,您需要 3 位来表示现金行中的一个字节。现在地址中还剩下 8 位 (11 - 3)。
现在缓存中的总行数是(现金大小/行大小)= 26 / 23 = 23
因此,您有 3 位来表示所需字节所在的行。
现在剩余的位数是 5 (8 - 3)。
这5位可以用来表示一个标签。 :)
3) 3 位用于索引。如果您试图将表示一行所需的位数标记为索引。是的,你是对的。
4) 3 位将用于访问具有高速缓存行的字节。 (8 = 23)
所以,
11位总地址长度=5个标记位+3位代表一行+3位代表一个字节(字)与一行
希望现在没有混乱。