第一话结婚震撼日漫三观狗粮上升了一个维度啊酸1.2.3 计算机软件的分类1.2.4计算机的工作过程1.2.5计算机系统的多级层次结构(* ̄︶ ̄)
这学期中我们要学习的是计算机系统的多级层次结构,那之前的小节中我们学过这样的一个内容,我们用高级语言编写的代码,最终需要翻译成机器语言,才能被我们的CPU执行,所以我们传统意义上的机器它只能识别机器语言,那机器语言就是用二进制来表述的这种指令,那CPU在执行这些用二进制表示的机器指令的机器指令的时候,还需要把这些机器指令细分为更细的一些小步骤来执行那我们把这些更喜欢的小病或者也可以称为微操作指令也就是这个需要被划分为更细分的执行才能完成我们可以把。划分为9个更细分的步骤,也就是9个为指令来一次的执行才能完成取数这个操作,那我们可以把这儿的微程序机器看作是对上层这个传统机器,对这个实际机器的一个分解,也就是用这个微程序机器的微指令来解释并且执行 m1这个传统机器的每一条机器指令,好,那这是计算机系统最底部的啊,两个层次结构,那由于传统的机器只能识别这种0101的二进制指令,而这种二进制指令用来编程是很不方便的,所以在20世纪50年代开始出现了符号式的程序设计语言,也就是汇编语言对于使用汇编语言的程序员来说他所看到的机器似乎是可以直接识别它所编写。就是汇编语言对于使用汇编语言的程序员来说,他所看到的机器似乎是可以直接识别它所编写的汇编语言程序的,所以使用汇编语言的程序员所看到的机器,我们把它称为虚拟机器,那之所以叫虚拟,是因为其实任何一台机器都不可能直接的识别汇编语言,那汇编语言编写的程序想要执行,必须通过汇编程序的翻译,把它翻译为等价的机器语言指令才可以执行,因此用汇编语言编程的程序员,在他看来,这台机器好像可以直接识别汇编语言,但这个只是看起来像是而已,实际上还是需要通过翻译的操作,因此我们才说这是一个虚拟的机器,只是看起来像这样而已,对了,可能有跨考的同学没有学过汇编语言,那我这呃故意用红色和黄色的这两种字体来分别标记了汇编语言和机器语言,其实每一条汇编语言指令和机器语言的指令都是一一对应的结合之前。这一个虚拟的机器只是看起来像这样而已,对了,可能有跨考的同学没有学过汇编语言,那我这啊故意用红色和黄色的这两种字体来分别标记的汇编语言和机器语言,即使每一条汇编语言指令和机器语言的指令都是11对应的,如果结合之前我们给出的例子,第1条机器语言指令,它的操作码是指明了,这是一个取数的一个指令,然后地址码是指向了5号单元,因为这个二进制翻译成10进制就是无,所以你会看到这儿我们给出的汇编语言代码,这漏的其实就是说明了,这是一个取数的操作,然后这个参数5是指明了我要从内存地址为5的那个地方来取数和下边这个机器指令的两个部分都是一1对应的,那第2条乘法指令也是一样,前边红色部分是指明了,我是要进行一个乘法的操作,那要和谁乘呢?要和存在内存地址为u的那个数据进行相乘所以其实是用汇编语言来编写的这个。数据进行相乘,所以其实使用汇编语言来编写的这个程序,只是更便于我们人类理解而已,但本质上它和机器语言的这种指令并没有太大的区别,依然是属于低级的语言啊,所以用这种汇编语言来编程显然也是不方便的,那随着计算机的发展,慢慢的出现了很多高级语言,我们现在编程大多都使用的是高级语言啊,比如说像c啊,Java Python之类的这些语言,那么在我们这些呃高级语言程序员的视角看来,似乎我们所使用的这个机器它就是可以直接识别高性能的,但是其实并没有任何一台机器可以直接执行高级语言写的代码,所以从我们的视角看到的这一台可以识别高级语言的机器,我们同样把它称为虚拟的机器,只是看起来就好像它能够懂高级语言一样啊,但事实上我们用高级语言编写的那些代码需要经过编译程序的翻译,先把它翻译成汇编语言描述的这种程序然后再经过汇编语言程序翻译才可以得到最终。那些代码呢,需要经过编译程序的翻译,先把它翻译成汇编语言描述的这种程序,然后再经过汇编语言程序翻译,才可以得到,最终可以丢给机器执行的机器语言程序,那另一个方面我们所编写的这些程序难免会用到操作系统所提供的一些,比如说某一些系统调用,所以其实一般来说用汇编语言编写的程序,同样也需要请求操作系统的服务,通过系统调用的方式来请求那系统调用,又可以称为广义指令,因此我们把这个层次结构完善一下,我们应该在汇编语言机器的下方再插入一个操作系统机器,那操作系统和操作系统之上的这些部分就属于软件的部分,而传统机器和下边这个微指令系统就属于硬件的部分,显然我们这边和重点要关注的是下面这两层,那对于这个层次结构的模型来说,每一个下层都是上层的基础,而每一个上层又是对下层的一个拓展这就是。你要关注的是下面这两层,那对于这个层次结构的模型来说,每一个下层都是上层的基础,而每一个上层又是对下层的一个拓展哦,那这就是计算机系统的层次结构,那大家会发现计算机系统的层次结构这个问题,其实在我们操作系统课例也会聊到,只不过在操作系统内门和历程次的划分和这儿的划分不一样,不管哪种划分都是对的,只不过我们选取的视角不一样而已,像这个地方给出的层次结构,我们更多的是从编程人员还有硬件设计人员的视角来进行的划分好,那刚才我们提到了三种级别的语言,首先是我们最熟悉的高级语言,我们用高级语言编写的语言程序,需要通过编译程序的翻译把它翻译为一系列与之等价的汇编语言程序,那之前说过汇编语言本质上其实就是一些助剂服务,就是更方便人类记忆的一些符号而已,本质上它和机器语言都是一一对应的,那么汇编语言再经过汇编程序的就可以得到宇宙。让他和机器语言都是11对应的,那么汇编语言在经过汇编程序的翻译之后,就可以得到与之等价的机器语言程序,那机器语言程序才是可以让CPU执行的程序,那像大家最熟悉的cc加加就需要通过这种一部编译和一部汇编,才可以得到可执行的程序,当然如果你的程序里面调用了其他的管束,那么在经过汇编之后还需要再经过链接的操作,也就是把你的程序还有你所调用的其他那些程序给链接起来,那这一点我们在操作系统课里说过,这门课里我们更多关注的是这个语言的逐步的转换,事实上也有一些语言经过编译程序的,呃编译之后可以直接有语言程序得到最终可以执行的机器语言程序,那也有这样的,另外还有一些高级语言代码的执行,那并不是通过编译程序来编译的,而是通过一种叫做解释程序的东西翻译成机器人成为。啊,翻译成与之对等的机器语言制定那解释程序也可以称为解释器,很多脚本类的语言采用的都是这样的机制,比如JavaScript还有Python,还有熟悉Linux的同学可能知道是要脚本,看起来编译程序和解释程序的作用是一样的,其实它们之间有一些区别,编译程序是直接把高级语言编写的语言程序全部一次性翻译成机器语言程序,然后再来执行这个机器语言程序,我们只需要进行一次编译,也就是一次这种翻译的过程之后就不需要再翻译了,比如我们用c语言写的程序把它经过编译啊,还会编这些步骤之后,最终会形成,应该大家都很熟悉的文件叫做点exe文件,那这个点exe文件其实就是用机器语言描述的程序,只要生成了点esc,那我们之后就不需要再编辑了,我们每次要运行这个程序,只需要加载这些点exe就可以了,这是编译程序而解释程序是这样的一个原理,比如我们用JavaScript这种脚本语言那我们。一程序而解释程序是这样的一个原理,比如我们用JavaScript这种脚本语言啊,写了几句代码用高级语言写的代码,那我们的这几句代码在执行的时候,其实每执行一句都会丢给解释程序,来帮我们把这个代码翻译成与之对等的机器语言翻译一句就立即执行,紧接着再翻译下一句,所以每一次我们要执行这一段代码的时候,解释程序都需要翻译一遍,那显然这种编译型的语言它的执行效率肯定要更高一些,解释性的语言执行效率会更低一些,打一个比方,这种编译程序其实就有点像是你用手写的方式把一整个文章都翻译成英文而解释,程序就有点像是同声传译来一句我翻译一句来一句翻译一句,那你用手写的方式翻译的英文是不是只需要翻译一次,以后你就不需要再翻译了,而对于同声传译这种方式来说,即便一个人他是重复的说的那几句话但他没说一次同声传译就一定需要。他是重复的说同样的那几句话,但是他每说一次同声传译,就一定需要再多翻译一次,那这就是编译程序和解释程序啊的一个区别,像cc加加这一类的语言,它采取的策略就是用编译程序的方式一次性把它翻译成一个可执行的机器语言程序,那这种类型的语言通常可以把它称为编译型的语言,而像JavaScript Python这一类的语言,我们可以把它称为解释型的语言,那这就是不同的语言,它所采取的一个不同的策略,对了这个地方编译程序,会编程序,还有解释程序,我们可以把它们统称为翻译程序反正他们就是报了计算机系统的结构越高层的机器看起来似乎就可以识别越高级的代码每一种代码的执行最终肯定都是需要把它翻译成机器我们之后又介绍了三种级别的语言编译程序。所以我们之后又介绍了三种级别的语言嘛,大家需要重点体会编译程序和解释程序的一个区别,那从层次结构的视角来看,我们这门课重点要探讨的是下面这两层的机器应该怎么实现,这是我们计算机组成原理这门课要研究的内容,那还有一门课和计算机组成原理及其相关,也是很多同学比较容易混淆的,一个叫做计算机体系结构,这门课和c组的关系是体系结构这门课他探讨的是机器语言程序员所能看到的计算机系统的属性概念性的结构与功能特性,而这句话读不懂,举一个大家能懂的例子,计算机体系结构这门课必须要探讨的是指令系统应该怎么设计,也就是说我设计的这台计算机要对上层的机器语言程序员提供哪一些指令,比如有没有乘法指令呢?如果我不给他提供乘法指令的话,那使用这台机器的程序员想要实现乘法,是不是就只能通过多次的加法来实现了。过多次的加法来实现了,而计算机组成原理这门课要探讨的是,如果我要给上层提供乘法指令的话,那这个乘法指令我应该如何用硬件来实现,也就是说体系结构这门课他探讨的是我们如何设计硬件和软件之间的接口而组成,这门课要探讨的是怎么用硬件来实现我们定义的这些接口,那这些接口这些指令如何用硬件来实现,对于上层的程序员来说,其实是透明的也就是不可见的,那很多跨考同学对于我们计算机专业的所谓的透明会有一个误解,我们平时在说某事公开透明的时候想要表达的意思是说这个事情是看得见的,大家都看得见的,但是我们计算机专业里说某一个东西它是透明的,指的是这个东西我们看不见,不知道有没有同学看海贼王,这个动漫里边有一个透明果实能力者这哥们它可以让自己的身体变透明透明之后其他人士不见了以后我们在专业课里说。明那变透明之后,其他人是不是就看不见了好,所以以后我们在专业课里说某一个东西它是透明的,那我们想表达的意思是说这个东西是我们。有看不懂啊,好,所以以后我们在专业课里说某一个东西它是透明的,那我们想表达的意思是说,这个东西是我们看不见的好的,那以上就是这个小结的全部内容。