这部分的知识,虽然考点很少,我也常常感觉自己能够非常熟练的演绎出访问过程,给出计算结果。但是每次遇到一个新的题,总会有一小会的卡顿,然后心情就紧张一下。
再分析两个题目,熟悉一下。
假设脑海中是一个宏观的印象,那么需要抓住的核心是:定位主存块号。
核心的过程是将主存块映射到Cache块,其次才是策略的选择。
而定位主存块号的角度通常有:告诉你十进制的主存地址或16进制的主存地址,以及主存容量是Cache的倍数。
http://blog.csdn.net/u011240016/article/details/52690297
这篇文章中,假设了Cache有多个,总和容量等于主存。这样,可以虚拟的认为主存地址高位标记用的是哪一个Cache,收缩到一个Cache,那么就可以认为是第多少轮访问Cache。
所以,拿主存总容量除以Cache总容量,再求其2的指数幂,即为主存块的标记。
所以,这个感性认识可以有:高位标记的是主存块进入Cache是在第几轮的数目。
一般给定一个10进制的主存地址,需要根据块的大小,计算出这是主存的多少块,然后拿着这个块数去mod Cache块数。
这种状况下,针对十进制数字较为好算。
如果给的是一串16进制,理所当然的化为二进制。
然后用的思路还是一样,只是形式上,我们不再计较这是主存的多少块,要专注于二进制位的分配问题。虽然,本质是一样的,但是要专注问题。
看例题更容易解释:
某存储系统中,主存容量是Cache容量的4096倍,Cache被分为64个块。当主存地址采用直接映射时,地址映射表的大小应该是 64 * 13bit.
PS:b不考虑一致性维护位和替换算法位。
推导:主存是Cache的 4096=212