指令集
我们计算机要执行程序,本质上是执行一条条的指令,而指令是从指令集中取出的,目前常见的指令集有CISC(Complex Instruction Set Computer,复杂指令集)和RISC(Reduced Instruction Set Computer,精简指令集)。
关于软考,我们就记着CISC指令数量多,可变长格式,支持多种寻址方式,由微程序实现。
RISC指令数量少,定长格式,支持的寻址方式少,主要依靠硬件实现。
CISC的优点就是指令功能丰富,编程的时候比较轻松。但缺点也很明显,那就是因为格式是变长的,所以执行效率比较低,并且因为要支持大量的指令,硬件复杂度也陡增。
相对的,RISC的执行效率就比较高,硬件复杂度相对低,缺点就是同样是完成一个复杂一点的命令,CISC可能只需要一条指令,但是RISC可能需要执行多条。
在软考之外,现实中RISC和CISC之间的界限并没有课本上那么的泾渭分明,二者在取长补短,互相吸收对方的优点,因此在考试之外,我们并不需要太在意某某计算机使用的是什么指令集了。
流水线
如果我想看直播,还想打游戏,还想听音乐,那我应该怎么办?
先看直播,等直播结束了再去打游戏,等游戏输到不想再打了就去听音乐冷静冷静?
这样可以,但是效率很低。
放到我们计算机里就是我先取指令,取完指令再去分析指令,分析完再去执行,这样也可以,但是效率很低。
我的舍友可以一边看直播一边打游戏一边听音乐。那么我们的计算机可不可以呢?当然是可以的,那就是流水线技术。
因为要分析指令得先获取指令,因此我们首先先取指令,接下来分析取的第一条指令的时候可以去取第二条指令,然后在我们分析完第一条指令之后可以执行第一条指令并且分析第二条指令然后去获取第三条指令,由于取指,分析,执行是交给不同的部分去处理的,因此我们可以这么压榨。
可以看得出,如果我们不使用流水线,而是循规蹈矩地一条条执行,那么执行五条指令需要3*5个机器周期(上图为极简版示意图),而使用流水线之后,执行五条指令只需要5+(3-1)个机器周期。
因此我们得出一个公式。
流水线执行的时间 = (完整执行一条指令所需的机器周期 + (指令总数 - 1))* 一个机器周期的时间
软考考的比较杂且浅,因此只需要知道上面这些即可。实际上在计算机组成原理这门课中对流水线的介绍占了不少篇幅,还涉及到很多计算,感兴趣的小伙伴可以再去重温一下。
中断
回到我舍友身上,他正在看直播打游戏听音乐,他的家人在昨天说好了今天要给他打电话,那么此刻我的舍友有两种选择,第一种就是时不时就看看手机,看有没有人打电话过来,第二种就是他打开手机铃声,有人打电话过来就会响起铃声,这样我舍友就知道有人打电话来了。
上面两种选择对应到我们计算机中就是查询和中断。
再拿我们的单片机举个例子,如果我的单片机要检测是否有人按下连接好的按钮,可以动不动就查询一下按钮对应的GPIO的电平情况,也可以设置中断,一旦电平情况发生变化,就进入到中断函数里。
我们的单片机也算是一种计算机,那么对应到我们的计算机上,中断也差不多是这个意思。
在软考中,我们需要知道中断的具体流程,在下午的大题中有可能会出现流程图填空。
另外关于中断需要知道的是高优先的中断会打断低优先级的中断,也就是说如果正在执行低优先级中断函数的时候来了个优先级更高的中断,那么会跑去执行高优先级的中断服务函数。
在流程图的右侧有一些开关中断的步骤,是为了避免堆栈错误。