CPU访问内存的过程

CPU访存流程图CPU访问内存的过程_第1张图片

例题


例题1:某机器M上有如下循环代码段:P: for(i=0; i

编号 地址 机器代码 汇编代码 注释
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);读磁至少1次,读TLB至少1000次
由题干知:机器代码调入主存,数组未调入主存;只有当主存中没有,需要去磁盘中读写时才会发生缺页异常 ⇒ 只有在读取数组时才可能发生缺页异常 ⇒ 指令3:Load R5;0 (R4)
由于数组未调入主存 ⇒ 第一次访问数组需要访问磁盘
要求至少读磁和读TLB的次数 ⇒ 在只进行一次缺页替换的情况下读磁和读TLB最少 ⇒ 读磁至少1次,读TLB至少1000次


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


解析

(1)答案:虚拟地址共有24位,高12位表示虚页号;物理地址共有20位,高8位表示页框号
由题干知:虚拟(逻辑)地址空间大小为16MB ⇒ 16M = 2 4 2^4 24 × 2 20 2^{20} 220B = 2 24 2^{24} 224B ⇒ 24位
由题干知:主存(物理)地址空间大小为1MB ⇒ 1M = 2 20 2^{20} 220B ⇒ 20位
虚页号 = 虚拟地址空间位数 - 页面地址空间位数;页面大小为4K(4K= 2 12 2^{12} 212) ⇒ 24 - 12 = 12位
页框号 = 物理地址空间位数 - 页面地址空间位数;页面大小为4K(4K= 2 12 2^{12} 212) ⇒ 20 - 12 = 8位
(2)答案:物理地址划分为三个字段:Tag,index,offset;offset5位(0-4),index3位(5-7),Tag12位(8-19)
由题干知:主存与Cache之间交换的块大小为32B ⇒ 32B = 2 5 2^5 25B ⇒ offset = 5位
由题干知:Cache采用直接映射方式,共8行 ⇒ 8 = 2 3 2^3 23index = 3位
Tag = 物理地址空间位数 - offset位数 - index位数 = 20 - 5 - 3 = 12位 ⇒ Tag = 12位
(3)答案:页面在主存中;物理地址为04C60H;没命中Cache
虚拟地址001C60H;由(1)知:虚页号12位 ⇒ 将虚拟地址划分为两个部分:虚页号(001H),偏移(C60H) ⇒ 将虚页号与页表对比(页表中虚页号为1时,有效位=1) ⇒ 页面在主存中
将对应的页框号(04H)拿出来,偏移地址(C60H)不变 ⇒ 物理地址:04C60H
物理地址:04C60H;由(1)知:页框号8位 ⇒ 将物理地址划分为三个部分:标记Tag(04CH),索引index(011),偏移offset(00000) 60H = 0110 0000 ⇒ 将索引index与Cache对比(行号为3时,有效位=1,标记=105) ⇒ 标记105 ≠ 物理地址标记04C ⇒ 没有命中Cache
(4)答案:虚拟地址所在的页面在主存中
虚拟地址024BACH;由(1)知:虚页号(Tag+index)12位;TLB中只有两组(index=1位) ⇒ 将虚拟地址划分为三个部分:(024H=0000 0010 0100) 标记Tag(0000 0010 010),索引index(0),偏移offset(BACH) ⇒ 将虚页号与TLB对比(页表中虚页号为1时,有效位=1) ⇒ 将索引index与TLB对比(组号为0、有效位为1时,标记为012) ⇒ 标记12H = 虚拟地址标记12H ⇒ 虚拟地址所在的页面在主存中


例题3:请求分页管理系统中,假设某进程的页表内容如下表所示。

页号 页框号 有效位
0 101H 1
1 - 0
2 254H 1

页面大小为4KB,一次内存的访问时间是100ns,一次快表(TLB)的访问时间是10ns,处理一次缺页的平均时间为108ns(已含更新TLB和页表的时间),进程的驻留集大小固定为2,采用最近最少使用置换算法(LRU)和局部淘汰策略。假设①TLB初始为空;②地址转换时先访问TLB,若TLB未命中,再访问页表(忽略访问页表之后的TLB更新时间);③有效位为0表示页面不在内存,产生缺页中断,缺页中断处理后,返回到产生缺页中断的指令处重新执行。设有虚地址访问序列2362H、1565H、25A5H,请问:
(1)依次访问上述三个虚地址,各需多少时间?给出计算过程。
(2)基于上述访问序列,虚地址1565H的物理地址是什么?请说明理由。


解析
(1)答案:210ns;328ns;110ns
页面大小 4K = 2 2 2^2 22 × 2 10 2^{10} 210 = 2 12 2^{12} 212 ⇒ offset = 12位 ;TLB初始为空
虚拟地址 2362H ⇒ 虚页号(2H) ;TLB为空(TLB miss) ⇒ 在页表中,页号为2的有效位为1 ⇒ 页表 hit ⇒ MEM
访问时间 = TLB(miss) → \rightarrow 页表(hit) → \rightarrow MEM = 10ns + 100ns +100ns = 210ns
虚拟地址 1565H ⇒ 虚页号(1H);TLB(虚页号=2,miss) ⇒ 在页表中,页号为2=1的有效位为0 ⇒ 页表(miss) ⇒ 缺页(更新TLB和页表) ⇒ TLB(hit) ⇒ MEM
访问时间 = TLB(miss) → \rightarrow 页表(miss) → \rightarrow 处理缺页(更新TLB和页表) → \rightarrow TLB(hit) → \rightarrow MEM = 10ns + 100ns + 108ns + 10ns +100ns = 328ns
虚拟地址 25A5H ⇒ 虚页号(2H);TLB(虚页号=2,1 hit) ⇒ MEM
访问时间 = 10ns + 100ns = 110ns
(2)答案:物理地址(101565H)
由题干知:采用最近最少使用置换算法(LRU)和局部淘汰策略;进程的驻留集大小固定为2;基于上述访问序列 ⇒ 当访问虚地址1565H时,替换页号为0的空间
虚地址1565H ⇒ 偏移(565H);对应的页框号(101H) ⇒ 物理地址:101565H


虚拟地址转换物理地址

首先访问快表
快表结构:

组号 有效位 标记 页框号

虚拟地址划分为:

Tag index 偏移

① 用虚拟地址的index与快表中的组号比较(快表有效位=1)
② 虚拟地址的Tag = 快表中的标记 hit ⇒ 物理地址 = 快表页框号 + 虚拟地址偏移
若快表miss,访问页表
页表结构:

虚页号 有效位 页框号

虚拟地址划分为:

虚页号 偏移

① 用虚拟地址的虚页号与页表的虚页号比较(页表有效位 = 1) hit
② 物理地址 = 页表页框号 + 虚拟地址偏移
若页表miss,发生缺页异常
访问磁盘,从磁盘中读出(替换出)一页到主存

使用物理地址访存

首先访问Cache表
Cache表结构:

行号 有效位 标记

物理地址划分为:

Tag index offset

① 用物理地址的index与Cache表的行号比较(index = 行号,index = 1)
② 物理地址Tag= Cache表标记 hit
若Cache表miss,访问主存
直接用物理地址访问主存

你可能感兴趣的:(接口)