-->
当前位置:首页 > 题库

编程题:编程求出Cache映射方式下各类地址位数(简洁版)

Luz4年前 (2022-04-10)题库685
#### 计算机组成原理老师给小明出了一道Cache映射方式相关的计算题目:


某系统的存储器为4MB,每字块为32个字,每字8位,若Cache为2MB,采用字节编址方式。问:

(1)存储器块内地址共有_____位

(2)Cache行号地址共有_____位

(3)采用全相联映射,块表中的主存标记位共有_____位

(4)采用直接映射,块表中的主存标记位共有_____位

(5)采用16路组相联映射,块表中的主存标记位共有_____位


#### 小明想借助计算机帮忙自己算出答案,今后无论老师出何种组合,他都能一键运行答案,于是他开始了求Cache映射方式下各类地址位数的代码编写。现在他已经写出了$$y=log_2x$$的函数,编程时可以直接使用。

int log2(int x)
{
float fx;
unsigned long ix, exp;
fx = (float)x;
ix = *(unsigned long*)&fx;
exp = (ix >> 23) & 0xFF;
return exp - 127;
}


### 输入格式:
##### 直接输入5个十进制正整数,中间用空格隔开,且保证这5个数的值都等于2的幂次,并符合存储器的一般约束性,如存储器容量会大于Cache容量。

这5个正整数分别代表

(1)存储器容量有多少MB(如题目中数字4);

(2)每字块多少个字(如题目中数字32);

(3)每字多少位(如题目中数字8);

(4)cache容量有多少MB(如题目中数字2);

(5)采用几路组相联(如题目中数字16)

### 输出格式:

见输出样例(注意输出的符号都是半角)。


### 输入样例:

在这里给出一组输入。例如:

in
4 32 8 2 16


in
4096 512 32 16 32

### 输出样例:

在这里给出相应的输出。例如:

out
1.存储器块内地址共有5位
2.Cache行号地址共有16位
3.采用全相联映射|块表中的主存标记位共有17位
4.采用直接映射|块表中的主存标记位共有1位
5.采用16路组相联映射|块表中的主存标记位共有5位


out
1.存储器块内地址共有11位
2.Cache行号地址共有13位
3.采用全相联映射|块表中的主存标记位共有21位
4.采用直接映射|块表中的主存标记位共有8位
5.采用32路组相联映射|块表中的主存标记位共有13位






答案:若无答案欢迎评论