A computer system uses 16-bit memory addresses. It has a 2K-byte cache organized in a direct-mapped manner with 64 bytes per cache block. Assume that the size of each memory word is 1 byte.
When a program is executed, the processor reads data sequentially from the following word addresses:
128, 144, 2176, 2180, 128, 2176
All the above addresses are shown in decimal values. Assume that the cache is initially empty. The cache hits ratio occur for for above given addresses is __________ .
(A) 0.333
(B) 0.666
(C) 0.353
(D) 0.535
Answer: (A)
Explanation: First, find word, block and tag size:
Block size = 64 bytes = 26 bytes = 26 words (since 1 word = 1 byte)
Therefore, Number of bits in the Word field = 6
Cache size = 2K-byte = 211 bytes
Number of cache blocks = Cache size / Block size = 211/26 = 25
Therefore, Number of bits in the Block field = 5
Total number of address bits = 16
Therefore, Number of bits in the Tag field = 16 – 6 – 5 = 5
For a given 16-bit address, the 5 most significant bits, represent the Tag, the next 5 bits represent the Block, and the 6 least significant bits represent the Word.
Now, check cache hit or miss for given addresses:
The cache is initially empty. Therefore, all the cache blocks are invalid.
-
Access # 1:
- Access # 2:
Address = (144)10 = (0000000010010000)2
For this address, Tag = 00000, Block = 00010, Word = 010000
Since tag field for cache block 00010 is 00000 before this access, this will be a cache hit (because
address tag = block tag) - Access # 3:
Address = (2176)10 = (0000100010000000)2
For this address, Tag = 00001, Block = 00010, Word = 000000
Since tag field for cache block 00010 is 00000 before this access, this will be a cache miss
(address tag ≠ block tag)
After this access, Tag field for cache block 00010 is set to 00001 - Access # 4:
Address = (2180)10 = (0000100010000100)2
For this address, Tag = 00001, Block = 00010, Word = 000100
Since tag field for cache block 00010 is 00001 before this access, this will be a cache hit (address
tag = block tag) - Access # 5:
Address = (128)10 = (0000000010000000)2
For this address, Tag = 00000, Block = 00010, Word = 000000
Since tag field for cache block 00010 is 00001 before this access, this will be a cache miss
(address tag ≠ block tag)
After this access, Tag field for cache block 00010 is set to 00000 - Access # 6:
Address = (2176)10 = (0000100010000000)2
For this address, Tag = 00001, Block = 00010, Word = 000000
Since tag field for cache block 00010 is 00001 before this access, this will be a cache miss
(address tag ≠ block tag)
After this access, Tag field for cache block 00010 is set to 00001
Address = (128)10 = (0000000010000000)2
(Note: Address is shown as a 16-bit number, because the computer uses 16-bit addresses)
For this address, Tag = 00000, Block = 00010, Word = 000000
Since the cache is empty before this access, this will be a cache miss
After this access, Tag field for cache block 00010 is set to 00000
Therefore, cache hit rate = Number of hits / Number of accesses = 2/6 = 0.333.
Option (A) is true.
Quiz of this Question