[音乐] 现在计算机的结构模型是什么样子的呢?
冯.诺依曼结构计算机的特点我们刚才讲过了它由5大部分组成,有存储器
所以现在计算机也没有逃出这样的一种框架
所以它也有存储器,所有的这个存储器都是划分一个一个存储单元
每个存储单元编上号,0,1,2,3,4这样编上号 冯.诺依曼结构规定计算机要有一个控制器
而现代计算机结构当中也有控制器
冯.诺依曼结构规定计算机当中要有算术逻辑部件
就是进行算术运算和逻辑运算的部件,所以计算机有算术逻辑部件。
然后呢 送到这个ALU,算术逻辑部件里面的操作数可以是寄存器里面的操作数
当然也可以是存储器里面的操作数 运算的结果可以继续放到某个寄存器里面
也可以通过总线输出到存储器,等一会我们要画总线
那么这个就说明寄存器的数据可以通过这边的MDR
送出去,送到存储器,存储器来的数据在MDR最终也可以送到 寄存器里面。
那么运算的这个结果 除了直接产生的这个数据以外
还有一些标志信息,比如说这个运算的结果 得到的符号是什么,有没有进位
有没有溢出等等一些标志信息,这些标志信息可以
送到控制器里面影响后续指令的执行 每条指令它的地址
如果要执行到这条指令的话,这条指令的地址事先送到一个专门的
寄存器里面的,这个寄存器我们叫PC 就是程序计数器,program
counter 然后指令的地址要先送到
MAR里面,这个M就是memory,A就是address R呢就是register,就是memory address
register,主存的地址寄存器 先要把地址送到这儿,然后通过总线送到存储器
那么操作数的地址,我们刚才讲了指令的地址是在PC里面送过来的
如果我们要取的是某一个操作数取过来进行运算 那么操作数的地址也要送到MAR,然后
送到存储器,而操作数的地址可以在寄存器里面
所以我们刚才看到的这个地方,一个一个的小格子
它实际上是一些我们称为寄存器的这样一些寄存器
那么这些寄存器我们称为通用寄存器 general
purpose register 寄存器的这个名称就是register
这边是若干个通用寄存器,所以我们叫通用寄存器组 有若干个general
purpose register set 若干个通用寄存器构成的通用寄存器组
那么指令取过来再
送到控制器里面去执行的时候,它先要放到一个寄存器里面
这个寄存器叫指令寄存器IR,instruction register
I就表示instruction,指令的意思 然后这边说明我们的这个MDR里面的数据是从
存储器来的,说明取来的指令先是在MDR,然后再送到指令寄存器
最后这个指令寄存器当中的操作控制字段或者叫操作码字段
操作码字段会送到控制器去进行译码 整个这个就是CPU,也就是
中央处理器里面最核心的、 最基本的一些部件
那么这个CPU,中央 处理器和主存之间是通过总线相连的
现在我们知道主存是 一些内存条,内存条上有很多芯片
插在这个主机板的插槽里面,那么底板上面实际上是有很多 连线,这种连线实际上就是一些总线
然后CPU芯片也是插在主板上的这个CPU芯片的插座上面,然后通过总线相连
所以现代计算机的机构跟冯.诺依曼结构计算机几乎也是一样的
也是由这个运算器、 控制器
构成的CPU和存储器组成 此外,整个这个我们称为主机
主机和外部世界的连接通过输入设备和输出设备连接
所以冯.诺依曼结构规定有五大部分 输入设备、 输出设备、
存储器、 控制器、 运算器,那现代计算机的结构基本上也是这样子 这个就是现代计算机的结构模型
在这个里面,MAR和MDR是跟总线相连的
属于总线接口部件,CPU要到这个存储器去取指令
必须先把指令的地址送给存储器 然后并且把读信号,这个红颜色
的就是控制器送出来的控制信号送到控制线上 然后告诉存储器要读哪一个
地方的信息,读出来的信息通过数据线
送到MDR,指令的话就送到指令寄存器,数据就送到寄存器
然后再送到ALU进行运算 或者MDR的数据直接送到ALU进行运算
也有可能,这个是 大概的计算机的结构模型
那么对于这样的一个计算机的结构 你能想到这样的计算机相当于现实生活当中的什么东西吗?
是不是像我们的工厂?这个相当于加工车间
这个相当于仓库,这个相当于工厂的跟 外界,比如说从原料运回来,或者变成成品输出去
跟我们的工厂很类似,实际上跟我们的饭店或者我们家里的厨房也一样的
CPU相当于我们家的厨房,然后ALU相当于锅、
灶等等 控制器实际上就是炒菜的人,做饭的人
那么这个就是相当于我们买回来的原料,大米、 青菜、 萝卜等等
这个是跟我们的厨房也差不多,饭店也一样的 那么计算机是如何工作的呢?
这个是计算机的一个大概的结构,那么在这个里面我们刚才已经简单地说了一下
它基本的部件,我们再看一下这个CPU它是中央处理器的英文的缩写 central
processing unit,CPU就是中央处理器的缩写
PC就是program counter,程序计数器
MAR就是memory address register
存储器的地址寄存器,那么ALU就是 算术逻辑部件,这个A就是算术,L就是逻辑
U就是unit,部件,IR就是我们刚才讲的指令寄存器 MDR就是memory
data register,就是MDR 那么这边刚才我们讲过了这个是通用寄存器组
就general purpose register set 由若干个通用寄存器组成,那么最早的时候
这个集成度不是很高,当时还是分裂元件做的计算机 不可能做这么多寄存器,所以只有一个
累加器,只有一个累加器,后来才会有几个寄存器到几十个寄存器
这样子,其实这些名称已经反映了它们的一些作用
我们后续的课程会慢慢地来熟悉这些 部件它到底是干什么的
这样的一个结构规定了计算机执行程序 是如何执行的呢?实际上也就是说执行
计算机执行程序跟这个结构是 关联的,然后我们来看一下计算机是如何执行程序的
那么在理解计算机执行程序之前,我们可以想象一下
妈妈是怎样做一桌你指定的菜的,比如说你拿一个菜单告诉妈妈说我
喜欢吃这几道菜,你帮我做,这个菜单实际上就是让计算机执行的这个程序
菜单当中的每一个菜谱,每一道菜的菜谱,就相当于
是一条一条的指令,你想象一下看,这边的这个CPU就是
你们家的厨房,那么这个控制器就是你妈妈,厨房里面有很多小盘子
就相当于这儿的通用寄存器,一个一个的通用寄存器 构成了一个通用寄存器组,一叠盘子在这
然后这边的ALU就相当于锅啊,灶台啊等等的 然后在厨房外面有一个架子,这个架子上面
放了很多原材料,青菜、 萝卜、 西红柿、
鸡蛋 放在这个架子上,然后你妈妈拿到了一个菜单
下面她就开始要做这个菜单上的菜,相当于
CPU已经拿到了这个程序当中第一条指令的地址
就放在PC里面了,下面开始,就开始执行PC指定的
那个单元开始的一串指令了,那么也就相当你妈妈要开始
看着菜单上的一个个菜谱做菜了。
显然做菜前这些 原材料和菜谱也就是这些指令,都已经按序存放在厨房的架子上面了
每个架子上都有一个编号,就是刚才我们看到的存储单元的这个号码
也就相当于存储单元都是有地址的,那么这个菜谱上 面写上了说,青菜放在哪一个位置上面
萝卜放在哪个上面,然后怎么做,青菜是炒呢还是煮呢,炖好的菜
放在哪个盘子里面,或者放在哪个架子上面,比如把10号或者11号架子上的
原料一起炒,炒完了以后装3号盘,这个就相当于我们 的一条指令,说把10号单元的内容和11号单元的内容
放在一起加,加起来以后,放到某个寄存器里面去 这些准备工作,准备好了以后,就开始告诉
妈妈说,从第5个架子上面取菜谱来,开始做菜 相当于我们告诉CPU说,你从
主存单元的第5个单元那个地方去取指令,来执行指令一样的
好,下面就开始做菜,第一步,妈妈说,哎,你帮我到第五个架子上把菜谱取过来
就相当于CPU根据PC的内容,到存储器去取指令
取来了以后,妈妈肯定就看菜谱,说这个是先要干什么,后要干什么
就像CPU要对指令进行译码,译码 以后,它就知道该怎么做,那么妈妈看了菜谱以后她就知道怎么做了
看完以后,根据指令当中的规定,或者根据菜谱上的规定说 到什么地方去取原材料,在计算机里面就取操作数
取完了以后,那么就开始根据菜谱上规定,洗啊,切啊,炒啊等等具体的
这个动作,实际上在计算机里面,就是在
运算器,就是ALU上面进行运算,是做加呢还是做减呢还是乘呢还是与或等等
执行完了以后,那就装到盘子里面,规定的几号盘子里面,或者直接就送到桌子上
那么在计算机里面,也就是把它装到某个寄存器,这个结果,运算的结果,比如加的结果
放到某个寄存器,或者是直接放到存储器里面 上面这个菜做好了以后,那个还没完
因为你还要做其他的一些菜,然后这样的话你还要取下一个 菜谱来进行,再来做,那么
在取之前,先要算一下,下一个菜谱在哪个架子上 所以它把5加1,刚才是5号架子上
的菜谱,现在要按顺序取6号上面的来做,就相当于计算机内部 是改变PC的值,也就是把5加上
这个指令的长度,得到下一条指令的地址,送到PC 这样从下一步开始,又从PC
规定的那个指令地址 也就是存储单元里面去取指令,进行译码,取操作数,执行,回写结果,再修改
PC值再去做,那么这样的话就可以按部就班的,也就是按顺序
一条一条执行指令,也就是你妈妈也是按顺序 一个一个的菜谱取过来,然后进行做菜
计算机内部的执行过程就是这样子 这个是一条指令的执行过程
然后继续下一条,继续下一条,一直是这样的循环在执行
这个就是存储程序的工作方式,所以妈妈做菜
是跟存储程序工作方式是差不多的,类似的这种方式
那么计算机如何工作的?显然 你基本上应该明白了,因为你知道妈妈是如何做菜的
所以你基本上知道计算机是如何工作的 那么你能告诉,计算机是如何工作的吗?
那就是存储程序的工作方式,执行前指令和数据放在存储器里面
然后每条指令和每个数据都有一个地址,因为存储器都是一个单元一个单元编上号的
这个编号就是地址,然后指令呢,是从PC指出来的那个地址里面去取
并且呢PC每次加1,然后一条一条指令去取的 而每条指令当中呢,规定了有
这条指令是干什么的,OP字段就是操作码字段,指出指令的操作性质
操作类型,然后有地址字段,指出这条指令处理的这个操作数在哪个
组成单元里面,所以有地址字段,所以取完每条指令先对OP进行译码
译码译出这是作加还是作减还是与还是或等等,是操作类型是什么
然后再根据地址到存储器或者 这个地址如果是存储器的地址的话,那就到存储器去取
如果是寄存器的编号的话,那就到寄存器去取,取来操作数进行指定
的这个操作,完了以后结果放到相应的寄存器或者存储单元里面
每一个程序它的起始地址都是先放 在PC里面,先放在PC里面,跟妈妈做菜是一样的
所以先是根据PC取指令然后指令译码然后取操作数,执行,回写结果
然后修改PC的值,继续执行下一条指令
周而复始,所以计算机如何工作的,应该还是很好理解 就是这样子的一个工作过程
那么我们刚才讲过了程序启动 之前,指令和数据都是放在存储器里面的,形式上是没有差别
都是0/1序列,然后计算机采用的是存储程序的工作方式
在执行指令的过程当中,它是不需要人的干预的 所以我们可以看出指令当中它有操作码和操作数
这个操作数可能是两个操作数,比如说如果作
加法,加减乘除这种双目运算的话,那么它就有两个操作数 如果是单目运算,比如说取反啊、
取负啊等等,那它就只有一个操作数 那么这个操作数可能在指令当中直接给出,也可能在寄存器里面,那么指令当中
只要给出寄存器的编号,也可能在主存的某个单元里面,所以给出的是主存单元的地址
然后运算的结果要么放在寄存器里面要么放在主存单元里面
所以如果放在寄存器里面,那它就是在指令当中要给出寄存器的编号
放在存储器里面要给出存储单元的地址 所以指令当中要给出操作码和若干
个地址,这个地址可能是源操作数的地址
还有目的操作数的地址,那么这个存储地址的描述 和操作数的数据结构有关,后面我们会讲到
操作数有可能是用数组来描述的或者
用structure结构来描述的,那么它这个地址的描述跟这个
操作数的它的结构是有关系的,这个我们在后面讲到指令的寻址方式的时候
会讲 [音乐]