第三节就是计算机硬件的基本组成。
什么是冯诺依曼计算机,它有哪些特点。上节课讲的就是单指令流、单数据流的这种计算机,也就是冯诺依曼计算机,我们来详细地来讲解一下。冯诺依曼计算机它是不太符合我们现代计算机的这种结构的,现代计算机的组织结构和早期冯诺依曼体系的计算机有哪些不同。最后我们来讲解一下计算机有哪五大功能部件,并且下一节就来围绕着这五大功能部件进行详细地讲述。
早期的冯诺依曼计算机。现代的计算机都是存储程序结构的计算机,我们的指令、我们的数据、我们的程序都是以二进制的形式存放在计算机当中的。那么这一种,存储程序型的计算机,这种机器,我们就把它称为冯诺依曼计算机,它是由美籍匈牙利科学家冯诺依曼提出的。他提出了这种程序存储的思想,并且把这种思想成功地用在了计算机的设计当中。把根据这种思想设计的计算机,就把它称为冯诺依曼计算机。也就是说我们的把指令以代码的形式事先输入到我们计算机的主存储器当中,然后按照它在存储器的首地址,执行程序第一条指令,然后按照这个程序规定的这个顺序执行其他的指令。你可以是顺序执行的,也可以进行一些跳转,反正是按照这个程序规定的这样一个顺序来依次地执行其他的指令,一直到我们的程序运行结束,也就是这种存储程序的这种设计思想。
那么它有哪6个特点呢?注意这6个特点必须要牢牢地记住,你现在记不住没有关系,我们将在后面的讲解当中对这6个特点逐步地加深你的印象。你现在可能会有一些理解上的困难,但是我们将来在学习当中你就会一步步地理解这6个特点到底是怎么样了。那么首先第一个特点是这样的,计算机的硬件系统是由5个部分组成的。为什么要有这5个部分。你首先想一下,我们的计算机是用来干什么的。计算机很显然是用来计算的,所以它必须要有一个进行计算的这样一个器件,那么这个器件我们就把它叫做运算器。运算器就是计算机进行运算的这样的一个器件,就叫做运算器。其次,不光要有这种运算器,我们还要能够控制、指挥程序以及数据的这种输入输出,以及数据的这种运行,我们必须要进行一种控制。那么进行这种控制的器件,我们就把它叫做控制器。这是第二个部分,运算器、控制器。那么存储程序嘛,你这个程序要存储在哪儿呢,肯定要有存储的地方吧,所以我们就必须要有存储器。所以这三个部件,运算器、控制器、存储器大家应该都了解。那么不光要有这三个部件,你要把这个东西让你这个计算机能够理解、能够把我们人类所理解的信息形式转化为计算机能够理解的信息形式,所以就必须要有输入设备。那么输入设备的工作呢就是用来把我们人类熟悉的这种信息的形式转化为我们机器能够识别的信息的形式,所以这种东西就叫做输入设备,比如我们的键盘和鼠标就是输入设备。同时呢你这种计算机进行了运算之后,它的结果要能够输出出来,所以就必须要有输出设备,能够把计算机的运算结果转化为我们人类能够理解的这种形式。所以计算机是由5个部分组成的。哪5大部分,运算器、控制器、存储器、输入设备和输出设备这5大部分组成的。那么我们说了这个冯诺依曼计算机呢,是存储程序结构的这种计算机。那我们的指令和数据都存储在存储器当中,并且它们的地位是同样的,是以同等地位存储于存储器当中,存储器是不加以区分的。那么就带来一个问题,我们怎么来知道我们的CPU进行工作的时候,怎么知道它就是数据,它就是指令呢。那么这个问题先保留在这儿,我们将在下下节也就是我们在运算器、控制器那一部分将为大家详细地讲解,而为什么我们CPU就能知道它是数据它是指令,这个问题先存个疑,并且它能够按照地址进行我们的访问。这个是一个特别大的特点,我们的计算机是能够按地址进行访问的。并且我们的指令和数据都是由二进制的代码表示的,这个是由我们计算机的这个电子元器件的物理特性决定的,高电平低电平,所以就是由二进制的代码的形式表示的。那么我们的指令可以分为操作码和地址码,就是这一条指令你可以把它分为操作码和地址码。操作码用来表示我们这一条指令它的操作的性质。那么地址码用来表示我们的操作数是存放在哪里的,所以我们要记住指令是由操作码和地址码构成的。并且指令是在存储器当中按顺序存放的,一般来说,它的执行也是顺序执行的,除非你有跳转指令,除非在一些特定的条件下,可以根据它的运算结果,可以根据一些条件来改变我的执行顺序,一般来说,也是顺序执行的,顺序存放,顺序执行。并且我们早期的这种冯诺依曼计算机是以运算器为中心的。我们看到这张图当中,它是以运算器为核心的。并且我们的输入输出设备都通过运算器和存储器来传送数据,这就是我们的冯诺依曼的计算机的6大特点,大家要记清楚。
我们的计算机都是用来进行计算的,它的主要的工作肯定一开始提出来就是为了满足我们的计算这样的一个需求,所以我们就有原始数据和计算步骤。根据我们的这个计算机计算之后,得到我们的计算机结果。那么原始数据和计算步骤必须要由一种器件把它转化为计算机能够理解的这种形式,那么这个器件我们就把它叫做输入设备。输入设备的工作就是把我们人类熟悉的信息的形式,转化为我们机器能够识别的信息的形式,这就是输入设备。
那么输出设备呢,就是由计算机把我们的运算器运算得到的结果转化为我们人类能够理解的信息的形式,那这就叫做输出设备。常见的输出设备有打印机,显示器这种。
那么输入设备和输出设备中间呢有一个叫做运算器的部件。运算器的功能就是完成我们的运算,哪些运算呢,算术运算和逻辑运算。那么运算器的这种算术运算和逻辑运算将在下一章也就是数据的存储和表示当中进行详细的讲解。那么它的中间结果暂时是存放在运算器当中的。
所以我们可以通过输入设备和输出设备,通过这个运算器进行一个计算之后交换数据。
那么显然光有这三个部件够吗?不够。还要有一个叫做控制器的东西控制我们的输入输出,控制我们的程序的执行,控制我们处理这种运行和处理。所以就必须要有控制器。
那么控制器是能够和它们三个进行直接的交互的。虚线代表的是控制线,也就是我们的控制线和反馈线。注意是双向箭头,也就是说,我们控制器可以对它们三个进行控制。并且它们三个也能按照控制的结果对我们的控制器进行一个反馈,所以是双向箭头。
光有这四个还是不够的,因为我们知道我们的冯诺依曼计算机是存储程序型的计算机,我们必须要有地方来存,那么存的东西呢就叫做存储器。存储器可以和我们的运算器进行数据的交互,
同时它也能够和我们的控制器进行控制和反馈。
最后,还可以呢把存储器里面的这个指令传送给我们的控制器。我们知道这个指令和数据都是以同等的地位存储在存储器当中的,我们的控制器就可以从存储器当中读这样的指令。所以呢这就是我们的冯诺依曼结构的计算机,大家要清楚是这样的一个形式。
但是我们有没有发现,这样的计算机是有一定问题的,早期可能还没有关系,但是随着我们现在的这个数据量在不断地扩大,这时候运算器就能够成为我们计算机的一个瓶颈。随着我们现在微电子技术的进步,我们计算机需要处理、需要加工的信息量与日俱增。大量的I/O设备的速度和CPU的速度相差悬殊,所以我们的运算器就变成了我们的计算机的一个瓶颈。以运算器为中心的结构,并不能满足我们现在对计算机的发展要求。所以我们就必须把以运算器为核心的计算机把它改造成以存储器为核心的计算机,就是这样子。所以我们现代计算机的组织形式就是以存储器为核心的计算机,这就是我们的现代计算机的组织结构。
那么所以我们现在计算机就有5大部件。运算器和控制器,运算器和控制器,由于它们的这个逻辑关系和电路结构是十分相似的,并且连接也是十分紧密的。最后我们在我们现在的大规模集成电路的制作当中,就把它们两个呢合成一块,就是把它们集成在同一块芯片上面,
变成一个中央处理器,
也就是我们的CPU。
然后把它和我们的主存储器合起来,
变成一个叫做主机的东西。注意啊这个主机并不是我们现实生活中理解的那种主机,
你以为是这种主机,它主机不是这个。这个主机是说CPU和主存储器共同构成了这个东西叫做主机。而我们现在那个机箱啊那个主机,它里面有好多东西的,不是我们那种主机啊,是我们计算机组成原理里面的主机。
那么还有一部分呢叫做外设,它是由输入设备、输出设备,也就是把它统称为I/O设备。
并且还有我们的辅助存储器,它I/O设备和辅助存储器,
它们两个构成的呢就叫做外设。好的,那就是我们计算机硬件的基本组成就是这个样子的。我们从下一节开始,就要详细地来讲解存储器、控制器、运算器、输入设备和输出设备。
好的,我们这一节讲了些什么呢,我们这一节首先讲了冯诺依曼计算机的6大特点,大家要牢牢地记住这6大特点。并且冯诺依曼体系结构的计算机呢是以运算器为核心的,它不能够满足我们现在的这种对数据量的需求,所以我们就把它改造成了以存储器为核心的计算机。那么,现代的计算机的体系结构呢就是以存储器为核心的。并且,由这个,我们就推出了我们计算机有5大功能部件,分别是存储器、控制器、运算器、输入设备和输出设备。那么下一节我们将要学习存储器的功能和结构。
我们这一节的主要内容就是存储器的结构和功能。
我们的计算机呢由主机和外设构成,主机由CPU和主存储器构成。而外设呢由I/O设备和辅助存储器构成。
主存储器又可以叫做主存和内存,辅助存储器又可以称为辅存和外存。那么我们这一节所讲的呢是主要是我们的主存储器它的结构和功能,而关于辅助存储器它的结构和功能呢,我们将要在第三章,也就是我们的存储系统那一章进行详细地讲解。而我们这一节呢,主要的只是对主存储器的一个大概的了解即可。
那么主存储器呢由三个部分构成,
分别是存储体,MAR(地址寄存器),MDR(数据寄存器)。M是Memory(存储),A是Address(地址),D就是Data(数据)。以后看到MAR就是地址寄存器,看到MDR就是数据寄存器。
我们的这个主存啊,它的工作方式是怎样的呢。它是按照存储单元的地址号来实现对存储字个位的存和取,那么这种存取方式就叫做按照地址来进行存取。也就是按照地址呢来访问我们的存储器,所以我们就必须要有一个地址寄存器来进行对这个存储单元的地址进行存储。同时我们还要有一个数据寄存器来暂时存放我们存进来或者取出来的这样一个数据,我们就必须要有一个叫做数据寄存器的东西。所以呢我们的这两个寄存器MAR和MDR就是为了实现我们的按地址访问的方式配置的。地址寄存器呢就是存储地址的这样的一个寄存器,用来存储我们想要访问的存储单元的地址。而数据寄存器呢就是存放我们从存储器某一个单元取出来的代码,或者想要准备往某一个存储单元存入的这样的代码。并且呢,这样的一个存储的步骤啊是由一个叫做时序控制逻辑进行控制的。我们不需要知道时序控制逻辑是什么,我们只需要知道它是能够干什么的,它是能够控制我们对存储器的这样一个访问的步骤,就可以了。
好的,我们来看一下这个存储器啊它的一个物理结构。只是一个大概的物理结构,因为我们的基本上的存储器它的这个存储的结构基本都是类似的,所以我们只需要掌握一下这个大概的结构就可以了。我们可以发现,它是由两个部分构成的。一个部分呢是上面这个部分,我们把它叫做开关器件,它是控制这个电路通断的。而左边这部分呢叫做电容,那么电容就是用来存储一位信号的。
我们现在想要从这个电容当中把这个1读出去我们怎么办呢?
首先我们的开关电路收到了这样的一个读信号,我们用1来表示,我们的这个开关啊,它收到了读这个信号。
收到这个信号之后呢,开关闭合。这时候这条路就通了,
通了之后我们就可以把电容当中的这个1这个信号给读出去。
同样现在我想往电容里面写。我们怎么办呢?有这样一个1这个数据,我们想写入这个存储器当中。
我们这个开关器件啊它就收到了写这样一个信号。
收到写信号之后,它就闭合。
闭合之后我们就可以把这个1写进我们的电容当中。这样读和写的步骤大家都应该清楚了。
所以呢我们就把这样一个小的这样一个器件,这样一个最基本的器件,把它叫做存储元。我们的存储体是由一个个存储单元而构成的。一个个的存储单元就是由这样的一个个的存储元而构成的。
多个存储元就变成了这样的一个存储单元。我们这一行就把它叫做存储单元。这时候我们可以看到它是它的这个红线啊是连在一起的,我们可以就一次性对它读一次或者写一次就可以了。而绿色的线呢,也是连在一起的。
那么比如这时候,这里面存放了这样的数据,10100011。我们要把它读出去,
首先,我们对这一整个红的这条线,给它一个读信号。给它一个读信号之后,我们的这根红线它就通了。它的开关器件它就闭合了,这条线就通了。通了之后我们就可以把这个10100011给读出去。
那么像这样的东西呢,这一行这样的东西呢,我们就把它叫做存储单元。
那么整个存储体,
就是由一个个的存储单元而构成的。
那么像上面我们读出去的这个东西,10100011我们就把它叫做存储字。
那么它的这个位数我们就把它称为存储字的字长。像这个例子当中,它的这个字长就是8比特。那么1位就是1比特,那么这个存储字长呢就是8比特。
那么这个比特还可以用字节进行换算,1字节呢是8比特,所以我们这一个存储字的字长可以写成8比特,也可以写成1字节,也就是1个大B。好的,这就是我们存储器的一个物理构造。
下面我们就来看一下,各存储器是怎么进行读和写的。
我们知道我们的红线是连在一起的,也就是一次性可以对整个存储单元进行读和取。我们的绿线也是连在一起的,所以呢绿线连在一起之后,我们一次读的时候就只能读一个存储单元。如果多个存储单元同时读的话,它就会造成数据的混乱和混淆。所以这时候就只能有1根红线是1,其他的必须都是0。也就是说,我们同一个时刻只能有1个存储单元是能够通的,其他都必须不通。所以,这样的一个地址,显然和我们地址寄存器的地址不太一样,因为它只有1个是1,其他都是0。而我们地址寄存器的地址呢,是我们要访问的存储单元的地址,显然和它是不太一样的。
所以我们就要进行把地址寄存器的地址能够翻译成我们这样被存储单元的地址访问的这样一个地址,
所以我们就必须要有一个译码器进行这种地址的翻译。
比如像这个例子当中,我们想要访问的是第一个存储单元,也就是000这样的一个序号。
这时候000就可以通过这样一个译码器进行翻译,翻译成第一个存储单元是通的,其他存储单元都是不通的,都是0。第一个存储单元是1其他都是0,所以000这样的一个地址通过译码器翻译之后就变成了1000这样的形式。我们可以看到,我们这样的一个地址是3位,而我们这样的的存储器呢?存储单元有多少个呢,就是2^3=8个。如果我们现在想要001这样的一个地址,那么我们经过译码器翻译成就是翻译成什么样子呢?就是第二个是1,其他都是0。所以我们这样的一个3位地址可以表示多少个存储单元呢,就是8个存储单元。如果有N个地址的话,就有2^N个存储单元。为什么会这样呢?因为我们知道,我们有N位地址的话,我们所表示的就是从N个0到N个1,从N个0到N个1,我们就可以有2^N个存储单元。大家再好好地理解一下。比如说我们现在是三个三位地址,就是001,000一直到111,所以就有8个这样的存储单元,我们就可以访问8个存储单元。比如说000就是第一个存储单元,001就是第二个存储单元,111就是我们的第8个存储单元,所以呢我们有N个地址的话,就有2^N个存储单元。所以我们的存储器的容量怎么进行计算呢,就用我们存储单元的个数乘以我们的存储字长。那么什么是存储字长呢?就是我们的一个存储单元它存储的这样一个位数。像这样的像我们这个例子当中,它的存储字长就是8。所以我们的总容量就应该是存储单元的个数应该是2^3*8bit=2^3*1Byte(所以也就是1字节啊)=8B(所以就是8字节)。大B就是字节的意思。所以我们的总容量的计算,就是由存储单元的个数乘以存储字长。
所以呢在地址寄存器和存储体之间就必须要加两个部件。第一个部件就叫做译码器,第二个部件就叫做驱动器。驱动器是用来干什么的呢?就是来驱动这样的一个读写的,所以我们的译码器是必不可少的。它能够把我们的地址寄存器的地址翻译成我们需要读取的这样的一个存储单元是哪一个存储单元,这就是译码器的作用。所以我们的存储器是如何进行工作的大家也应该完全掌握了。
好的,那么我们的这个存储单元的这个字长,
也就是我们的这个存储字的字长,
和我们的数据寄存器的字长应该是一样的。也就是说我们数据寄存器用来存放从存储体某一个单元取出的代码,或者说准备往某一个存储单元存入的代码,它的位数应该和存储单元是完全相等的。所以,我们的存储器的容量,就可以用存储单元的个数乘以存储字长。那么这个存储字长就是我们的数据寄存器它的这个字长,它的位数。
最后提醒大家一点就是说,我们的MDR和MAR虽然在逻辑上是放到主存里面的,但是在实际的硬件实现的时候,是把它放到CPU里面进行实现的,大家注意这一点就可以了。
那我们这一节存储器就讲完了。最重要的知识点就是这张图。我们的存储器是如何进行工作的,它的结构又是怎样的。它是由地址寄存器、存储体和数据寄存器来构成的,并且由一个时序控制逻辑来控制它的读取和写入,控制它的整个的一个过程,所以把这张图记住就可以了。还有我们的它的物理实现是怎样的大家要把前面的图简单地看一下理解一下,再多多地去复习一下去回想一下,那么存储器的这样一个工作的方式以及它的物理的结构大家都应该有着很好的了解了。那么下一节我们将要讲述计算机硬件的其他组成部分,也就是我们的运算器、控制器和我们的I/O设备。
好的,我们继续来看计算机的功能部件,那么我们这一节的内容呢有三个部分。一个呢叫做运算器,一个呢叫做控制器,学完运算器、控制器以及上一节的存储器之后我们就可以来看一下我们计算机的工作过程是怎么样的。那就是我们这一节的主要内容,只有3个部分。
首先我们来看一下,我们先来回顾一下,我们知道计算机是由主机和外设构成的。主机是由CPU和主存储器构成的,外设是由I/O设备和辅存构成的。那么我们要讲的就是CPU。CPU呢是由运算器和控制器构成的,为什么把它们放到一起呢我们之前也讲过。因为运算器和控制器在逻辑关系和电路结构上联系是非常紧密的,所以呢我们在大规模的集成电路制作的时候呢,就把这两大部件放到同一块芯片上。
好的我们来看一下运算器和控制器。那么运算器是计算机的执行部件,它的功能是什么呢?它的功能就是对数据进行加工处理,完成我们的算术运算和逻辑运算。那么算术运算是什么呢?算术运算就是像加减乘除这样的计算,根据算术运算规则进行的运算叫做算术运算。而逻辑运算呢就是与或非异或比较移位这些运算呢就把它叫做逻辑运算。那么运算器是由哪些东西构成的呢?它是由乘商寄存器MQ,累加器ACC,算术逻辑单元ALU,操作数寄存器X和这些变址寄存器啊、编址寄存器,那么这些呢都是由它们的这些首字母啊构成的。我们在这一节并不要知道它们具体是干什么的,我们只需要知道运算器由它们构成就可以了。
它们是用来干什么的,我们将要在下一章详细地讲述。在这一章我们只要有一个概念就可以了,不需要把自己搞的太累,我们只要有一个概念就行了,知道它有这么个东西就可以了。那么它的核心我已经给大家用红色的框框给大家框起来了,它的核心就是我们的算术逻辑单元,也就是我们的ALU,就是用它来进行算术运算和逻辑运算的。它是运算器的核心,知道这个就可以了。
那么控制器是用来干什么的呢?控制器是计算机的一个指挥中心。听它的名字就知道,它是控制的嘛。所以它是用来指挥我们各个部件自动协调地进行工作的。那控制器呢是由这三个部分组成的,
一个呢叫做CU,也就是我们的控制单元。它是用来分析指令,给出控制信号的。
还有一个叫做指令寄存器也就是我们的IR,IR是什么呢,就是存放我们当前正在执行的指令。所以叫做指令寄存器。
最后呢一个叫做PC,程序计数器。它是用来干什么的呢,它是用来存放我们当前任意执行的指令的地址。我们要执行的这么个指令的地址,并且可以自动加1形成下一条指令的地址。它执行完了我们当前的指令,那么PC就自动加1,自动加1之后形成了下一条指令的地址。这时候我们就可以进行一个自动的一个运行了。
那么我们已经知道了计算机的运算器和控制器它是怎么样构成的。下面我们就来分析一下我们计算机是如何进行工作的。我们以取数指令过程为例,我们来详细地说明一下计算机是如何进行工作的。
首先我们画出这样的一个框图,我们的计算机呢是由CPU、主存储器和I/O构成的。那么在取数指令这个阶段里面我们用不到I/O,我们只要有CPU和主存储器就够了。主存储器呢是由存储体和MAR、MDR构成的,这是我们在上一节讲过的内容。而CPU呢,是由运算器和控制器构成的。运算器里面又有ACC,MQ,ALU,X,它的核心是算术逻辑单元。而控制器它是由控制单元、指令寄存器和程序计数器构成的。
那么在我们分析这个取数指令之前,我们先来约定一些概念。M它的意思就是说主存当中某一个存储单元,我们用M来代表主存当中某一个存储单元。那么像ACC、MQ这些东西呢,就用它的名字来说明它们代表着是相应的一些寄存器。那么加括号是什么意思呢?加括号代表的就是说我们相应寄存器里面的一个数据。我们如果只是这个名字的话,我们只是代表这个寄存器。如果在这个寄存器外面加个括号的话,我们就代表我们这个寄存器里面的数据。那么像M(MAR)这代表什么呢,就是把地址寄存器里面的地址取出来,取我们这个存储单元里面的这个数据,就是说在MAR这个地址当中的存储单元它里面的数据我们就用M(MAR)来表示。
那么指令是操作码和地址码构成的,就是我们冯诺依曼计算机的一个特点之一,也是我们重点要掌握的,它是我们冯诺依曼的第四个特点就是说指令是由操作码和地址码构成的。操作码用来表示我们操作的性质,地址码用来表示操作数在存储器当中的位置,所以叫做操作码和地址码。
那么我们就用OP,就是OP就是操作码的意思,OP(IR)这个我们就表示取操作码的这样一个动作。那么Ad(IR)我们就用来表示取地址码的这样一个操作。所以指令是由操作码和地址码构成的,这个概念大家应该很熟悉了。下面呢,我们就来一步一步地来分析我们是计算机是如何进行取数指令的,它的工作过程是怎样的呢。首先我们要思考一下,我们的取数指令到哪里去找,我们应该到PC里面去找,因为PC存放的是我们想要执行的这样的指令的地址,而这个功能就是说我们存放的是欲执行的指令的地址。所以我们要到PC里面去找它的地址。那么我们把PC这个想要执行的指令的地址传给我们的MAR,也就是传给我们的地址寄存器。
我们第一步就是把PC里面的指令地址传给我们的地址寄存器,地址寄存器得到了我们想要执行的指令的地址之后,再到存储器里面去找到这条指令存放在哪儿。
所以第一步呢就是把PC里面的数据传送给MAR,所以就写成(PC)->MAR。
MAR得到地址之后我们就要到存储体里面找到这条地址所对应的存储单元。所以第二步就是把这个指令,
根据这个指令取它这个存储单元的里面的这条指令。
然后得到了这条指令之后,我们把它传送给数据寄存器,也就是我们取到了位于MAR这个地址当中的存储单元里面的这条数据。这条数据就是我们的指令,把我们取到的这个数据传送给数据寄存器。所以就是第二步就是,我们根据MAR这个地址找到我们的存储单元,得到了我们的数据,把数据传送给数据寄存器。那么这个数据呢就是我们要的指令了。
然后MDR再把得到的指令传送给指令寄存器,指令寄存器呢就用来得到了我们的指令。它的内容就是来自我们的主存的MDR。
那么这时候我们的指令就得到了,
我们的取指阶段就结束了。所以这三个步骤这三个步骤就得到了我们的指令,所以这三个步骤共同构成了我们的取指阶段。好的我们再来回顾一下,我们的取指阶段是怎样的。我们先到PC里面,把PC里面的当前欲执行指令的地址传送给MAR,传送给我们的地址寄存器。地址寄存器得到了地址之后,到存储体当中找到这条地址所对应的存储单元,把它存储单元里面的数据也就是我们要的指令传送给我们的数据寄存器。数据寄存器得到了我们的数据,把这个数据传送给指令寄存器,这时候取指阶段就结束了。取指阶段为什么要叫取指,就是把指令从存储体当中取出来传送给指令寄存器。
这时候指令寄存器就要进行分析指令这一个步骤。怎么分析呢?就是把它的操作码传送给CU。
就是把我们的操作码的部分也就是OP(IR)部分传送给我们的控制单元。控制单元分析指令,然后发出各种微操作的命令序列。
那么这时候分析指令取指阶段就结束了。然后它还有地址码,地址码是用来干什么的?地址码是用来保存我们操作数的地址,所以呢我们就要把这个操作数传送给地址寄存器。
就是这样的,把我们的地址码传送给地址寄存器。
地址寄存器再根据相同的操作,根据这个地址啊到这个存储体当中找到存储单元它里面的数据也就是找到了我们的操作数。
那么存储体呢就把我们的操作数给我们的数据寄存器,然后数据寄存器呢就得到了我们的数据。
得到数据之后,把数据传送给累加器ACC。这时候我们的取数阶段就结束了。那么这三个阶段就是指令寄存器IR把地址码给地址寄存器MAR,地址寄存器MAR根据这个地址去找到我们的这个数据之后,那么数据寄存器MDR再把数据给我们的累加器ACC。那么这个过程就叫做执行指令,执行我们的什么指令呢?执行我们的取数指令。好的,那么我们的取数指令整个一个阶段就结束了,我们再来回顾一下。取数指令分成三个阶段,第一个阶段是取指令,取指令之后分析指令,分析指令之后我们再去取数,那就是我们计算机工作的整个一个过程,就是这样了。
那么这时候我们就可以看到,我们的数据寄存器MDR里面既可以存放数据,又可以存放指令。所以我们就来回答我们之前遗留下来的那个问题,指令和数据以同等地位存储在存储器当中,那么我们如何去区分哪一个是数据,哪一个是指令呢?
这时候我们就可以区分了。我们的取指阶段取的就是指令,取数阶段取的就是数据。所以CPU如何区分指令和数据,是通过它们指令周期的不同阶段来区分指令和数据的。取指阶段取的就是指令,取数阶段取的就是数据。那么我们就完成了这一个取数指令这整个的一个过程。好的,那么我们整个控制器和运算器就讲完了。
最后我们再来简单地介绍一下I/O设备。这个I/O设备我们只要知道它是用来干什么的就行了。我们具体的讲述将要在我们的最后一章也就是我们的第七章输入输出系统当中为大家详细地讲解。这时候我们只要知道I/O设备有哪些,是干嘛的就行了,
I/O设备是什么呢?I/O设备是构成外设的一个部分。构成外设的一个部分。
那么像输入设备,比如说键盘和鼠标,它是用来干什么的呢?它是用来把我们人类能够理解的东西转化为计算机能够识别和接收的信息形式。这就是输入设备一个作用。
比如像这样的一个摄影机,
那么输出设备是把计算机处理得到的结果以人类能够接受的形式展现给我们,就是能够把它变成我们人类能够理解的形式,那这样的一个设备就叫做输出设备。比如像显示器、像打印机就是输出设备。
那么辅存,辅存也是外设的一部分。辅存,比如像我们的硬盘,比如像我们的光盘,比如像我们的U盘,它们都是辅助存储器。关于什么是辅助存储器,我们将要在第三章详细地讲解,这里我们只要知道它有哪些东西就可以了。
那么像外设呢,还要提供一个叫做I/O接口的东西。这个I/O接口也是非常重要的。
好的,我们整个第三节就讲完了。也就是我们计算机的硬件组成完全地讲完了,它由5个部分组成,存储器、运算器、控制器、输入设备和输出设备。其中重点不在于后面,重点在最前面,在存储器、和运算器、控制器这部分。存储器的物理结构了解即可,只是为了让你能够感受到存储器是如何工作的就可以了。它的工作方式也是你只要知道一下就可以了。关于它们的一些详细的内容,第三章将要讲述。最重要的,这一节最重要的是什么呢?就是我们的容量如何计算,容量的计算方式不仅在这一节,我们将要在第五节也就是我们的性能指标当中还要再来讲述,它是非常重要的。也就是说,我们存储器只要知道它是如何工作的,它是怎么构成的就可以了,然后容量计算是要具体重要掌握。那么运算器和控制器那么在这一节当中也只要知道它们由什么构成的即可。最重要的是什么?最重要的就是以这个取数指令为例,我们的计算机是如何工作的,大家要完全掌握,烂熟于心。好的,那么我们整个第三节计算机的硬件组成就给大家讲完了。
来看第四节,也就是我们计算机系统的这样的一个层次结构。我们在之前第一节的时候就已经讲过了,就是说我们计算机可以划分为两大部分,一部分是硬件,一部分是软件。硬件呢是能够看得见摸得着的部分,而软件呢是看不见摸不着的部分。但是那一种划分显然是很粗糙的。我们来看一下这样的一种简单的层次结构。
那么我们可以用这样的一个简单的层次结构来表示计算机的逻辑关系,也就是这种粗糙的结构。那么下一层呢是计算机系统的硬件,硬件进行了相对的封装,对软件提供了接口。比如说,提供了指令集,软件呢肯定用这些指令集编写能够完成一定功能的软件。
那么我们还可以把这个软件啊进行细分,就是说分成应用软件和系统软件。系统软件呢利用硬件提供的接口完成自己的功能,比如说对系统当中的软硬件资源进行管理,给用户提供人机交互界面。应用软件呢可以利用系统软件提供的接口,调用系统软件的功能来实现自己的一个功能。那么像这样的一个简单的层次结构,显然呢是比我们之前第一节提出的简单的划分是更具体了一点,因为它有这样的一个封装和接口。实际上呢我们是对计算机系统呢进行了一种抽象,就是说把一个非常复杂的计算机系统用了非常简单的层次结构进行了表述。通过封装,我们可以通过分层来实现这样的一个复杂的计算机系统。当然了在分层过程当中我们还处理好了各层之间的这样一个接口。那么下面呢我们从程序员的视角来对计算机系统进行一个抽象。
那根据计算机系统的发展我们在第二节的时候,讲历史的时候就讲过,我们最早出现的语言呢是机器语言。因为这时候的机器呢就叫做实际上的硬件机器,那么编程人员利用计算机它这个机器提供的指令集使用机器语言也就是二进制代码直接对硬件机器进行编程。那么编写完的程序呢就能够在计算机系统当中也就是在这样的一个实际的硬件上进行执行。而这时候的机器呢就叫做用计算机语言的这样的机器,就是传统机器M1。那么我们知道啊机器指令是由01代码构成的,当然这样的01代码是很难记忆的,也是很难使用。
那为了简化我们程序的编写,在此基础上呢人们就提出了利用汇编语言来进行编程。也就是说把我们的机器语言符号化。那么这样,就是说机器语言是这样的,00001111这样的01序列我们把它进行一个符号化。这时候呢就用汇编语言来进行编写程序。但是如果我们的汇编语言想要执行的话,汇编语言编写的程序啊想要在机器上能够正确地运行起来的话,就必须为我们的机器提供汇编程序。用这个汇编程序把汇编语言编写的程序转化为机器语言的程序,然后再在实际的计算机上跑。那么这就相当于是这样的,就是说我们把实际的机器上外面罩了一层软件,这一层软件就完成由汇编语言到机器语言的翻译。那么罩的这层软件我们就可以把它看成是一个虚拟机器,也就是我们使用汇编语言的这样一个的机器,就是我们的虚拟机器M2。那么汇编语言啊它是一种符号语言,基本上和机器语言是一一对应的,也就说一条机器语言的指令是对应着一条汇编语言的。所以我们当时在讲这个计算机语言的发展的时候呢,是这样说的,它编写起来的程序是还是十分复杂的,和人类的这样的自然语言呢差距还是比较大,
那么后来人们呢就提出了使用高级语言,也就是用高级语言进行编程。
好就是这样,把我们的这一串一大块的这样的汇编语言程序用一条语言、一条语句就能够解决了。
这时候的高级语言啊是和我们的自然语言非常相似的。但是这样的高级语言编写的程序想要在我们的计算机上执行起来,我们还是必须要给这样的高级语言提供编译程序或者呢就是解释程序,由它呢也就是由我们的编译程序啊、解释程序来生成我们的目标程序,生成这样的可执行代码,然后再在实际的机器上执行。这就相当于什么呢,这就相当于我们在汇编语言的机器上外面又加了一层软件。那么这一台机器在我们的高级语言程序员眼中,似乎就可以直接执行高级语言,注意啊是似乎,看上去它就可以直接执行高级语言了。但是它并不是能够直接执行高级语言了,它是要把它翻译成汇编语言,再翻译成机器语言。但是在我们高级程序员眼中,它就看上去可以执行高级语言了。那么这样的机器就是虚拟机M3,它是高级语言的这样的机器。实际上我们的计算机不仅在向上发展,还在向下发展。也就是说我们虽然是一条机器指令的指令,它虽然是一条,但是