`考试题型:选择、问答、画图、计算
重点看标红的章节和题
另外,原题答案没有,我写的也没有,好好学习,别老想着白嫖 →_→
1. 假设一台计算机主频为 1 GHZ ,在其上运行由 条指令组成的目标代码,程序主要由 4 类指令组成,他们所占的比例和各自的 CPI 如下表所示,求程序的 CPI 和 MIPS。
指令类型 CPI 指令比例
算术和逻辑 1 60%
Load/Store 2 18%
转移 4 12%
Cache缺失访存 8 10%
首先明确下涉及到的几个计算量的概念和计算方法,
时钟周期 T 与主频 / CPU 时钟频率 f
- T = 1 / f
CPU 执行时间 / CPU 时间
- 执行一段程序所占用的 CPU 时间
- CPU 时间 = 程序中所有指令的时钟周期数之和 × 时钟周期时间 = 程序中所有指令的时钟周期之和 / 时钟频率
- 程序中所有指令的时钟周期数之和 就是 CPU 周期数
CPI
- 执行一条指令所需要的平均时钟周期数
- CPI = 程序中所有指令的时钟周期数之和 / 指令条数 = (程序中各类指令的 CPI × 程序中该类指令的比例)之和
MIPS
- 表示每秒执行多少百万条指令
- MIPS = 指令条数 /(执行时间 × )= 指令条数 /( CPU 时钟周期总数 × / f )= f /( CPI × )
程序的执行时间 Te
- Te = 指令条数 /( MIPS × )
解题思路:
这道题里用不着解 CPU 时钟周期总数(即 CPU 周期数)
CPI =(表格中各类指令的 CPI × 程序中该类指令的比例)之和
MIPS = f /( CPI × )
f 即为主频,但是注意单位,1 GHZ = 1 × Hz,1 MHZ = 1 × Hz,1 KHZ = 1000 Hz(读法分别是吉赫,兆赫,千赫)
2. 冯·诺依曼型计算机的主要设计思想是什么? ①②③④
3. 画出冯·诺依曼计算机五大部件的连接结构图
4. 运算器的主要功能是进行______。
A. 算术运算 B. 逻辑运算与算术运算 C. 初等函数的运算 D. 逻辑运算
位(bit):计算机内最小的数据单位,取值 0 或 1
5.32位的个人计算机,一个字节( Byte )由_____位( bit )组成。
A. 4 B. 8 C. 16 D. 32
字节(Byte):8 位二进制数,计算机内部最基本的计量单位,1 Byte = 8 bit
KB、MB、GB里面的B就是字节,K/M/G 对应的是 // (应该是简化书写?注意点就是比如 4M 是 ,是数字转换成指数形式幂次相加计算的)
有的时候题目不会直接写 1MB 而是像上面题目里的主存容量写的是 1M 字节,记住字节就是B,计算带上就行
字:由一个或多个字节组成,一串固定长度的二进制数,对应部件处理数据的固定长度(听 8086 听得我认为一个字固定等于两字节了×)
半字:字的一半(双字同理)
6. 什么是计算机字长?
指运算器中一次能够完成二进制数运算的位数
另外,不同部件的字长可能不同,不过一般都是看计算机字长
7. 目前的计算机,从原理上讲_______。
A. 指令以二进制形式存放,数据以十进制形式存放
B. 指令以十进制形式存放,数据以二进制形式存放
C. 指令和数据都以二进制形式存放 D. 指令和数据都以十进制形式存放
解题思路:
存储器中存入的均是二进制数据串,而开始任务之前都会将数据和程序存入其中
而程序是一系列的机器指令的有序集合
所以指令和数据都以二进制形式存放
8. 什么是指令?什么是程序?
9. 指令和数据均存放在内存中,计算机如何区分它们是指令还是数据?
10. 说明高级语言、汇编语言和机器语言三者之间的差别和联系。
1. 下列数中最小的数是______。
A. 二进制数( 1010010 ) B. 8421 BCD 码( 00101000 )
C. 8 进制数( 512 ) D. 16 进制数( 35 )
无法直接进行比较大小,要比只能换成十进制再进行比较
转换什么的已经写烂了,懒得再写一遍,需要看的去找另一篇数字逻辑笔记
2. 浮点数的表示范围和精确度分别由什么决定?
阶码 E 决定了浮点数的表示范围,尾数 M 决定了浮点数的表示精度
一般要么写成存储在计算机里的格式,要么由计算机里格式写成对应的十进制数
3. 为什么计算机中采用补码表示带符号整数?
为了避免减法运算中需要比较绝对值的大小,还要给结果选择符号,所以采用补码简化运算
4. 已知 y = + 10001,则 [ y ] 补为__________。
A. 110001 B. 001111 C. 101111 D. 010001
一看总共多少位,二看有无符号位
比如 16 位无符号整数,就是 1111 1111 1111 1111,即最大可表示 - 1,最小可表示 0
若是 16 位有符号整数,就是 符号位111 1111 1111 1111,即最大可表示 ,最小可表示其的相反数
还需要注意是什么码和是定点整数还是定点小数,若是 16 位补码定点整数,那么范围就是 ≤ X ≤
总之按照定义写出来二进制码,再转换成十进制就行
5. 汉字输入码、机内码和字形码在汉字处理过程中各有何作用?
6. 假定有4个整数用8位补码分别表示为r1=FEH, r2=F2H,r3=90H, r4=F8H。若将运算结果存放在一个8位寄存器中,则下列运算会发生溢出的是______。
A. r1 × r2 B. r2 × r3 C. r1 × r4 D. r2 × r4
7. 采用原码阵列乘法运算时,结果的符号可由两数的符号位进行_____得到。
A. 逻辑加 B. 逻辑乘 C. 异或 D. 与非运算
8. 现代计算机的运算器一般通过总线结构来组织。按总线连接方式划分为哪三种?各自的特点是什么?
9. 简述浮点加/减法运算步骤
10. 如何判断IEEE 754标准浮点数运算结果是否为规格化数?如果不是规格化数。如何进行规格化?
11. 小数+1.101011保留小数点后3位有效数字,按照IEEE 754四种舍入方式得到结果为:
就近舍入: ( )
向正无穷舍入: ( )
向负无穷舍入: ( )
向零舍入: ( )
12. 如何判断浮点数运算结构是否发生溢出
接下来是以前写的东西,懒得拆开按顺序了,先看完这些吧
1. 设主存容量为1M字节,按字节寻址,Cache容量为4K字节,块长为32字节。
(1)Cache可容纳多少块?
(2)主存地址有多少位?有多少块?
(3)写出4路组联映射方式下的内存地址格式。
注意点:题目中的单位看准了,计算的时候别忘了单位上汉字的字节/字,字节除字节可以约掉,字除字可以约掉,就是注意字和字节蹲一起,发生的是还要加上字长的三个人的故事
我是先写按字寻址那些后面写的Cache,推荐先去看完那个再来看Cache
注意是Cache容纳多少块,不是说Cache分多少块,分块的是主存块,Cache分的是行,题目的意思是Cache能容纳的主存块个数
Cache(缓存):高速缓冲存储器(高速但是小容量),为了提高计算机的处理速度,利用其来高速存取指令和数据
Cache是CPU和内存之间的桥梁,功能全部由硬件实现
用来解决CPU和主存之间的速度不匹配问题(所以Cache位于CPU和主存之间,但是硬件上不是跟它们俩完全独立隔开的三层,有的CPU内会带Cache,主板内主存待的地方贴近CPU也可能会有Cache)
我才知道Cache竟然就是平常说的缓存_(:з」∠)_,缓存 → 数据交换的缓冲区
相联存储器(CAM):属于Cache的一部分(怕你们忘,我后面就跟Cache拆出来一起提,但是得明白它就是Cache里的),用来存内存地址和信息,拿块地址(块号)找,比较的Tag就是在它里面,是按内容存取方式进行寻址的存储器
主存储器:作为计算机系统的主存储器,存放着大量计算机运行时的大量程序和数据,能和Cache交换数据和指令
因为Cache主要是用来快速存取的,所以Cache保存的内容是主存内容的一个子集
内存储器 = Cache + 主存 :CPU能够直接访问的存储器(很重要!!!)
外存储器就不能被CPU直接访问了,信息得调入内存才能被CPU所处理
外存储器:大容量辅助存储器,比如硬盘、磁带、光盘
综上所述,存储器速度越快 → 容量越小、越靠近CPU
而CPU读取数据的顺序是:由内而外的,一层没有就上外面一层去找
一般涉及到Cache的问题要么是有关Cache本身(命中率、访问时间之类),要么是与主存的地址映射
地址映射:在主存的地址定位到Cache中的确切位置
主存按地址访问(但是相连存储器(CAM)也就是块表是按内容访问的),Cache按内容访问
按地址访问:地址不保存,寻址时译码器根据地址直接选中对应的数据
按内容访问:地址保存在CAM或者Cache中(跟数据存在一块儿),称为标识(标记、Tag);查找时,把要访问的地址和表中所有标识比较找相同的确定要访问的存储单元
一旦问题涉及到主存,往往除了求Cache块数还要求主存块
所以需要知道的点是:
1.主存是分块的,并且每块包含若干个字(主存块,每块大小是相同的),同理,Cache分为若干行(Line)
Cache存储一个主存块的区域就叫行(所以地址映射就是看把哪块主存块对应放到哪行)
所以容量:Cache每行 = 主存块
2.主存地址格式:
块地址(块号):用于确定该块是否命中
块内偏移:用于确定所访问的数据在该块中的位置
(你这样记,主存分很多块,你要找的数据就在一个主存块上,肯定要这个块号找第几块,块又是很多字组成,肯定要偏移来指示第几个字地址(不一定字地址啊,看它说按什么寻址,要是字节那就相当于把字拆开,偏移的肯定多了))
CPU与Cache的数据交换是以字为单位,Cache与主存的数据交换是以块为单位
可以这样看,Cache内不是好多行嘛,每一行存储的是一个主存块,而一个主存块又由好多字组成,CPU找数据的时候会跟着映射规则到对应的行去看 → 挨个字找;
而Cache内的数据都是从主存那里拿来的,放到自己的行里,所以 → 要换就换整个块
命中:在那个地方能找见要的数据(或者说按内容/地址访问拿目标地址瞅可以找到相同的地址),找不见就是未命中
在针对Cache的命中率时候,可以说一次访存中,在Cache中完成存取是命中了;在Memory中完成存取就是未命中;
看下面CPU读取字的过程可加深理解 ↓
当CPU读取主存中一个字时,会发出这个字的内存地址到Cache和主存;
Cache控制逻辑依据地址判断这个字当前是否在Cache中(按内容访问,去比较标识),找到就从Cache拿;找不到,就利用主存读周期把这个字从主存里读出(按地址访问,寻址找到数据)送到CPU,同时把含有这个字的整个数据块从主存读出送到Cache中
两个问题用到的题目给的块长都是主存块的块长(其实就是块的大小啦~)
主存根据块长分成一沓子大小相同的主存块,所以
主存有多少块 = 主存容量 ÷ 块长
反推:题目给出的是 主存有多少块 + 块长 → 主存容量
因为前面说的Cache分为很多行,每行就蹲个主存块,所以行容量等于主存块容量,求能容纳的块数其实也就是求Cache的行数
所以,
Cache能容纳的块数/Cache的行数 = Cache容量 ÷ 块长
反推:题目给出的是 Cache能容纳的块数 + 块长 → Cache容量 + Cache有多少行(就是块数)
这两个题连在一起看容易弄糊涂Cache容量跟主存容量关系:
记得Cache内容是主存的一个子集,容量小得多,别误会成Cache容量跟主存一样了!!!
接下来是映射方式 ↓
主存地址格式和Cache地址格式框架都是内存地址格式(块地址 | 块内偏移),只不过Cache地址格式因为由于映射的约束导致会对块地址有划分
全相联:块地址 | 块内偏移
Cache地址格式和主存地址格式区别在于块地址位数
地址变换:用块地址同时和Cache中所有的Tag进行比较(此时一只相联存储器(CAM)路过),命中不命中处理方式前面提过,命中就拿走,同时撤销内存寻址过程;没有命中,则从主存那里通过主存读周期读出送到CPU,等着访存过程结束以后把对应的块塞进Cache里。
特点:冲突概率小,Cache利用率高,比较电路实现成本高,适合小容量Cache采用
直接映射:Cache地址格式(和主存地址格式区别在于把块地址划分了两个部分):注意不一定是字地址,有可能是偏移字节地址,看题目条件
全相联的地址信息在CAM里,而直接映射的tag是跟行数据一起在行里
地址变换:用访存地址里块号的 r 位行索引找到对应的Cache行,然后用块号的 s - r 位与该行的tag比较,命中则用低 w 位读取所要求的字;不命中则由主存读取
特点:容易产生冲突,成本低,适合大容量Cache采用
组相联:Cache地址格式(和主存地址格式区别在于把块地址划分了两个部分):注意不一定是字地址,有可能是偏移字节地址,看题目条件
组相联和直接映射一样将tag存在了行里
地址变换:用块地址的低d位找到对应组,然后将块地址的高s-d位与该组v行中的所有标记同时进行比较。命中,选中该行,用内存地址的低w位选择相应的字。不相符,则访问内存。
特点:比全相联容易实现,冲突低
n 路组相联Cache的分组就是按 n 行一组分的
冲突:一个主存块想去映射的那个Cache行里另一个主存块已经在了
全相联:主存一个块可以放到Cache任一行,没有限制;标识就是整个块地址;(多对多)
直接映射:一个主存块只能映射到Cache的一个特定行上(多对一)
人话翻译模式开启:
注意主存跟Cache开头第一块都是第 0 块不是第 1 块
假如Cache一共有 n 行,那么主存可以按照 n 个主存块为一组划分,第一组第一块是第 0 块,最后一块是第 n - 1 块;第二组第一块是第 n 块,最后一块是第 2n -1 块,以此类推……
每组每块就可以按顺序一一跟Cache的每行对应放
注意我不是说每次主存传输给Cache只能按我说的分组来一传对应一组,这个理解只是方便你记忆每个主存块只能够去哪行,也就是说一个主存块对应一行,一行可以对应多个主存块
组相联:将Cache分组,主存中的每一块可以被放置到Cache中唯一的一个组中的任何一行(多对多)
组间采用直接映射,组内采用全相联映射
人话翻译:
将Cache按 m 行一组分成 n 组,主存也按 n 个主存块为一组划组,主存第一组第一个是第 0 块,最后一个是第 n -1块;第二组第一个是第 n 块,最后一个是第 2n - 1 块,以此类推……
然后主存块分的组就可以一一跟Cache分的组对应,每组里的任意一个主存块可以在对应的Cache组里的 m 行挑自己喜欢的
注意!注意!注意!题目里可能会踩坑:主存地址/Cache地址,读题很容易被忽略,要看清题目说的是主存地址还是Cache地址!!!两者的块地址位数是不同的!!!
做题的时候看到一堆条件不知道怎么用,脑子就开始杠机,计组尤为明显,拿这张PPT咱们来整理下做题应该有的思路
(推荐平时学习的时候像公式里的字母要记就记汉字全名,当然寄存器或者技术方法名称按英文记,我博客里面出现的字母也只是方便我打字,请自动脑补成它的全称,不然过一段时间再看真的会懵!!!)
PPT还是一如既往的隐晦,从上到下从左到右看一遍:
首先:主存 256 块,是根据主存容量以及块长算出来的,又知道每块 4 个字(字、字节其实就是种计量单位),好了,我知道主存容量了:256 块 X 4 字 = 1024 字 = 1K 字;
再看后半句,Cache有 8 行,好了,我又知道Cache能容纳 8 块主存块了,好家伙,Cache容量这不就差贴脑门上了吗:8 块 X 4 字 = 32 字
没给字长,第一反应是这玩意儿怕是按字寻址(对,按什么为最小存储单元进行寻址,就是按什么寻址,而从Cache里找的是一个字还是一个字节是有区别的,毕竟偏移就看找谁。不管用不用得着,最好每次看题都全分析一遍,考试的时候就会自己自动跳出来了)
(被我水印挡住的是页标 22 昂,麻了,看半天我说这是什么)
思路整理完毕╭(╯^╰)╮,言归正传:
如果没有命中,就把对应的数据块塞进Cache块里,地址信息什么的进对应CAM里位置 → 载入状态/未命中状态,从这里就可以知道,刚开始Cache内没有数据的时候,第一次进去肯定是未命中状态的!!!
图中未命中也看不出来采取的是什么替换算法,等会儿单开一节说
原先看到前三个格子上面那一串二进制数是有点懵的,写完了后面的计算思想突然发现,一共五位二进制数,第一次在Cache第 0 行载入数据,第二次在第 1 行载入数据,第三次命中了第 0 行,而改变的是前三位数据,而第一次的等于第三次的,有没有可能那是数据载入或命中依据的块地址
再看下面标明说Cache 8 行,计算后得到块地址位数就为三位,那就说明前三个是块地址也就是全相联里的标识,后两位就是块长了,好了,我知道块长为 4 字/字节,只要再给我它确切按什么寻址我就能知道主存跟Cache的容量了。并且这是在数据块的第 2 块进行的查找载入。
所以那串二进制数实际是地址(看不懂的等看完后面计算题型就懂了)
好吧,打起精神,应试教育来了(看答案凑解释我老强项了~):
需要的全相联地址格式咱们先摆出来:块地址(块号)| 块内偏移
那么我们要求的就是两个东西的位数
前面说的注意点就在这里,块地址我是找的谁的块地址,看题,让你求Cache的地址格式就盯Cache,要求主存地址格式就用主存里多少主存块(主存和Cache里的主存块数目不一样)
地址是一串二进制数,每一位有 0 、1 两种状态,所以如果有 n 位地址,排列组合我可以有 个地址跟块号一一对应,所以对块数进行求对数就可以了
那么,
块地址位数 → (求Cache)看Cache可容纳主存块的块数/Cache内多少行 → 求log以2为底的值
块地址位数 → (求主存)看主存块的块数 → 求log以2为底的值
继续想,它找到数据块以后还要找数据的吧,块内偏移是确定数据在数据块的位置,那么块内偏移是求谁?
块地址求法的注意点是求谁的地址格式,而块内偏移的注意点是按什么寻址
按什么寻址,CPU就是要找什么,前面CPU要取一个字就是按字寻址,按字节寻址CPU要取得就是一个字节
所以块内偏移想要定位就跟块地址一样,块地址找确切块就要看它块的个数,块内偏移想要找确切的字/字节,就要知道每块里面(不是在整个容量里找,只是在那个确切块里面找,所以咱们看的是块长)字/字节的个数
因为块长都一样,所以这里就不区分求谁的地址格式了
所以,
块内偏移位数 → (按字寻址)主存块里有多少字 → 块长写成【数字】字这种形式 → 求 log 以 2 为底的值
块内偏移位数 → (按字节寻址)主存块里有多少字节 → 块长写成【数字】字节这种形式 → 求 log 以 2 为底的值
Q:看了后面字节/字寻址的可能有个疑问(没错,就是我自己的疑问),用地址线根数求寻址空间的时候按字寻址提到因为需要对字进行字内寻址会占用几根地址线,这里为什么没有提?
A:按字寻址的话,CPU要找的是一个字,找到以后Cache就直接传送给CPU了;其实这句话可以就理解成只是告诉你虽然按字寻址比按字节寻址需要找的东西少了,但是地址线没用到的也不是闲置着的。
因为我不大想为了做题而做题,不知道原理你还做什么题
所以事实上,为了在考试时候节省反应的时间,大佬们都是先求总位数到时候直接一减就行
先说下为什么可以这么做的原因,Cache容量 = Cache行数 × 块长;主存容量 = 主存块数 × 块长
而地址,一个是选块,一个是选字/字节,等式左右两边同时求对数,那么,算出来Cache容量的次幂就等于 块地址位数 + 块偏移位数,即地址格式总位数
所以,
(问Cache的地址格式 + 按字寻址)地址格式总位数 → Cache容量写成【数字】字形式 → 以 2 为底对【数字】求对数
(问Cache的地址格式 + 按字节寻址)地址格式总位数 → Cache容量写成【数字】字节形式 → 以 2 为底对【数字】求对数
同理,
(问主存的地址格式 + 按字寻址)地址格式总位数 → 主存容量写成【数字】字形式 → 以 2 为底对【数字】求对数
(问主存的地址格式 + 按字节寻址)地址格式总位数 → 主存容量写成【数字】字节形式 → 以 2 为底对【数字】求对数
因为直接映射方式是将主存块存入特定的Cache行,一个Cache行对应多个块
所以在映射的时候还需要对Cache的特定行进行定位
这样就不只是对块进行定位了,所以Cache里块地址就被分割成了两部分,一部分是去定位行,一部分仍然是对块的定位(标识tag),只不过因为一行对应的块也被缩小范围了,即 主存块数 = 行数 × 每行对应的块的个数,求对数同理,就是分割开了两部分:标识、行号
行号即为进行定位的行索引,还是按照排列组合,有 n 位地址就可以对 个行进行选择
所以,
Cache地址格式:
index行号位数 → 以 2 为底对Cache内行数/Cache可容纳多少块求对数
tag标记位数 → Cache可容纳的块数 - index行号
块内偏移位数 → (按字寻址)主存块里有多少字 → 块长写成【数字】字这种形式 → 以 2 为底对【数字】求对数
块内偏移位数 → (按字节寻址)主存块里有多少字节 → 块长写成【数字】字节这种形式 →以 2 为底对【数字】求对数
主存地址格式不用划分出来行号
组相联嘛,是把主存块存到特定的Cache分的组里面的任意一行,所以需要对Cache分的组定位
发现特点没,如果主存块必须存到特定的地方,存特定Cache行就分割出来行号,存特定的Cache组就分割出组号,而说让任意存的话就用标识找
想用公式看为什么画出来的是组号的话:主存块个数 = Cache划分的组数 × 可存进Cache对应组的主存块数,同时求对数,块地址 = 组号 × 标识
所以同理,
Cache地址格式:
组号位数 → 以 2 为底对Cache分了多少组求对数
tag标记位数 → Cache可容纳的块数 - 组号位数
块内偏移位数 → (按字寻址)主存块里有多少字 → 块长写成【数字】字这种形式 → 以 2 为底对【数字】求对数
块内偏移位数 → (按字节寻址)主存块里有多少字节 → 块长写成【数字】字节这种形式 →以 2 为底对【数字】求对数
主存地址格式不用划分出来组号
如果Cache没分组就是全相联映射方式(不用划分位数特意去找是哪个组),如果分的组里行数为 1 ,就是直接映射方式(主存块只能存进Cache特定行)
题目中说是几路组相联Cache就是说Cache分的组里有几行
Q1:既然Cache和主存都属于内存,那题目问内存地址格式的时候,我该写Cache地址格式还是主存地址格式
A1:在Cache这里的题目就是指Cache地址格式,事实上地址映射就是按照特定映射规则把主存地址分割 → Cache地址格式,别忘了主存地址格式在之前是有定义的,就分为块地址和块内偏移两部分,而Cache分割了它的块地址。
Q2:CPU同时将地址发送给Cache和主存,比如全相联是把发送过去的地址中的块地址和Cache里CAM存的标识比较的,命中就可,不命中去主存找,既然同时发那地址里的块地址应该是一样的,可是Cache和主存由于容量不一样,肯定块地址位数不一样,这怎么找?
A2:产生这个疑问属实是因为我在这里垒的知识点太多了,导致忘了Cache是按内容访问的,主存是按地址访问的,而按内容访问会将地址保存下来,查找时进行比对,按地址访问不保存地址直接根据译码器进行选择了,所以,小伙子,做人不要想太多,当个傻子就这样过去不好么,非要纠结。
注意点:寻址范围是 0 ~ 求出来的结果 -1,寻址空间是求出来的结果( 0x0000 ~ 0xFFFF 里面的 0x 指的是十六进制数,我们求出来的一般都是十进制,写十六进制形式就加 0x 前缀,不转换就别乱搞)
存放一个字节/字/半字/双字的单元称为字节/字/半字/双字存储单元,相应的地址称为字节/字/半字/双字地址;编址/寻址的最小单元是字节/字/半字/双字单元,就是对应按什么编址/寻址
每根地址线都有两个状态:要么 0 ,要么 1 ,地址就是一串 0、1 的序列。
有 n 根地址线,则最大寻址范围为 (并不一定都是求最大寻址范围,怎么求在于按什么来寻址)。
一般出现按什么寻址会有两种题型:
题目中给出 地址线的根数 + 按什么编址/寻址(若是按字/半字寻址会给出字长) 可求出 寻址空间范围
假如说现在有 n 根地址线,
一组地址线每一次读出来的地址就对应一个(字节/半字/字/双字,按什么编址就是什么)的地址(注意:不一定把这 n 根全部用了,所以前面说是最大寻址范围)
按字节寻址:可寻址空间 B
按字寻址:计算机在寻址过程中会对字进行字节寻址,所以会占用部分地址线。
需要占用 k 根地址线里的 k = m - 3 (注意 m 是指数形式字长的幂次,不是字长)
除去占用的,还剩下的地址线根数为 n - k ,则可寻址空间 W(这里的 W 为字长,想要转换成正常的 B 就是乘组成那个字的字节个数)
按半字寻址:半字虽然指的是字的一半,但是不一定代表内部就只有一个字节了,所以跟按字寻址的寻址空间求法类似(双字同理)
题目中给出 主存容量 + 按什么编址/寻址(若是按字/半字寻址会给出字长) 可求出 寻址空间范围
按字节寻址:主存容量除以 1B
按字寻址:主存容量除以 (1W)字长位数(没有说明字长大小的时候一般都可与容量的单位约去,注意 W 为字长)
按半字寻址:因为半字是字的字长的一半,所以是 主存容量除以 字长位数 / 2(双字同理)
想从第二种情况推出地址线根数的话,就是上面一类型题的反推 ↓
如果是按字节寻址幂次就是;
如果是按字寻址,就看字长,由多少字节构成,就有 = 字节数,m + 幂次就是地址线根数;
如果是按半字寻址,就看半字长,跟字长同理。
记错考试时间缺考直接重修什么的蠢货无语流泪orz,大半个学期过去回来发现看不懂这张PPT了(可能是因为就给了个字长但是没给存储器容量什么的,y1s1,上学期虽然表面听得认真,但是下来就一个感觉,这PPT长得真tnd白),记录些问老师的问题:
左边图为 a ,右边图为 b
1.计算机不同部件的字长是不一样的,但是一般情况下机器字长等于存储器字长;
2.(瞳孔地震!!!突然发现为什么我纠结那么久了!!!原来图里一格是一个字节地址,我把一行看成一个字节地址了,好蠢_(:з」∠)_
所以关于字节地址跟字地址的位数由于PPT内条件缺失就不存在疑问了,注意的点只是PPT是在说字节编址跟字编址两种条件下的地址)
由原先的疑问想到的东西 ↓
前面说的两种题型解出来存储器的位数(寻址范围的次幂,也就是可以使用的地址线的根数)需要两个题目条件:一个是按什么寻址,另一个要么是地址线根数要么是内存容量;
字长在这类型的题里面是按字寻址的情况下使用(用来求占用的地址线根数和用来内存容量除它得寻址范围),没有内存容量没有地址线根数,光凭字长啥也求不出来;
3.为什么 a 每一行划了四格,b 每一行划了两格?
图 a 的机器字长为 32 位,它的一个字就包含了 4 个字节,划了四格,图b的机器字长为 16 位,它的一个字就包含了 2 个字节,划了两格
也就是说字地址指向的字存储单元其实是对应一个字里含有的字节个数个字节存储单元,所以前面的字寻址空间计算方法里面,需要占用地址线来进行字内寻址
所以也说字节地址里面隐含字地址
4.按字寻址的话,就不会存在字节地址么:因为寻址最小单元是字单元,还是说只是寻址,但是实际上还是存在字节单元?
看问题三的第二段解释,就是说按什么寻址看的是寻址的最小单元,实际上存储的最小单元还是字节地址
5.字节存储地址不应该是八位么?
看寻址问题开头那句:存放一个字节的单元称为字节存储单元,相应的地址称为字节地址;
意思是,地址是一串二进制数,它的位数根据前面题的方法计算,指向的存储单元里面放的数据是一个字节,所以放的数据是八位,而地址位数就不一定!!!
计算机系统中为何采用层次化存储体系? 层次化存储体系结构如何构成?
需要在一个存储器中同时兼顾容量大,速度快,成本低三点
利用cache高速存取指令和数据,主存储器存放计算机运行期间的大量程序和数据,用外存储器存放系统程序和大型数据文件及数据库,由以上三种类型构成层次化存储体系结构
大端存储和小端存储有什么区别?各种有什么处理器?
简述DRAM存储器为何需要刷新?如何刷新?
DRAM存储位元是基于电容器上的电荷量存储,而电荷量会随着时间和温度减少,因此必须定期刷新 分为集中式刷新和分散式刷新两种
① 集中式刷新方式:DRAM 的所有行在每一个刷新周期中都被刷新,刷新期间停止正常读写
② 分散刷新方式:每隔一段时间刷新一行
若主存由ROM和RAM 组成,容量分别为 和 ,则主存地址共需要n+m位。
用1K×8位SRAM芯片组成2K×16位的SRAM存储器,问;
共需多少1K×8位SRAM 芯片?
画出该存储器的连接图
看题:
字长为 8 位,需要组成的是 16 位的 → 字长短
字数为 1 K,需要组成的是 2K 的 → 字数少
所以这得字位扩展
写出可以提高访存速度的方法(至少三种)。
单体多字系统; 多体并行系统; 采用高性能存储芯片
1. 指令格式结构如下所示,试分析指令格式特点。 ①②③④⑤
2. 某计算机单操作数指令长度为16位,格式包括操作码OP、寻址方式特征位X和形式地址D三个字段,其中OP字段6位,字段X为2位,字段D为8位。
X 的功能如下:
X=00:直接寻址 X=01:变址寻址; X=10:基址寻址;X=11:相对寻址.
设(PC)=1234H,(X1)=0037H , (X2)=1122H,X1为基址寄存器,X2为变址寄存器,以下两条指令均采用上述格式,
请确定这些指令中的操作数有效地址:
(1)4420H (2)2244H
3. 某机字长为32位,主存容量为 1MB,单字长指令。下列寄存器的宽度为
PC宽度为 [ ] 位
IR宽度为 [ ]位
AR(内存地址寄存器)宽度为 [ ]位
4. 某计算机字长16位,运算器16位,有16个通用寄存器,8 种寻址方式,主存64KB,单字长指令,指令中操作数地址码由寻址方式字段和寄存器号字段组成。试问,
单操作数指令最多有多少条? 说明原因。
双操作数指令最多有多少条?说明原因。
解题思路:由寄存器个数 → 寄存器号字段多少位,寻址方式个数 → 寻址方式字段多少位:
主存容量出来的是存储字长,而要看指令字长度看的是机器字长和题目提出它是单字长指令还是双字长指令,所以上面的指令字长度应该是 16 位
求单操作数指令:即上面那两个字段就只有一个,所以 OP 字段位数用字长 - 上面那俩,然后同理求有多少指令
求双操作指令:即上面那两个字段分别有两个,所以 OP 字段位数用字长 - 上面那俩 * 2 ,然后同理求有多少指令
1. CPU内有哪些主要寄存器?各自功能是什么?
在CPU中:
保存当前正在执行的指令的寄存器是 [ ] ;
保存当前正要执行的指令地址的寄存器是 [ ] ;
算术逻辑运算结果通常放在 [ ] 和 [ ] 。
从下列寄存器中选择相应的填空:
IR、DR、通用寄存器、AR、PC、PSW
2. 数据存储器DM最大存储容量为65536字(字长16位)
请写出下列各寄存器的位数,并说明原因:
(1)DM的地址寄存器AR;
(2)DM数据寄存器DR
AR 位数取决于 DM 的容量,DR 位数取决于 DM 的字长
3. 名词解释:指令周期
4. 某机器字长16位,主存按字节编址,转移指令采用相对寻址,由两个字节组成,第一字节为操作码字段,第二字节为相对位移量字段。假定取指令时,每取一个字节PC自动加1。若某转移指令所在主存地址为2000H,相对位移量字段的内容为06H,则该转移指令成功转以后的目标地址为()。
A.2006H B.2007H C.2008H D.2009H
相对寻址隐含的寄存器是 PC ,每取一字节会自动 + 1 ,所以是 2000 H + 06 H + 2 H
1)说明程序与微程序,指令与微指令的异同。
2)微命令有哪几种表示方法?
某机有8条微指令I1-I8,每条微指令所包含的微命令控制信号如下表所示。
a-j分别对应10种不同性质的微命令信号。
- 上述微命令哪些是互斥?
- 假设一条微指令的控制字段为8位,请安排微指令的控制字段格式。
互斥就是找没同屏出现的,控制字段格式按后面的混合表示方法写,也就是说,每一位代表一个微指令,互斥的用译码器编个 001 啊什么的二进制码进行选择,自己看着办
假设某机器有80条指令,平均每条指令由4条微指令组成,其中有一条取指微指令是所有指令公用的。已知微指令长度为32位,计算该控制存储器容量。
容量 = 微指令总条数 * 微指令长度,这里出来单位是 bit,想改成 B 记得 ÷ 8
已知某机采用微程序控制方式,其控制存储器容量为 512×48 位。微程序可在整个控制存储器中实现转移,控制微程序转移的条件共4个,微指令采用水平型格式,后继微指令地址采用多路转移方式。微指令中的三个字段分别应为多少位?
微命令三个字段分别是:控制字段,下一微命令地址字段和地址字段
首先微命令长度看控制存储器字长,其次,转移条件有几个,那么该字段就有几位
而下一微命令地址字段看存储器的容量 512 ,照旧是幂次,存储单元微命令字段拿总的减前面求出来的那俩
假定基准程序 A 在某计算机上的运行时间为 100 秒,其中 90 秒为 CPU 时间,其余为 I/O 时间。若 CPU 速度提高 50%,I/O 速度不变,则运行基准程序 A 所耗费的时间是( )