若CPU发出的主存地址为12305H ,则问该地址位于主存的哪一位置

双符号位为11运算结果无溢出

四、执行一段时间后,Cache完成存取的次数为3900次主存完成的存取次数为100次,已知Cache的存取周期为40ns主存的存取周期为240ns。试求Cache/主存系统的效率和平均访问时间 命中率h?.5%

五、有一个64K×16位的存储器,由16K×1位的DRAM芯片(芯片内是128×128结构)构

成存储器读/写周期为500ns。试问: (1)(1分)需要多少DRAM芯片 (2)(2分)采用异步刷新方式,如果单元刷新间隔不超过2ms则刷新信号周期是多少? (3)(2分)如果采用集中式刷新存储器刷新┅遍最少要用多少时间? (1) (2)

六、某处理器包含一个片内cache容量为8KB,且采用4路组相联结构,块的大小为4个32位字当Cache未命中时,以分组方式从主存读取4个字到Cache假定主存容量为16MB,试说明: (1)(1分)Cache共分为多少组 (2)(4分)写出主存的字节地址的格式,并说明地址格式中嘚不同字段的作用和位数 4路组相联映射,所以r=2 每块4字所以b=2; 每字32位,所以每字包含4字节 Cache容量为

4?4字节主存字块00大组字块1…字块27-1字块271大組字块27+1………Cache组地址01……Cache标记标记…标记行0行4…行29-4…………标记标记…标记行3行7…行29 -172 -1字块27-1…字块2-2大…组字块220-1…

主存字节地址主存字块标记1320組地址7块内字地址2字内字节地址2c-r

七、某机字长16位,地址总线18位数据总线16位,存储器按字编址试问: (1)(1分)该机可以配备的最大主存容量为多少? (2)(2分)该机主存采用64k×1位的DRAM芯片(内部为4个128×128阵列)构成最大主存空间则共需要多少个芯片;若采用异步刷新方式,单元刷新间隔为2ms则刷新信号的周期为多少? (3)(3分)若为该机配备2K×16位的Cache每块8B,采用2路组相联映射方式,试写出对主存地址各个字段的划分(标出各个字段的位数);若主存地址为462EH则该地址可映射到Cache的哪一个组? (1) 最大主存容量=2?16bit

18218?16bit?4?16?64片芯片;若采用异步刷新则刷新信号的周期为(2) 共需

8Byte每字包含2个字节。

主存字块00大组字块1…字块28-1字块281大组字块28+1…Cache组地址01标记标记…标记行0行21…行29 -2Cache标记标记…标记行1行3…荇29 -182 -1字块29-1…28168-1字块2-2大…组字块216-1主存字地址主存字块标记816组地址8块内字地址2…………

主存字地址=462EH=00 0100 0110 0010 11,10;因此该字映射到Cache的第139组 八、设某机型寄存器字长16位,用十六进制方式表示已知:变址寄存器的内容为0004H,PC的内容为0003H,内存中部分单元的内容如下:

直接地址/间接地址/立即数/相对位迻量/形式地址(16位) …

主存字节地址主存字块标记816组地址8块内字地址2字内字节地址1

若当前指令分别为下列寻址方式时试求出操作数。(請写出详细计算过程否则不给分) (1)(2分)直接寻址 (2)(2分)间接寻址 (3)(2分)立即寻址 (4)(2分)变址寻址

指令为双字长指令,格式如下: 操作码寻址方式码,寄存器号(16位)0002H 直接地址/间接地址/立即数/相对位移量/形式地址(16位)0007H

若当前指令分别为下列寻址方式时操作數为:

寻址方式 直接 间接 立即 变址

九、某机型16位字长指令格式如下:

其中,D是形式地址采用补码表示(包括一位符号位),M是寻址方式: M=0 立即寻址;

M=1 直接寻址(这是D为地址无符号数); M=2 间接寻址;

M=3 变址寻址(变址寄存器Ri,16位); M=4 基址寻址(基址寄存器Rb16位); M=5 相对寻址。

(1)(2分)该指令格式最多可以定义多少种不同的操作立即数寻址操作数的范围是什么? (2)(2分)写出各种寻址方式的有效地址的计算表达式 (3)(2分)各种寻址方式能访问的最大主存范围是多少? (1)32种;范围是-128~127

在开始本篇博文之前首先来介紹下问题背景,以便于初学者能更好的理解(当然其实我也是个小白)如果大家已经了解问题背景,直接跳过下面两段不用听我多BB。


对于Cache,即高速缓存是用来解决主存与速度不匹配问 题,Cache的出现使得可以不直接访问主存而直接与高速Cache交换信息由于程序访问的局部性原理可鉯很容易设想只要将 近期要用到的程序和数据提前从主存送到Cache,那么就可以做到在一定时间内只访问Cache,这样与高速Cache进行通信就大大提高了計算机的运行速度。
主存的地址映射之前首先要将主存与Cache都分成若干块,每块又包括若干个字并使得它们的大小相同(即快内的字数楿同)。在划分好块后下面要做的就是将主存块与Cache块形成映射就行了。而这里的映射则是通过块的地址形成映射关系对于地址映射,艏先将主存地址分成两块高n1位为主存的快地址,低n2位为快内地址Cache同理也是这样划分。这里我原来一直有一个误区就是认为字块中存放的是数据地址,其实不然字块中存放的就是真正使用的数据,只是映射时使用地址来映射在一切准备就绪后,就可以进行映射了丅面开始本篇博文的正文。
Cache – 主存的地址映射方式有很多有直接映射,全相联映射组相联映射。

在这种映射方式下每个主存块至于一个缓存块相对应,映射关系为:
其中i为缓存块号,j为主存块号在这种取模方式下,很容易就知道每个缓存块对应若干个主存块
下面针对该映射方式,举一个小例子:
当缓存接收到发送来的主存地址后只需根据中间c位字段(假设为00…01)找到缓存块1,然后根据字块1嘚”标记”是否与主存地址的高t位相符合,若符合且有效位为1(这里的有效位用来识别Cache存储块中的额数据是否有效因为有时Cache中的数据是无效的,例如在初始时刻Cache中的额内容为空,是无意义的)则表示该Cache块已和主存中的某块建立了对应关系,则可根据b位块内地址从Cache块中取得對应的字即找到发来的主存地址在缓存中所对应的信息;若不符合,或者有效位为”0”则主存读入心得字块来代替旧的字块,同时将信息送往并修改Cache“标记”位。如果有效位为”0”,还得将有效位置为 小结:直接相联映射方式的缺点是不灵活每个主存块只能按照取模固萣地映射到某个缓存块,即使缓存内其他块空着也不能用来映射。因而如果程序恰好要重复地使用对应同一缓存块的不同主存块那么玖需要不同的替换,这样会降低命中率

为了解决直接相联映射不灵活的问题,出现了全相联映射全相联映射不是通过字块號来寻找字块,而是将主存地址中的标记与缓存中每个字块的标记进行比较如果找到与之相同标记的缓存块,则表明所访问的主存地址茬缓存中之后在Cache中找到缓存块后,再根据主存地址的低b位找到快内地址这样就找到对应的字,也就是需要的数据因而在这种映射方式下,主存地址中只需要主存字块标记和字块内地址就行具体的映射和主存地址格式如下:
小结:全相联映射允许将主存中的每一字块映射到Cache中的任意一块位置上。显然这种映射方式相对于直接映射更加灵活,因而命中率也更高缩小了块冲突。
由于需要将主存地址中嘚标记与每一个缓存块的标记进行比较也就使其具有了”按内容寻址”的特点。同时也因为这个特点所需的逻辑电路较多,成本也比較高实际的Cache还要采用各种措施来减少比较次数。

针对上述直接映射和全相联映射出现的问题现在出现一种折中的映射方式,即下面介绍的组相联映射该映射方式将所有Cache分为Q组,每组有R块则有以下关系:
其中i,j的含义与直接映射中的含义一致。上述表达式意思即为某一主存块按模Q将其映射到缓存的第i组内具体步骤即主存地址格式如下:
这里之所以说组相联映射是直接映射和全相联映射的折中,昰因为按照直接映射中取模的方式某个主存块映射到Cache中的组是固定的,但是在组内又按照全相联映射原则,”按内容寻址”即通过主存字块标记可以映射到该组中任意一块Cache块。
这样就更好理解了该映射方式下主存的地址格式首先通过组地址找到Cache块所在的组,之后按照全相联映射方式通过和组内的每一块比较主存字块标记来寻找需要的具体字块,最后通过字块内地址在Cache块中找到有效的物理地址
这裏看似主存地址很复杂,其实只要知道Cache一共有多少组即可确定组地址的位数之后字块内地址与前面两种映射方式所说的一致,最后通过總位数减去组地址位数和字块内地址位数即得主存字块标记位数
有个需要记住的小知识点:若每组内有n块Cache块,则该种映射方式又称为n路組相联
其实这里有个转化方式,当r=0,即每组内有r==块那么此时组相联即变为直接相联,同理r=c,每组内有r=c块,即所有的Cache字块都在一组那么此时组相联即变为全相联映射。


空口吹谁都会,下面将通过两个例子更加详细和直观地介绍下主存地址格式(这两题都是唐朔飞老师《计算機组成原理》中的题目我将用自己的语言平实简单表达出来,希望大家更好的理解):
例1.假设主存容量为512KB,Cache容量为4KB,每个字块为16个字每个芓为32位。问:
(1).Cache地址为多少位可容纳多少块?
(2).主存地址为多少位可容纳多少块?
(3).在直接映射方式下主存的第几块映射到Cache中的第五块(設起始字块号为1)
(4).画出直接映射方式下主存地址字段中各段的位数。

(1).这里没有说按照字还是字节编址那么按照其给的容量的格式,可以嘚出其默认按照字节编址那么根据容量的计算方法:地址数*字长,则Cache的4KB可得地址数为4K,即个数据单元每个数据单元为8位,即一个字节B,那么僦可以得到地址为12位每块有16*32位,则4KB的Cache可容纳的块数为:4KB/(16*32位)=64块
(2).同一理可得到主存地址为19位,可容纳=8192块.
(3).Cache共有64块,则按照主存块号按照64取模为5的主存块都会映射到Cache中的第5块则满足要求的主存块号为,+,?+,......,?+
(4).要求主存地址格式,首先可以求字块内地址由于按照字节编址,即按照字节訪存则最小数据单元为字节,那么每个字块内有?/= 个最小访存单元每个单元有一个地址,那么字块内就有64个地址这样的话字块内地址就需要6位,即在直接映射下主存地址中b=6由于Cache共有64个字块,所以需要6位即有地址才能访问到每个Cache块即c=位,所以最终 主存字块标记位数=主存地址数-字块地址数-字块内地址数即t=19-6-6=7位,所以得到主存地址格式为:


例2.假设主存容量为512K*16位,Cache容量为4096*16位,块长为4个16位的字访存地址为字。
(1).茬直接映射下设计主存的地址格式。
(2).在全相联映射下设计主存的地址格式。
(3).在二路组相联映射方式下设计主存的地址格式。
(4).若主存嫆量为512K*32位块长不变,在四路组相联映射下设计主存的地址格式。

(1).按照例1中用容量除以块大小得到块的个数,个数为:(4096*16位)/4*16位=1024=,所以Cache块地址位数为10,即c=10,由于这里按照字访存主存地址也很容易得到为19位,对于字块内地址字块内共有4*16位/16位=4个访存单元,所以就有4个字块内地址所鉯字块内地址就有2位,即b=2,所以最后求得主存字块标记有19-10-2=7位得到主存字块地址格式:

(2).在全相联映射下,主存地址仅由字块内地址和主存字块標记构成而字块内地址在(1)中求得为2位,所以这里的字块内地址为19-2=17位此时的主存地址格式为:

(3).在二路组相联映射中,每组有两个字块所以一共有/=组,故组地址有9位即q=9,由于每个字块到这里都是没有变化的,所以字块内地址仍为2位即b=2,所以主存字块标记为19-9-2=8位,故得到主存哋址格式为:

(4).主存容量为512K*32位即双字宽存储器,即每次可以访问两个字(最小访存单元)这里的访存地址单元仍为字没有变,并且块长仍为4個16位的字所以字块内地址仍为2位,而主存容量可以转为512K*32位=1024K*16位,这样就可以得到共有1024K个字即个数据单元,地址数为所以主存地址有20位。哃时这里改为四路相联组映射,即每个Cache组内有4个Cache块所以共有/=组,所以组地址为8位即q=8,这样得到主存字块标记有20-8-2=10位,得到如下主存字块哋址格式:

1.直接映射为固定的映射关系不灵活。
2.全相联映射为灵活性映射关系通过主存字块标记,以按内容寻址的方式查找缓存块
3.組相联映射为上述两种的折中,主存块被分配到固定组的任意一个缓存块
4.在求主存地址格式时,要找好各字段的位数尤其要注意访存哋址单元是字还是字节。

PS:不得不说虽然最近复习组成原理操作系统,计算机网络复习到头大,不过也确实让我的新博客也有了更多的素材这才使得我的博客稍微热闹起来。这篇博客算是讲的比较详细了因而相对于大神来说废话也比较多,其实是比较照顾比我还小白嘚小白所以小白可以好好看看,大神可以点过赞之后直接绕道哈哈~总之,祝大家复习好运~

我要回帖

更多关于 Q173HCPU 的文章

 

随机推荐