1. 16 MiB memory, 32 bytes x 256 lines, address F6766F a. 16 MiB = 2^4 x 2^20 ~ 24 bit memory address b. 256 line = 2^8 ~ 8 bit line address c. 32 bytes = 2^6 ~ 5 bit byte index d. 256 lines/cache * 32 bytes/line = 2^8 * 2^5 = 2^13 or 8 KiB cache size. e. 24 bits - ( 8 + 5 ) = 11 bit tag (segment) ID. f. 256 lines * (11 bit tag/line + 1 valid bit/line + 1 dirty bit/line))/8 bits = (256 * 13 bits) / 8 bits/byte = 416 bytes F6766F = 1111 0110 0111 0110 0110 1111 i. Tag h. line g. byte 111 1011 0011 1011 0011 0 1111 7D3 D3 0F *********** 2. 256 MiB, 8 bytes x 64 line cache. Address 67373A a. 256 MiB = 2^8 * 2^20 = 2 ^ 28 ~ 28 bits b. 64 lines/cache 2^6 ~ 6 bit line index c. 8 bytes/line 2^3 ~ 3 bit byte index d. 2^6 * 2^3 = 2^9 ~ 512 Byte cache size. e. 256 MiB/512 B = 2^28/2^9 = 2^19 ~ 19 bit segment Tag. f. 64 lines * (1 valid bit/line + 1 dirty bit/line + 19 tag bits/line)/ 8 bits 64 * (1 + 1 + 19)/8 = 168 bytes 67373A = 0110 0111 0011 0111 0011 1010 i. Tag h. line g. byte 011 0011 1001 1001 1011 10 0111 010 339B 27 2 *********** 3. 512 MiB 4 bytes x 2048 lines memory A1A163E a. 512 MiB 2^9 x 2^20 ~ 29 bit b. 2048 lines/cache = 2^1 x 2^10 ~ 11 bit line index c. 4 bytes/line = 2^2 ~ 2 bit byte index. d. 2048 lines/cache * 4 bytes/line = 2^11 * 2^2 = 2^13 = 8192 bytes/cache. or 8 KiB/cache e. 512 MiB/8 KiB = 2^29/2^13 = 2^16 ~ 16 bit Segment tag. f. 2048 lines * (1 valid bit/line + 1 dirty bit/line + 26 tag bits/line)/8 bits 2048*(1+1+16)/8 = 4086 bytes. A1A163E = 1010 0001 1010 0001 0110 0011 1110 i. Tag h. line g. byte 101 0000 1101 0000 101 1000 1111 10 50D0 58F 2 *********** 4. 32 MiB 16 bytes x 128 lines memory 6D2D39 a. 32 MiB = 2^5 * 2^20 ~ 25 bit memory address b. 128 lines/cache = 2^7 ~ 7 bit line index c. 16 bytes/line = 2^4 ~ 4 bit byte index d. 128 lines/cache * 16 bytes/line = 2^7 * 2^4 = 2^11 bytes/cache or 2KiB e. 32 Mib/2Kib = 2^25/2^11 = 2^14 ~ 14 bit segment tag. f. 128 lines * (1 valid bit/line + 1 dirty bit/line + 14 tag bits/line)/8 bits 128*(1+1+14)/8 = 256 bytes. 6D2D39 = 0110 1101 0010 1101 0011 1001 i. Tag h. line g. byte 0 1101 1010 0101 101 0011 1001 0DA5 53 9 *********** 5. 1 GiB memory, 32 bytes x 1024 line cache memory 757575 a. 1 GiB = 2^30 ~ 30 bit memory address b. 1024 lines/cache = 2^10 ~ 10 bit line index c. 32 bytes/line = 2^5 ~ 5 bit byte index d. 1024 lines/cache * 32 bytes/line = 2^10 * 2^5 = 2^15 or 32KiB cache e. 1 GiB/32 KiB cache = 2^30/2^14 = 2^15 ~ 15 bit segment tag. f. 1024 lines * (1 valid bit + 1 dirty bit + 15 tag bits)/line / 8 bits 1024(1+1+15)/8 = 2176 bytes. 757575 = 0111 0101 0111 0101 0111 0101 757575 = 0 1110 1010 11 1010 1011 1 0101 i. Tag h. line g. byte 0 1110 1010 11 1010 1011 1 0101 0EA 3AB 15