编程题:编程求出Cache映射方式下各类地址位数(简洁版)
#### 计算机组成原理老师给小明出了一道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位
答案:若无答案欢迎评论
某系统的存储器为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位
答案:若无答案欢迎评论