MIPS N路关联缓存

时间:2017-06-05 09:56:09

标签: caching memory mips memory-mapping

这是一个关于记忆组织的问题,我很难理解,

假设我们有一个容量为import QtQuick 2.6 import QtQuick.Controls 2.0 import QtQuick.Window 2.0 Window { visible: true width: 200 height: 400 title: qsTr("Hello World") id: page SwipeView { id: swipeView anchors.fill: parent currentIndex: 0 Page { Label { text: qsTr("First page") anchors.centerIn: parent } } Page { Label { text: qsTr("Second page") anchors.centerIn: parent } } Page { Label { text: qsTr("Third page") anchors.centerIn: parent } } Page { Label { text: qsTr("Fourth page") anchors.centerIn: parent } } Page { Label { text: qsTr("Fifth page") anchors.centerIn: parent } } } Rectangle { id:minus width:parent.width/2 height:100 anchors.left:parent.left anchors.bottom:parent.bottom color:"red" MouseArea { anchors.fill:parent onClicked:{ if(swipeView.currentIndex>0) swipeView.currentIndex-- } } } Rectangle { id:plus width:parent.width/2 height:100 anchors.right:parent.right anchors.bottom:parent.bottom color:"green" MouseArea { anchors.fill:parent onClicked:{ if(swipeView.currentIndex<4) swipeView.currentIndex++ } } } } 字节的N路组关联缓存。该 设置字段的地址大小为7位,标记字段为21位。如果我们假设 缓存与32位处理器一起使用,然后是块大小(in bytes),缓存包含多少有效位,以及它的关联性 缓存?

2 个答案:

答案 0 :(得分:1)

因此,我们有关于处理器和缓存的以下信息 -

缓存大小= 4096 B

地址位= 32

索引位= 7

标记位= 21

根据以上信息,您可以快速计算偏移字段所需的位数 -

偏移位=地址位 - 标记位 - 索引位

偏移位= 32 - 21 - 7 = 4

偏移位= 4

使用偏移位,可以找到块大小,2 **偏移位

块大小= 16字节

接下来是缓存的关联性 我们知道索引位= 7。 这意味着我们有128个街区。每个块宽16个字节。

因此,缓存中的方式数量为 -

路数=缓存大小/(块数*块大小)

路数= 2 因此,结合性是2.

关于有效位数。每个块都需要一个有效位。因此,有效位的数量将是 -

有效位= 128 * 2

有效位= 256

答案 1 :(得分:1)

为了解决这些类型的问题,这里有一些很好的方程式。

要知道的参数

C = cache capacity
b = block size
B = number of blocks
N = degree of associativity
S = number of set
tag_bits
set_bits (also called index)
byte_offset
v = valid bits

要知道的等式

B = C/b
S = B/N
b = 2^(byte_offset)
S = 2^(set_bits)

内存地址

|___tag________|____set___|___byte offset_|

现在回答问题

已知

C = 4096 bytes
set_bits = 7
tag_bits = 21
32 bits address field

问:

b?
N?
v?

只需从tag_bits中减去set_bits32 bit field,即可获得byte_offset

byte_offset = 32-21-7 = 4 bits

b = 2^4 = 16 bytes
S = 2^7 = 128 set
B = C/b = 4096/16 = 256
N = B/S = 256/128 = 2
v = B = 256 valid bits