CPU访问内存的过程

CPU访存流程图在这里插入图片描述

例题


例题1:某机器M上有如下循环代码段:P: for(i=0; i<N; i++) sum += A[i]; 假设编译时变量sum和i分别分配在寄存器R1和R2中,常量N在寄存器R6中,数组A的首地址在寄存器R3中,程序段P起始地址为08048100H,对应的汇编代码和机器代码如图所示:

编号 地址 机器代码 汇编代码 注释
1 08048100H 00022080H Loop:shl R4;R2,2 (R2<<2)→R4
2 08048104H 00083020H Add R4;R4,R3 (R4)+(R3)→R4
3 08048108H 8C850000H Load R5;0 (R4) ((R4)+0)→R5
4 0804810CH 00250820H Add R1;R1,R5 (R1)+(R5)→R1
5 08048110H 2042000H Addi R2;R2,1 (R2)+1→R2
6 08048114H 1446FFECH Bne R2;R6,loop If(R2)!=(R6)go to loop

假设M采用页式虚拟存储管理。P开始执行时,(R1)=(R2)=0,(R6)=1000,其机器代码已调入主存,但不在Cache中;数组A未调入主存,其所有数组元素在同一页,并存储在磁盘同一地区。请回答下列问题,并说明理由。
(1) M的存储器编址单位是什么?
(2)M的指令Cache和数据Cache分离,若指令Cache共有16行,Cache和主存交换的块大小为32字节,则其数据区的容量是多少?若仅考虑程序段P的执行,则指令Cache的命中率为多少?
(3)P在执行过程中,哪条指令的执行可能产生缺页异常?对于数组A的访问,需要读磁和TLB至少各多少次?


解析
(1) 答案:M的存储器编址单位是字节
机器代码 由 8个十六进制数组成 ⇒ 一条机器代码占 8 × 4 = 32 bit
两个相邻的的地址差值 = 4 ⇒ 32bit ÷ 4 = 8 bit ⇒ 8 bit = 1B ⇒ 一个地址指向的空间存放一个字节 ⇒ M的存储器编址单位是字节

(2)答案:数据区的容量= 2 7 2^7 27B;指令 Cache 的命中率=5999/6000
指令Cache共有16行,块大小为32字节 ⇒ 数据区容量 = 16 × 32B = 2 7 2^7 27B
N = 1000,共有6条的代码 ⇒ 共需要运行6000条代码
由题干知:机器代码已调入主存,但不在 Cache 中 ⇒ 首次访问指令 Cache 时,未命中
由(1)知:一条机器代码占32bit(4字节)ÿ

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值