本文已参与「新人创作礼」活动,一起开启掘金创作之路。
CISC和RISC
复杂指令集(Complex Instruction Set Computing)
精简指令集(Reduced Instruction Set Computing)
两个指令集之间最重要的差别就是CISC机器码是可变长的,RISC机器码是固定长的。
复杂指令集机器码之所以是可变长的,是为了节省内存空间,把常用到的指令设计的短一点,不常用的指令设计的长一点。而且为了不让复杂的指令降低性能,很多直接通过硬件电路设计来完成。
精简指令集设计是因为计算机80%的时间都是在使用20%的简单指令,所以我们可以直接砍掉80%的指令。而原来的复杂指令则通过简单指令组合起来,让软件来实现对应复杂指令的硬件功能。
微指令架构
微指令架构在取指令阶段,取到的还是复杂指令集,不过在译码阶段,翻译出来的机器码不是一条指令,而是多条微指令。 这些微指令不再是变长,而是固定长度。这些微指令会被放到微指令缓冲区,然后再从缓冲区分发给后面的流水线。
可以看到虽然复杂指令最后变成了类似于RISC的微指令,微指令执行快。但是在译码阶段的时间变长了。我们如何解决这里多出来的时间?我们可以通过在CPU里增加一层L0 Cache,来保存译码器把CISC指令翻译成RISC的微指令结果。由于局部性原理,CPU在大部分情况下可以直接从L0 Cache里拿到译码的结果。