CPU访问内存的过程

CPU访问内存的过程

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字节),共6条指令 ⇒ 整个指令占 4 × 6 = 24 字节
Cache 块大小为 32字节 ⇒ 32字节 > 24字节 ⇒ 只需要调入Cache一次
指令 Cache 的命中率 = (6000-1)/6000= 5999/6000

(3)答案:可能产生缺页异常的指令:指令3:Load R5;0 (R4)
由题干知:机器代码调入主存,数组未调入主存;只有当主存中没有,需要去磁盘中读写时才会发生缺页异常 ⇒ 只有在读取数组时才可能发生缺页异常 ⇒ 指令3:Load R5;0 (R4)
由于数组未调入主存 ⇒ 第一次访问数组需要访问磁盘


例题2:某计算机存储器按字节编址,虚拟(逻辑)地址空间大小为16MB,主存(物理)地址空间大小为1MB,页面大小为4KB;Cache采用直接映射方式,共8行;主存与Cache之间交换的块大小为32B。系统运行到某一时刻时,页表的部分内容和Cache的部分内容分别如图a、图b所示,图中页框号及标记字段的内容为十六进制形式。
CPU访问内存的过程
请回答下列问题。
(1)虚拟地址共有几位,哪几位表示虚页号?物理地址共有几位,哪几位表示页框号(物理页号)?
(2)使用物理地址访问 Cache 时,物理地址应划分成哪几个字段?要求说明每个字段的位数及在物理地址中的位置。
(3)虚拟地址001C60H 所在的页面是否在主存中?若在主存中,则该虚拟地址对应的物理地址是什么?访问该地址时是否Cache命中?要求说明理由。
(4)假定为该机配置一个4路组相联的TLB,该TLB共可存放8个页表项,若其当前内容(十六进制)如图c所示,则此时虚拟地址024BACH 所在的页面是否在主存中?要求说明理由。
CPU访问内存的过程


解析