• 【知识强化】第四章 指令系统 4.3 CISC和RISC的基本概念


    那么我们进入本章的最后一节,CISC和RISC。

    我们先来回顾一下,我们这一章的一个概览。我们之前已经把指令格式和指令的寻址方式都讲完了,这两部分呢是本章的一个重点。而本章的这一部分,CISC和RISC的部分,大家只要稍做了解即可,详细的内容呢我们将要在下一章第五章CPU当中对一些具体的概念进行详细的讲解。那么在这里呢我们只要做一些大概的了解,有一些大概的印象,以及对它的概念有一定的了解就可以了。对于它的具体的内容呢大家不必深入做很多的了解。

    我们来看一下,那么什么是CISC,什么是RISC呢?我们在整个指令系统的发展啊,它就朝着这两个截然相反的方向进行一个发展,那么它们是截然相反的。前者呢CISC,它的全称是Complex Instruction Set Computer,那么Complex是什么意思呢?是复杂。所以呢CISC叫做复杂指令系统计算机。那么RISC呢,这个R是什么意思?R是Reduced,Reduced Instruction Set Computer,就是说它是一个精简的指令集,这样的一个计算机。一个是复杂,一个是精简,这两个不要搞混淆了。注意,把这个C和R不要搞混淆,不要记反了就可以。那么什么是CISC呢,也就是说,用一个通俗的话来讲,它就是说一条指令去完成一个复杂的基本功能。比如说我现在我想要给我的这个计算机啊加一些功能,那么怎么加呢?我肯定首先想到的就是说我就用一条指令去完成我这样一个复杂的功能就可以了。比如说我想开个根号,那我就直接加一条开根号的指令,这条指令它处理的呢就是一个开根号这样的一个功能。也就是说现在我想给它加一个功能的话,我只要一条指令就完成这样一个复杂的功能。那么这就是CISC的它设计的基本思路,比较典型的代表就是我们的x86架构,主要呢是用于我们的笔记本和台式机。那关于什么是x86呢,我们在我们的计组当中你不要多深入地了解,你只要知道有这么个东西就可以了。我们的计组之前在第一章,在引言的部分我就给大家讲过了,我们的计组不是针对具体的架构,而是来看一个通用的部分。所以呢,它的代表你记住,复杂指令集的这样的代表就是我们的x86,主要呢就是像我们的电脑、我们的台式机、我们的笔记本这样的东西。

    但是,这样呢是有一个问题的,叫做80-20规律。也就是说,我们的一些典型的程序当中,80%的语句仅仅使用了我们处理机中20%的指令。也就是说,只有一条部分指令是最常用的,其余那80%,那么多的指令,都很少使用或者几乎不使用。所以呢我们一般的大部分的语句只使用了我们少部分的指令。那么这样的规律呢,我们在日常生活中也是比较常见的。我比如举一个很简单的例子,就是说我们在一天当中,大部分的工作都是集中在很少一部分时间内完成的,那么你大部分的时间都是在玩儿,都是在或者说在睡觉。而我们仅仅工作的时间,就是大部分的工作都是集中在那20%当中进行完成的。可能这个例子取的不太恰当,但基本上就是这么一个道理。也就是说我们在一台计算机当中,最常用的,用来编程的,我们最常使用的那些指令仅仅占了我们整个指令集的很小一部分。80%的语句都只使用了我们20%的指令,而我们那么多的指令只有很少的时间内。你比如说你开根号,你什么时候才会开根号啊,对吧。或者说你想要一个比较复杂的一些指令,这样你想用它的时候你才会使用。而大部分那些通用的指令呢我们只占了指令集当中的很小的一部分。所以呢,就为了解决这样的一个规律,或者说解决这样的一个问题,发现的这样的一个规律,那么我们怎么来应用呢?我们就是说,这20%的指令作为最基本的指令,我们把它保留。而那其他的那80%的,比较不常用的那些指令,比较复杂的、那些专用的一些指令,我们就通过这20%的基本的指令来进行一些组合来实现一些比较复杂的功能。那么这就是我们RISC它的设计思想。那么RISC就是我们所说的精简指令集计算机。它的设计思路就是这样的,就是说我们用一条指令去完成一个最基本的动作,然后我想要完成一个复杂的功能的时候,我就用这些最基本的指令进行一些组合来完成就可以了,那么这就是精简指令集计算机它的设计思路。它就是用来应用这样的80-20规律来处理我们这样发现的一个问题,就是说我们把最基本的那些动作用一条指令来完成。而那些复杂的动作呢,我们就通过这些最基本的动作进行一些组合来完成就可以了。代表就是我们的平板和我们的手机。它们采用的呢是这个ARM架构。还是一样的你只要知道有这么个东西就行了,关于它的具体的细节,如果你感兴趣的话你可以去参照一些计算机体系结构它的这样的一个教材。但是呢我们现在考研阶段时间宝贵,我们只需要知道概念就行了。所以呢同样的我看这个举出的例子呢,你就可以看出一些东西了。我们的笔记本、我们的台式机,它主打的呢是能完成复杂的工作。而我们的手机和我们的平板,主打的呢就是我们的高性能,性能要快,你完成的动作复不复杂我不要紧,但是呢我用手机就是为了方便,为了便携对吧。所以呢我们的这个RISC和CISC就有它的专门的一些用途。

    那么为了帮助大家理解,我们来举一个这样的小例子,就是说我现在要设计一套能够输出单词的这样的指令集。注意我现在下面举的例子呢并不是真正的有这样的例子,只是为了帮助大家理解而已。那比如说我现在要设计一个能够输出单词的这样的指令集,那么我如果采用CISC这样的一个设计思想,那我是怎样设计的呢?我一条语句就输出一个单词就可以了,每一个单词呢我都是由一条指令来完成的。那么这就相当于我们的CISC当中一条指令完成一个复杂的基本功能这样的一个思想。就是说我现在一条指令,我输出一个单词,所以呢我现在常用的17万个单词,我就用17万个电路来实现,一条指令呢由一个专门的电路来完成。那显然就是非常不科学的,不可能有这么多个电路。所以呢我现在就采用这样的一个设计方法,就是“存储程序”的这样的一个设计思想,就是用一个比较通用的电路去配合我们的存储部件去完成一个指令。注意这时候是存储部件,不是存储单元,这不是一个计算机。这是一个计算机的一个缩小版,你可以看成是一个缩小版。那么这是什么东西呢?这个你在这里,你只要了解一下就可以了。那么在我们的第五章第四节讲微程序的时候,我们将要详细地来讲它的设计思想。那么这就是一个微程序,微程序呢,它就是采用我们的存储逻辑来实现的,把我们的微操作的信号来代码化,使我们的每一条机器指令呢转化为一道微程序,并且存储到一个专门的部件当中。那么微程序啊,就是这样一个设计思想。我们的CISC,基本来说都是由这样的一个微程序来实现的。那么我们的RISC想要设计这样的一个输出单词的指令集,我们RISC是如何来实现的呢?很简单,就是说我们把它分解一下,我们不输出单词了,我们现在只输出它最基本的一个单位。那单词单位是什么?字母。所以,我们的一条指令来输出一个字母,那我们如果想输出一个单词呢,我们就通过一个最基本的一个操作把它组合起来,那就是说我现在,用多条指令来组合,来完成我们输出单词。因为我们一条指令是输出一个字母,我们输出一个单词呢就多条指令组合起来,所以呢我们的26个字母就只要26个电路就可以完成了。并且,由于我们输出字母它这样的工作肯定是非常相似的,你输出字母肯定时间也差不多,功能也差不多,那么我们就完全可以用并行或者流水线这样的思想来实现。所以我们RISC当中,最常见的就是把它进行并行进行流水化。因为我们每一条指令,它呢都是一个最基本的动作,而这样的动作呢,时间也是差不多的,它的动作也是差不多的,所以我们就完全可以用并行或者流水线这样的思想来实现。那么关于并行和流水线也是要在我们下一章,中央处理器那一章详细地来讲解。在这里我们只要做一个基本的概念的了解就可以了。

    所以,我们根据这个就可以进行它的对比。我们CISC的指令系统是非常庞大非常复杂的,就比如我们刚才举的那个例子当中,我们输出一个单词,它显然是非常多的。而我们RISC只要输出一个字母,所以它比较简单、比较精简。为此它才叫做复杂指令集计算机和精简指令集计算机。注意我一再强调要把CISC和RISC的概念弄清楚,不能弄反了。CISC这个C是Complex,而Reducd这个是R,所以呢必须把它搞清楚。你概念你肯定都懂,什么叫复杂什么叫精简。但是最怕出现的情况就是说我们CISC和RISC弄反了这就比较荒唐了。那么指令数目CISC我们刚才也已经说过了,你输出一个单词,那你肯定是很多的,一般呢是大于200条的。而我们的RISC是最基本的一些操作,所以呢它一般呢是小于100条的,它是比较少的。而指令字长,就比如我们的单词,它有的长有的短,有的就比如说像car,小汽车它就只有三个这样的字母。而像比如像encyclopedia,这样的一个百科全书它就比较长了,所以它的指令字长呢是不固定的,有的长有的短,你用单词来记就可以了。而RISC呢,它的指令字长肯定都是相等的,都是定长的,就比如说它是一个字母,字母肯定就一个单词,就一个字母那么长,所以它都是定长的。而就是由于它的定长,时间也是差不多的,所以它就可以完全实现一个流水线和一个并行。那么CISC它可访存的指令呢是不加以限制的,而RISC呢,我们只有Load和Store,这样的指令呢是可以访存的。那么它执行的时间,那么由于它的这个长度不同,所以CISC它执行的时间呢相差就比较大。而我们的RISC呢,绝大多数都能在一个周期内完成。那么RISC它各种指令的使用频度,我们还是用单词来记忆,有的单词它使用的频率就非常高,而有的单词只有在特定的语境下面你才会使用,所以它的频率是相差非常大的。那么CISC就是说,我们有的指令,专门的那些指令,它在你专门地想要用它的时候你才会使用。而有些指令它是通用的,所以呢它的使用频率是完全差的比较大的。而RISC,因为它都是一些最基本的指令,所以它都比较常用。通用寄存器的数量,由于我们的CISC,它一条指令就已经完成了一个基本的功能,所以呢它的通用寄存器数量是比较少的,它不需要暂存一些东西。而我们的RISC,由于它是通过各种基本指令进行组合的,所以有些中间结果就必须把它保存起来,所以它的通用寄存器的数量是比较多的。而CISC之所以比较少,还有一个原因就是说因为它的这个控制存储器啊,在我们的芯片当中所占的面积已经非常大了,大于50%,所以留给通用寄存器的地方也比较少,所以呢就要尽可能地减少我们通用寄存器的数量。一方面是由于啊我们的一条指令就已经能够完成一个功能了,它就不需要暂存一些结果。一方面还是由于我们的硬件所限制的,所以它的CISC是比较少的,而RISC呢它的通用寄存器数量就比较多。而由于CISC它一条指令就已经能够完成一个这样的操作,它中间的过程是没有办法进行拆分的,所以,我们的目标代码是很难用优化编译生成我们的高效的目标代码程序的,是很难优化的,因为它中间过程没有办法拆分,并且它的相关性也不大,所以呢就难优化。而我们的RISC,它是由于通过一些组合,通过一些基本的操作进行组合的,所以我们就完全可以改变它的顺序,或者说改变它的这样的一个执行的顺序。它就完全可以采用一些优化的手段,来生成比较高效的一些代码。那么这些优化的手段呢,大家只要了解就行了,只要知道CISC很难优化,RISC可以优化。具体的优化手段在计算机系统结构当中、体系结构当中,是要花专门的篇幅来讲解的。如果大家感兴趣,可以在考研结束,你可以去看一下。控制方式我们刚才也已经讲过了,CISC绝大部分都是通过微程序来控制的,微程序我们在第五章详细地讲解,也是一个重点。而RISC呢由于它一个基本操作,它就可以用一个电路来实现,所以呢绝大部分呢都是由组合逻辑来控制的。那么指令流水线,我们刚才也已经说过了,RISC,它可以每个动作,它的时间都是差不多的,而且它是可以拆成一些小的动作来进行组合的,所以呢我们就可以改变它的顺序,来实现一个流水线的一个操作。而我们的CISC它是不可以的,因为它的指令字长也是不固定的,执行时间也是相差比较大的,所以它很难进行一个流水线的一个操作。但是你也可以通过一些特定的方式来实现它的流水线。那么RISC呢,它是必须要实现一个流水线的。所以呢这就是两个的进行一个比较,一个是复杂,一个精简。那么做一个基本的了解,一个概念上的了解就可以了。好的,这就是我们的第三节的内容。

  • 相关阅读:
    解锁 redis 锁的正确姿势
    PHP实现Redis单据锁,防止并发重复写入
    js笔记
    FormData使用方法详解
    jquery里用each遍历的值存到数组和字符串
    Sublime Text3 安装 CTags 插件出现乱码
    通过pd.to_sql()将DataFrame写入Mysql
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket
    pandas 从txt读取DataFrame&DataFrame格式化保存到txt
    pandas 取消读取csv时默认第一行为列名
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/11484439.html
Copyright © 2020-2023  润新知