zoukankan      html  css  js  c++  java
  • 【知识强化】第一章 计算机系统概述 1.1 计算机发展历程

    有机械式的,有模拟电子计算机,有数字电子计算机。那么我们这一门课主要是围绕着数字电子计算机而展开的。那么关于计算机,我们将在这一门课的始终来贯穿着它。组成的英文是organisation,你也可以把它翻译成组织。那么在市面上,比如说计算机组织和计算机组成,我们可以把它看成是同一种类型的教科书。我们要学习的是计算机硬件系统的逻辑实现,注意是逻辑实现而不是物理实现。逻辑实现意思是说我告诉你我要做什么,而物理实现呢是说我要用具体的这种元器件把它能做出来。那么我们所使用的呢就是数字电路的知识,数字逻辑的知识。门电路、触发器等等这些数字电子的元器件来实现计算机的硬件系统,所以我们这一门课呢是计算机计算机这一门学科的一门硬件的基础课。那么有一些硬件知识,比如像数字电路啊,数字逻辑。我们要学习的是计算机组成的它的一个公共的原理,而不是说我们某一台具体的机型它是如何构造的,因为我们学习的是公共的原理。

    我们把基本部件、基本运算都已经掌握清楚了,我们就要考虑如何把这些部件全部都连接起来,形成一个能够协调运行的一个计算系统,这就是我们这一门课主要的内容。我们这一门课学习的都是计算机组成的一些最基础的一些公共的原理,就是说计算机是如何进行工作的,计算机它的部件是如何组织的,计算机它怎么进行运算的,就是这一些内容。

    进入第一节的学习,就是计算机系统的简介。

    找到我们的传感器,我们可以把传感器也看成一种计算机,还有我们的笔记本电脑,还有我们的客户端,或者说我们的个人电脑,最后还有这种大的服务器,高性能的计算机,物联网,物理信息系统,甚至我们有的科学家提出智慧地球像这样的大型的计算机,有大有小,各种各样,纷繁复杂。它们的基本结构是怎么样的?它们不管是怎样的计算机,它们的基本结构我们对它进行一种高层次的抽象,也就是说我们把它的具体特征来忽略掉之后,它们都有着一些共性的特征。

    我们的系统软件有哪几种常见的形式?首先第一个就是我们的这个语言处理程序。那么语言处理程序呢我们大家都编写过这样的高级语言的程序,像高级语言程序想要在计算机上执行的话,那么必须要有编译程序的支持。我们编写的这样的高级语言的程序如果我们想在计算机上去运行它去执行它的话,那么就必须有编译程序的支持。我们必须通过编译、链接以后生成目标程序,那么这个目标程序才能够在计算机系统的硬件上去执行,所以语言处理程序是一种系统软件。那么系统软件当中大家最熟悉的应该是操作系统。操作系统是用来管理计算机系统的软硬件资源的,它提供了人机交互,指的多个用户、多个程序能够协调地在一台计算机上执行,然后使用计算机系统的软硬件资源,所以操作系统是最著名的系统软件。我们数据库管理系统,大家应该也都很熟悉,我们如果想要运用数据库,编写数据库应用程序的话,必须要有数据库管理系统的支持。最后一个呢就是网络软件,网络软件比如你来听我上这门课的话,就必须要有网络软件的支持,所以这四种是常见的系统软件。那么应用软件呢就更加的丰富多彩了,它是面向某一个特定的任务、面向某一个特定的目标而编写的这样的程序。好的那么我们第一节计算机系统的简介就为大家讲到这里,我们来复习一下。

    因为还有一个客观的条件,就是我们的科技在不断地向前发展,我们的电子技术和我们的计算机体系结构的技术在不断地向前发展,所以也推动着我们的计算机在不断向前发展,从而能够满足我们的需求。

    那么这就是我们的计算机硬件发展的一个框图。在这里我们看到它的发展的历程主要是以逻辑元件的发展历程来划分的。那么什么是逻辑元件呢?我们看这样的一个CPU,我们把这个CPU剖开,可以看到它的内部构造,是由很多长得很像的单元在不断地排列组合而构成的。那这样的小的单元呢,我们就把它叫做逻辑元件,而逻辑元件本身的大小呢就决定了我们整个系统的大小。如果逻辑元件越大的话它就会越大,而逻辑元件越小的话这个整个系统就会越小。那么我们就以逻辑元件的发展来看整个计算机硬件的发展,那么这个逻辑元件的意思呢这个逻辑的意思和我们上一讲讲到的这个逻辑实现是一样的意思,就是说我们只规定了计算机它的功能是什么,它要为我做什么,而没有说我们要用什么样的方式来实现这个机器。我们可以用电子管来实现,我们也可以用晶体管来实现,只要能够满足我们的需求即可。

    什么决定了系统的大小呢?就是说我们的逻辑元件的大小就决定了我们的计算机系统的大小。真空管也就是电子管,可以看到如果某一个电子管发生了故障的话,那么是非常难找到这样哪里发生了故障,因为要从这一万多根晶体管中找到哪一个出故障是非常麻烦的一件事情。ENIAC使用的呢是机器语言来编写程序的,那么什么是机器语言呢?也就是我们计算机能够直接理解的这样的电信号,也就是0101这样的电信号。它的操作是非常繁琐的,我们可以看到图中由技术工人来进行手工地操纵的。

    这时候呢称为晶体管时代,这时候我们就由晶体管来代替了真空管。晶体管是这样的,由于晶体管是非常小的,那么第二代计算机就变得,它的占地面积就变小了,并且这时候还出现了面向过程的程序设计语言。那么什么是面向过程呢,面向过程就符合我们人去解决问题的一个习惯,它更偏向于解决问题而不是说我们如何一步一步去实现的。这时候也出现了由机器自动管理这样底层硬件的思想,也就是有了我们的操作系统的雏形。

    第三代计算机就是我们的中小规模集成电路。中小规模集成电路,也就是说这样的内存材料,想变得更小,就变成了这个样子。像单片机就是一个中小规模的集成电路,这时候呢高级语言有了迅速的发展,也开始有了分时的操作系统。

    那么随着我们电子技术的发展,到现在呢我们出现了大规模、超大规模的集成电路,也就是说我们的一块芯片上,可以容纳更多个晶体管。这时候呢也出现了新的概念,比如像微处理器这样的一个概念。那么什么是微处理器呢?微处理器就是说我们的集成电路的技术,把计算机的控制单元和算逻运算单元集成到一个芯片上,形成了这样的一个微处理器的芯片。这时候也产生了一些新的概念,比如像并行、流水线、高速缓存、虚拟存储器这样的概念,那么这样的概念也是我们在后面的几个章节当中将要详细讲述的重点。所以我们计算机硬件的发展就是这样的一个历程,我们要注意的呢就是我们每一代计算机它的特点,以及它的一些典型的这样的计算机。这就足以应付我们的选择题了。

    机器语言就是我们的二进制代码,像这样的01序列,就是我们的二进制代码。它是能够被计算机的硬件直接执行的,能够被计算机的硬件直接读懂的。但是呢这样的硬件有一个什么样的坏处就是说它很长,并且很复杂,也很难记忆,很难使用。那么好处是什么呢?好处就是说我们可以直接对硬件机器用这个二进制代码进行编程。编写完的程序呢也能够在实际的机器实际的硬件上直接执行,但是就是说这样的代码很难记忆,很难使用,并且很容易发生错误。如果一旦发生错误也很难找到哪里发生了错误,因为它都是这样的01序列,是非常抽象的。这时候呢为了能够让人读懂,能够让人记忆,所以呢我们就利用汇编语言进行编程,也就是将我们的计算机的机器语言进行符号化,不直接使用这样的01序列了。我们把这样的01序列对应的把它对应成一个助记符,就比如我们可以用LOAD这样的一个助记符来表示0000这样的一个代码。就比如说我们想要表示16号单元的数据和17号单元的数据相加重回17号单元,我们就不需要写一长串的这样的01序列,我们直接就是LOAD A,16。把16号的单元的数据先放到A里面,然后把17号的单元数据放到B里面,然后把A、B和,A、B进行相加,用ADD,ADD就表示相加嘛,把A、B进行相加然后放到C里面,最后再把C重回到17号单元,这样是非常容能够读懂的。并且每一个这样的汇编语言和机器语言都是一一对应的,基本上是一一对应的。那么汇编语言是不能够被计算机直接执行也不能够被计算机直接读懂的,我们需要用汇编程序也就是汇编器把汇编语言转化成机器语言,然后在计算机的硬件上进行执行。但是显然汇编语言也是非常复杂的,它是一条一条的,它的一条机器语言对应一条汇编语言,编写起程序还是很复杂的,那么和人类的自然语言呢也是有着很大的差距的。于是人们就提出了用这个高级语言进行编程,也就像我们现在使用的C、C++、Java,像这样的高级语言就能够和人类的自然语言差不多的,也就是人能够非常容易地使用。就好像a+b赋值给c,像这样是非常能够理解的,那么这时候高级语言是能够被大家容易地使用的。但是高级语言是不能够在计算机的硬件上直接的跑的,不能直接被计算机的硬件所读懂的。那么它想要在计算机的硬件上进行使用,有两种方式。第一种方式呢是先把它变成汇编语言,然后再把汇编语言变成机器语言,然后机器就能够直接执行了。那么这时候就要用编译程序也就是我们的编译器,把高级语言变成汇编语言,然后再由汇编程序把汇编语言变成机器语言来执行。那么第二种方法呢是直接把高级语言变成机器语言,

    也就是用这样的解释程序把高级语言直接变成机器语言然后进行执行。那么就是这就是我们的计算机的编程语言的一个发展的情况。

    那么我们刚才讲到的有一个东西叫做微处理器,微处理器呢就是说我们用集成电路的基础把计算机的控制单元和算逻运算单元呢集成到一个芯片上,像这样的芯片呢就叫做微处理器芯片。那么我们的微处理器也是在不断地向前发展着的,那么我们可以看到这张表格当中微处理器有什么不同呢?首先它的晶体管的数目是不同的,是在不断地变大的。那么最重要的是什么呢?是它的机器字长在不断地变大。那么什么是机器字长呢?机器字长就是计算机一次整数运算所能够处理的二进制的位数那么就叫做机器字长。那么为什么我们要强调一次,那么机器字长是能够影响计算机的运算速度的。这个问题呢我们将在第五节也就是我们的最后一节——计算机的性能指标进行讲解。现在我们简单地来给大家留下这样的一个印象,就是说我们假如我们现在有两个十六位的二进制数要进行加法,如果计算机一次能够处理十六位数,那么我们只要进行一次加法就能够得到我们的结果。但如果我们的机器字长是八位,也就是说我们一次整数运算只能处理八个二进制的位数,那么我们要处理十六位的二进制的加法的话,我们就要进行两次运算。先把高八位进行运算,然后再把低八位进行运算,或者我们先把低八位进行运算再把高八位进行运算。也就是说我们要把这个十六位变成两个八位,然后相应的八位进行加法运算。这时候我们可以看到,有的一次就能够得到我们的结果了,有的两次才能得到我们的结果,甚至要比花费两次的时间更长,所以说我们的机器字长是能够影响我们计算机的处理的速度的。那么我们计算机也就是我们的微型计算机的发展,就是以我们的微处理器的发展,它的这样技术的进步为发展的一个标志的。好,这就是我们的微处理器的发展。

    也就是说如果我现在买一个CPU,和我18个月以后买一个CPU的话,那么后者的性能将是我们现在买的两倍,啊,就是这个样子。那么它可以说明我们的信息技术是不断地向前发展的,并且它的速度是增长的飞快的,是一个指数级别的增长。同时,不仅,集成电路的晶体管的数目在不断地增加,

    我们的半导体存储器的容量也在不断地增加。在1970年,仙童公司生产出了第一个较大容量的半导体存储器,那当时呢是有1KB的。那么随着我们技术的发展,我们的半导体存储器的容量也在不断地增加,从1KB到4KB到1MB,也到现在的1GB,并且它的这个容量还在不断地增加着。也就是从我们的硬件,我们的微处理器,我们的这个晶体管数目,我们的这个存储器的容量,它们都在随着时间不断地向前发展。也就是说我们的现在的计算机的硬件技术是在不断地向前发展着的,我们的这样一个速度是增长的飞快的。

    我们在绪论的时候就已经讲过了,我们这门课的主旨呢我们这一课我们这门课的重点是围绕着电子数字计算机而讲述的。那么什么是模拟什么是数字?学过这个电子的同学们应该有一点的印象就是说模拟是说这个数值是连续的,而这个数字是说这个数值是离散的,是不是连续的。模拟计算机的特点就是说我们的所有的数值都是用连续的量来表示的,运算过程呢也是连续的。那么数字呢就是说它是离散的,它是从算盘的这样的一个基础上发展而来的。算盘我们就知道这个数值,数字它不连续,它的数量的大小啊它是按位运算的,不停地不连续地跳动着来计算的,那么这就是我们的电子数字计算机。那么呢我们的电子数字计算机又会分成通用计算机和专用计算机。那么通用和专用是根据什么来划分的呢?是通过它的效率、速度、价格以及运行的经济性和适应性来划分的。专用机是最有效的、最经济的和最快速的计算机,但是它的适应性是非常差的。我们可以看到它是专用计算机嘛,而通用计算机它的适应性很大,适应性很大呢就牺牲了效率、速度和经济性,啊,所以它这两个是有一定的区别的。那么通用计算机又可以分成巨型机、大型机、中型机、小型机、微型机和单片机。它们的区别就在于体积、简易性、功率损耗、性能指标、数据的存储容量、指令系统的规模以及它的机器价格。一般来说我们的巨型机啊是用于科学计算的,而像这种单片机、这种微型机它就指定规模就比较小,它的结构规模也比较小。那么通用和专用,专用机呢是针对某一个任务设定的计算机,按道理来说它的这个结构是比通用机简单的。目前已经出现了多种型号的这种单片专用机和嵌入式的单片机,用来测试和控制。

    不仅有这样的分类方式,我们还可以有指令流和数据流,从这个方面来进行对计算机的划分。那么第一种呢叫做单指令流、单数据流的计算机,也就是我们经典的冯诺依曼体系结构的计算机,也就是这样的一个计算机。那么什么是冯诺依曼体系结构的计算机呢?在这里大家不需要进行深入的了解,只要知道它是单指令流、单数据流的,也就是一条指令一条数据这样来传输的,我们将在下一节详细地来讲解什么叫做冯诺依曼体系结构的计算机。那么还有一种呢叫做单指令流、多数据流,也就是说我们一条指令、多条数据,比如我们的阵列处理器和我们的向量处理器,像这样的就是我们的单指令流、多数据流的计算机。那么除了这两种我们还可以进行比如说像多指令流、单数据流,那么像这样的计算机它存在吗?显然它是不存在的。怎么可能是多条指令而一条数据啊,这样是不可能的,所以它是不存在的。那么多指令流、多数据流这种呢是存在的,比如像我们的多处理器,就是一种多指令流、多数据流的计算机。还有我们的多计算机,像这种东西呢,就叫做多指令流、多数据流的计算机。好,知道这些概念就可以了,不需要深入了解,也不需要过多太多地纠结。

    什么叫两级分化呢?我们一方面是朝着更微型、更智能、更网络化、更高性能、更多用途这个方面发展。比如像我们的手环,我们这种智能手表,我们这种智能手机在某种程度上来说就是一个计算机。它是朝着我们的更微型化、更高性能,用途呢也在朝着更多的这样的方向发展。同时还有一种,是朝着更巨型化、更高速、更并行处理、更智能化这样的角度发展的。这就是我们两级分化的这种发展方向。

    也就是两个大块,一个是分类一个是发展反向。分类只要记住什么叫电子模拟计算机,什么叫电子数字计算机。电子数字计算机呢又可以分为专用机和通用机。通用机又可以分为大型的、小型的、微型的这种。那么还有一种分类方式呢,是根据它的指令流和数据流进行分类的。只要知道这些概念就可以了,不需要做太多的纠结。你现在只要知道按照指令流和数据流可以分成哪几类就可以了。那么还有一大块内容叫做发展反向,发展方向就是两级分化的发展方向。

    第三节就是计算机硬件的基本组成。

    什么是冯诺依曼计算机,它有哪些特点。上节课讲的就是单指令流、单数据流的这种计算机,也就是冯诺依曼计算机,我们来详细地来讲解一下。冯诺依曼计算机它是不太符合我们现代计算机的这种结构的,现代计算机的组织结构和早期冯诺依曼体系的计算机有哪些不同。最后我们来讲解一下计算机有哪五大功能部件,并且下一节就来围绕着这五大功能部件进行详细地讲述。

    早期的冯诺依曼计算机。现代的计算机都是存储程序结构的计算机,我们的指令、我们的数据、我们的程序都是以二进制的形式存放在计算机当中的。那么这一种,存储程序型的计算机,这种机器,我们就把它称为冯诺依曼计算机,它是由美籍匈牙利科学家冯诺依曼提出的。他提出了这种程序存储的思想,并且把这种思想成功地用在了计算机的设计当中。把根据这种思想设计的计算机,就把它称为冯诺依曼计算机。也就是说我们的把指令以代码的形式事先输入到我们计算机的主存储器当中,然后按照它在存储器的首地址,执行程序第一条指令,然后按照这个程序规定的这个顺序执行其他的指令。你可以是顺序执行的,也可以进行一些跳转,反正是按照这个程序规定的这样一个顺序来依次地执行其他的指令,一直到我们的程序运行结束,也就是这种存储程序的这种设计思想。

    那么它有哪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,它就是使用高级语言的这样一个机器。实际上呢我们的机器不仅在向上发展,还在向下发展。也就是说我们虽然是一条机器语言指令的指令,它虽然是一条,但是我们想要执行它,这个硬件想要执行它还是非常复杂的。比如说我们要把一条语言这样的指令,从存储器当中取出来,再把这样的地址送给存储器告诉存储器进行读这样的指令。然后呢,这条指令取出来以后送给控制器进行译码,译码的结果再控制取操作数,然后呢再完成相应的工作。这样是一条机器语言指令,但是它的这个过程还是十分复杂的。我们在上一节中就已经讲过,这要分成很多步骤的。而有一些步骤呢它是可以同时进行的,但是有一些步骤呢还是不能够同时进行的,是有先后关系的。一条指令要等另一条指令做完之后才能够继续地进行执行。

    所以呢我们就要把一条机器语言的指令进一步地进行细化。我们把每一个时间点上能够执行的操作放到一个微指令当中,它们的执行呢是有先后顺序的,我们把它放到不同的微指令当中呢,通过这样微指令的执行顺序来控制操作之间的执行顺序。那么我们对于这样利用微指令编写微程序来实现机器语言指令的程序员来说,他所面对的指令就是一个微程序机器。

    就是这样的一个微程序机器,也就是由硬件直接执行这样的微指令。这台机器就能够执行微指令、微程序,进而呢实现对机器语言的指令,机器语言的程序的操作运行。那么这一台机器就是一台微程序机器也就是M0,它使用的呢就是我们的微指令系统。

     那不光是这样,我们在中间,在汇编语言和机器语言中间还有一层机器,这一层机器叫做操作系统机器。

    也就是汇编语言的程序员可以利用操作系统提供的功能进行编程。那么操作系统呢就能够管理软硬件资源。所以呢在程序员的眼中我们就可以把计算机系统划分为5个层次,分别是高级语言机器、汇编语言机器、操作系统机器、机器语言机器和微指令系统的微程序机器。那么第一集就是我们的微程序机器层,它是一个实实在在的存在的硬件层。它能够由机器、硬件直接执行微程序。第二集就是我们的传统的机器语言层,它也是实实在在存在的机器。它由微程序解释机器指令系统。第三层就是我们的操作系统层,它由操作系统程序实现。那么操作系统程序是什么呢?是由机器指令和广义指令组成。它呢是一个软件和硬件的一个接口,所以呢这一层也称为混合层。它有一部分呢是由操作系统定义和解释的软件指令,而有一部分呢是机器指令,所以它呢是一层混合层。那么再上面一层呢就是我们的汇编语言层。它呢为用户提供了一种符号化的语言,符号化的助记符,通过这些助记符呢可以编写汇编语言的源程序,所以它不是实实在在的机器层,它是一种虚拟的,它是给用户提供符号化语言的这样的一个机器层。但还是要由这样的汇编语言程序翻译成机器语言程序才能够被硬件直接执行。第五层呢就是我们的高级语言层,它呢是面向用户的,是为了方便用户编写应用程序而设计的。这一层呢是由各种高级语言的编译程序支持而运行的。那么在高级语言层之上还有一些呢应用层。比如一些应用程序啊,像文字处理软件,多媒体软件,那这样呢就不在我们的考虑范围之内了,所以呢我们主要的就是把它分成这5层。通过把没有配备软件的纯硬件系统称为裸机,也就是我们的这个第一层、第二层,就是我们的机器语言和这个微指令的这样的一个系统称为裸机。那么上面,从操作系统到高级语言这样的就是由软件实现的机器我们把它称为虚拟机。因为虚拟机呢只对该层的观察者而存在,它对于这一层的观察者来说,可以通过该层来了解和使用计算机,它不需要关心下层是如何工作的。我只要通过该层的语言来了解和使用计算机就可以了,并且层次之间的关系是非常紧密的,下一层呢是上一层的基础,而上一层呢是下一层的扩展。

    我们可以可以看到,上面的就是由软件而构成的,下面的就是由硬件而构成的。

    那么这一根虚线呢就叫做软硬件接口,它呢并没有一个严格的界限。

    它的上下呢上下两层软件和硬件表示相互依存协同发展的,并且它在逻辑上是等价于,也就是说一个事情你可以由硬件去完全实现,可以由软件去完全实现。但是如果通过硬件实现的话就会造成硬件的非常复杂,它的造价就非常高,设计周期也非常长。而如果你通过软件来实现的话,软件系统就非常的庞大。我们有的时候硬件能够通过一条指令来执行的话,软件要通过多条指令来组合,所以它的运算速度就变得慢了,所以呢我们的软硬件要协调起来,互相依存,协调发展。所以呢我们就把这根线叫做一个软硬件的一个接口。那么这一节的主要内容就是我们的这张图,这张图就是我们这一节的主要内容,所以把这张图记下来就可以了,OK了。

  • 相关阅读:
    SQL Server 错误(待补充)
    PageLayoutControl的基本操作
    C#:MapControl基本操作代码整理
    ArcGis10.0常见错误
    TocControl控件图层无法显示问题
    ArcGIS 10 安装程序及破解文件
    C# 中运行exe程序
    MySQL触发器更新本表数据异常:Can't update table 'tbl' in stored function/trigger because it
    使用ZBar来读取条形码和二维码的方法
    初识MongoDB
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/10830106.html
Copyright © 2011-2022 走看看