Questions: How do you determine the word size in a block? 2 answers: A1: it is the block size of the smaller cache A2: it is the number of wires connecting you to the smaller cache What was the valid column? It tells me if the line in the cache has the right data (that is, if it matched RAM's content) Can you have a line in a smaller cache that is not in its bigger neighbor? Version 1: can small's data != big's data Yes, if we write with the write-back policy Version 2: can small have a block that no version of is in big? Possible if: we have 2 small caches sharing a big cache small has more lines per set than big Can you know what's been overwritten in a bigger cache? How? It is bad if a valid line in small is not the same as big (unless small is dirty) How do we tell? The line is invalid vd 00 garbage here 01 nonsense (garbage) 10 small has the right data, and so does big 11 small has right data, and big does not valid dirty tag block (as int[] literal) / 1 1 00010011 { 748, 561, 983, 0, 379, 834, 620, 434} set 000 < 1 0 01100000 { 57, 404, 777, -45, 72, 186, 685, 291} \ 1 0 10000111 { 877, 640, 613, 112, 542, 356, -70, 644} During cache write, if you fetch from big cache, how do you then know what to change? Write byte 0x3a to 11010010 111 110 01 But cache has 4-byte words 1. get all 4 bytes as they are now 0x12345678 (addresses ending 00 through 11) 2. change the byte of that word 0x12343a78 3. send that word to be written Write 0x12343a78 to 11010010 111 110 xx