运算器本来是数据计算的核心部件,现在却需要去额外承担数据传送的任务,这不是白白浪费性能吗
以存储器和核心的好处是可以解放运算器的性能。
运算器和控制器作为主要进行数据处理,命令解析的部件,又被合并在一起称为CPU,当然CPU内部不只这两个东东
控制器负责解析指令,运算器负责数据的计算。
MAR中存储的地址对应就是存储体中具体的地址,该地址可以是即将写入的地址,也可以是即将读取的地址
MDR中就是用来存放从存储体中指定位置读出的数据,或者即将写入到存储体中的数据
存储字是指某一行存储单元中二进制的组合,例如:01010101
下面来看一下这段程序的具体执行过程:
第一步到第五步基本一模一样,都是取出指令,然后分析指令,只有在分析完指令后,后面的步骤会有区别,需要CU去根据具体的指令,去完成控制和指挥
剩余的2,3,4指令分析过程就不进行记录了。
基本过程就是: PC定位指令位置,交给MAR,MAR报告给存储体,存储体回应了他,回应结果就是把对应地址的数据放入MDR中,然后MDR会将指令移交给IR管理,ID拿到指令后,会乖乖把指令交给CU去分析,CU分析完后,可能需要从存储体取出数据,然后直接把MDR中的数据放入ACC,MQ或X中,进行具体运算处理。
又或者需要向存储体中写入数据,MAR此时记录的就是写入到存储体中的地址,MDR保存的就是写入的数据,然后CU通知存储体,我要向你里面写入数据了。
CPU主频可以理解为1秒钟可以执行多少个时钟周期
该存储体的缺陷在于每次只能有一行存储元生效,否则传输数据的数据线,就不知道到底该传输哪一行的数据了,即传输数据产生了冲突
片选线可以通过当前线接收到的高低电平来决定整体是否工作,可以是高电平有效,也可以是低电平有效
读写控制线用来控制此次是读数据还是写数据
为了避免多个二进制位产生的冗余状态,这里采用译码器来充分利用n个二进制位可以表示的2的n次方种状态。
8K*8位: 有8K个数量的存储单元,即有8K行,每行8列,即存储单元的存储字长为8个bit
以前是一列就一个存储单元,所有存储单元都排在一列,现在是把存储单元排列为一个矩阵形式,通过坐标进行定位
这里之所以需要恢复时间,是因为地址线有很多根,你不能确保接收到地址线上某个电信号时,就确保每一根地址线上电信号都送过来了,还需要等一会
数据宽度指的是一个存储周期内,可以传输的数据位数
主从带宽就是数据传输率
8k指的是存储单元个数,8k为2的13次方,意味着需要13根地址线。
1位说明当前存储芯片一次可以读取或者写入一位的数据
CS是片选线,控制当前存储芯片的工作与否
we是读写控制线
位扩展扩展的是CPU的数据线,即需要把所有的D0-D7的8根数据线全部利用起来,这里才利用了两根,显然我们还需要进行位扩展,再扩展6根才可以
位扩展发生在CPU与存储器芯片位数不一致时,需要进行位扩展
当我们希望增加一块存储器芯片上面的存储单元个数时,就需要进行字扩展
因为两块存储芯片不能同时传输数据,因此需要用两根控制线来进行控制,让其一次只激活其中一块存储芯片,这种方法叫线选法
该方法最大的弊端在于二个二进制位,明明可以表示四种地址,但是此时只能利用其中两种,白白浪费了地址空间,需要利用译码器来解决这个问题
使能端全为真时,译码器才会开始工作。
有了译码器,我们就可以轻松利用三个二进制位,控制八个存储芯片的工作
存储周期实际是比存取时间长的,因为其存在恢复时间,那么如果想要提高存取效率,那么就需要想办法利用好恢复时间
因为对一个存储器,同时只能读取上面一块存储单元,不能同时读取多块存储单元,因此使用高位交叉编址的方式无法进行流水线式读取,对效率提升作用不明显
使用低位交叉编址的方式可以进行流水线式读取,因此效率提升非常明显
有效位表示当前行是否已经存放了数据
蓝色标注出来的三位,其实就表示当前的行号。
但是因为全相联映射是空位随意存放,因此这里要标注缓存的某一行是属于主存的哪个位置,就必须用前19位加上表示行号的三位,共22位。
字块内地址不需要存放,是因为字块内地址标注的是当前行内地址,行内地址是不变的
主存中某一行数据可以放入缓存中任意一行
这里和上面全相联映射的区别在于,是有序按行号映射存放,因此行号和缓存中的行号是一一对应的,因此只需要保存前19个有效位作为主存的位置标记即可
主存中某一行数据只能放入缓存中与其相对应的映射行保存
如果Cache分为一组,那么就成为了全相联映射,如果分为8组,就变为了直接映射
主存中某一行数据可以放入缓存中对应某一个Cache组中任意一个缓存行中。
LRU和FIFO的区别在于,会把用到的数字往下推
CPU获取数据时,首先询问Cache,通过Cache主存地址映射变换机构,寻找Cache是否命中,命中直接通过数据总线返回给CPU
如果没有命中,CPU通过主存获取到数据,然后主存通过CACHE替换机构,完成CACHE缓存行的替换,并且同时直接将数据从数据总线返回给CPU
虚拟存储器到主存之间的内存映射关系,可以类比主存和缓存cache之间的内存映射关系
首先,如果用户要读取虚拟存储器上的数据,那么要给出读取虚拟存储器上数据的地址,该地址称为虚地址或逻辑地址。
页式虚拟存储器将虚拟存储器和主存都划分为了同样大小的页,即按页作为映射关系,类比cache和主存按块作为映射关系
虚地址由虚页号+页内地址组成,首先由页表基址寄存器,该寄存器存储页表起始地址,然后该页表起始地址拼接虚页号,去页表中定位某个实业号条目
这里页表就是作一个映射关系管理,页表存储在主存中,存储了实业号和一个标记项
标记项为1,说明该实页号在主存上对应的页已经从虚拟存储器对应页中读取出来,存放到主存指定页中,此时实业号+页内地址就可以直接定位到主存中该出地址对应的数据,此时还是会走cache+主存的逻辑
标记项为0,说明此时该实页号在主存上对应的页还没有从虚拟存储器对应页中读取出来,存放到主存指定页中,那么此时需要调度操作系统从虚拟存储器中对应的页读取数据,放入主存中对应的页,然后将当前行的标记设置为1,然后走cache+主存的逻辑
还有一点很重要就是页式虚拟存储器的页大小是固定的,也就是说,如果只需要从虚拟存储器上读取1字节的数据,那么主存上面,还是需要为其分配一个页的大小
上面的页式虚拟存储器最大的缺点就是内存分配不够灵活,而段式虚拟存储器解决了这个问题,段式虚拟存储器每次从虚拟存储器上读取了多少的数据,就会为其分配一个那么大的段空间来存放此数据
这里映射过程和上面类型,虚地址包含的段号,可以类比上面的虚页号,别的照样类比
有效位表示快表中记录的当前虚拟地址是否已经加载进主存,如果为0,有两种可能,一种是还没有加载进主存,另一种是缓存还没有被更新,因此我们对于这种情况,表述为TLB缺失
标记就是虚地址,页框号就是实地址
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://cjdhy.blog.csdn.net/article/details/124562409
内容来源于网络,如有侵权,请联系作者删除!