指标
CPI与IPC

CPU时间

其他指标

关于流水线设计提高吞吐率的思考

这里说n级流水线提高n倍吞吐率,确实是成立的;流水线设计并不改变IPC等;但吞吐率的计算使用的是绝对的、一定长度的单位时间;
然后流水线相当于把原来顺序排列的木板,堆叠到了一起,在一个时钟周期内同步执行n条指令,堆叠得越高越密集,流水线设计地越好,那么节约掉的时间就越多
考虑一种极端情况,就是堆叠地像书本,整齐排列的木板一样(或者整体倾斜很小的角度),那么经过一个CPI后,每个极小的时间上,都能完成1条指令,也就是吞吐率提升了n倍;

就是说流水线实际上是可以缩短时钟周期的,原来的时钟周期就很长,即一条指令从头到尾都完成的时间;现在相当于把指令切分成了N份,粗略认为时钟周期也可以缩短为原来的N分之1,那么在绝对的时间尺度上,每过一个极小的时间,就可以经过一个时钟周期,在流水线满载的情况下,就可以完成一条指令,即吞吐率提升n倍
五级流水线
疑问1,访存时间若超过一个时钟周期?
在五级流水线当中,如果IF阶段是到内存当中取指令,MEM阶段到内存当中取指令,如果取值的RTT无法在一个时钟周期内被满足该怎么办?比如有I1,I2,I3等指令,t0时刻,I1到访存阶段,但是到下个时钟周期t1,无法从内存当中把数据取出来,I1进入不到WB阶段,依旧卡在MEM阶段,那么t1时刻的I2该如何处理?


疑问1.2如何与内存交互数据


MIPS R4000八级流水线
在这个处理器当中,各级流水线都执行哪些任务?我知道IF是取值,那IS是干什么,RF看名字是写CPU内部的寄存器,但是是要写哪些寄存器呢?EX是执行,alu等计算任务,DF,DS,TC都是什么?WB是写回,即将从内存得到的数据或计算结果写入到对应CPU内部寄存器当中;或者说,八级流水线,是将原来五级流水线的那些流水级拆分了,以及为什么这样拆
虚实地址转换
疑问1
CPU从内存取出来的指令,要经过虚实地址转换;是所有指令都要自动地进行虚实地址转换吗?那指令当中记录的就都是虚拟地址,不过不同的物理地址可能对应相同的虚拟地址,也就是,内存当中的指令是如何产生且保证其虚拟地址正确的?CPU要处理的应该就是虚拟地址对应的真实物理地址,是如何转换出来的?
在IF阶段,所谓将"开始指令地址的虚拟地址到物理地址转换",不过IF不是选择下一条指令的地址吗,在IF阶段就已经取到真正要执行的指令了吗,我理解的是只是确定好了下一条指令的地址,还没取出来;以及什么叫指令地址的虚实地址转换?指令也有其对应的虚拟地址吗?


如何转换

疑问1.1
就是说虚实地址转化,是要先记录一个虚拟页号,以及虚拟页号到物理页号的转换记录,然后给一个虚拟地址后,就要去找它对应的虚拟页号,然后找到其对应的物理页号,用虚拟地址减去虚拟页号得到页内偏移量,再加上对应的物理页号就是物理地址;那这个虚拟页号到物理页号的转换是记录在哪里?能记录多少,以及给定一个虚拟地址,怎么知道它的虚拟页号,并以此来去查找物理页号;以及查找物理地址,和求偏差并最终相加得到物理地址的过程,都是MMU负责的吗



CPU 还需要知道"当前该使用哪张页表"。

key:地址空间的识别与转换
CPU如何识别当前地址空间配置?就是有两个或多个独立的虚拟空间域(设为A,B,C,D),对应到不同的物理地址上,CPU在接到连续的分属不同虚拟空间域的指令时(比如所属虚拟空间域的排布为A,B,C,D,C,B,A等),如何识别当前要执行的指令和之前的指令的空间域不同,以及不同时会怎么做?之前的虚实地址转换,都只是侧重讲在同一个虚拟空间内虚实地址如何转换,却完全没介绍CPU如何知晓当前所属的虚拟空间域,这还是TLB,MMU等负责的吗?完整的过程是怎样的





疑问1.2
什么是根页表?以及,假设A,B中的指令是交替执行的,那CPU是如何感知到接下来要换地址空间,要去更改satp了?是有相关的指令在一开始的时候预示着要发生切换了吗,即说明接下来是会进入到B地址空间,然后就会有一系列指令插入,去更改satp,之后CPU继续无感地执行指令?
疑问2
就是说,某个机制在产生指令,并把它放到内存当中的时候,指令内所放的地址就是虚拟地址;比如程序A向内存中放了一段指令a,程序B也向内存当中放了一段指令b,如果a和b的虚拟地址刚好相同(这里或许需要区分,是指令本身的虚拟地址相同,以及指令内部记录的,经EX计算出来的访存虚拟地址相同),而且a和b指令刚好连续,即a的下一条指令就是b,那处理器该如何处理?以及,是怎样的机制在产生指令,如何产生正确的指令?如何让CPU知道呢

疑问3
我之前以为的是指令内部就存放着某些地址,不过最常用的访存指令lw,sw等的地址,貌似都是经过计算得到的,那有两个问题,一个是是否有指令内部真的是直接存地址?存的虚拟地址还是物理地址?以及对于lw,sw在执行阶段算出来的那个访存地址,是物理地址还是虚拟地址,如何进行转换

lw

sw

other

疑问1

如何理解这句话,这块内容我完全不是很熟悉;占据某个固定物理地址是所谓在内存上的物理地址吧,然后程序编译后的那个文件就是可执行文件,文件可以存在于任何存储介质当中,不一定是内存;当要运行的时候,需要解析可执行文件,来考虑如何将可执行文件内部的数据迁移到内存当中来执行;有以下问题,可执行文件当中包含哪些内容,如果是程序的话,那就是代码所对应的机器指令,以及初始化的那些数据吧;还有就是,怎样才会有不同的虚拟空间域,即什么情况下会共享同一片虚拟地址,什么情况下不会,在执行时,CPU如何识别和切换

