1.1 计算机的组成
我们从计算机系统篇章开始学习计算机的基础知识,了解计算机中相关软件和硬件的名称,掌握计算机基本的运行与组成原理,让我们对计算机有一个比较清晰的基本认识与概念。
1.1.1 计算机的发展史
计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。
在过去的几十年里,计算机科学经历了令人瞩目的飞速发展。经历了电子管、晶体管、集成电路的世代发展,体积越来越小、性能越来越强,为人类带来了巨大的便利和变革,下面我们来回顾计算机的发展历程。
1936年英国数学家阿兰·麦席森·图灵(Alan Mathison Turing)发表了论文“论可计算及其在判定问题中的应用(On Computable Numbers With an Application to the Enstcheidungs Problem)”中提出了一种计算机抽象模型或称为理想中的计算机,利用这种计算机,可以把推理化作一些简单的机械动作。后来人们把图灵提出的这种计算模型现在被大家称为“图灵机”(Turing Machine),图灵机的出现为现代计算机科学奠定了理论基础。
在图灵去世后的12年,美国的计算机协会ACM (Association for Computing Machinery) 确定设立图灵奖,专门奖励那些在计算机科学研究中作出创造性贡献、推动计算机科学技术发展的杰出科学家,它是计算机界最负盛名、最崇高的一个奖项,有“计算机界的诺贝尔奖”之称。
世界上真正意义上的第一台电子数字计算机是由美国物理学家约翰·文森特·阿塔纳索夫 (John Vincent Atanasoff)和当时还是物理系研究生的贝瑞在1937年开始设计,该计算机不可编程,仅仅设计用于求解线性方程组,并在1942年成功进行了测试,该计算机是一台样机,并未完全实现阿塔纳索夫的构想,这台样机被称为阿塔纳索夫-贝瑞计算机(Atanasoff–Berry Computer,通常简称ABC计算机),是目前公认的计算机先驱,ABC计算机为今天大型机和小型机的发展奠定了坚实的基础。
1946年美国物理学家莫奇利(Mauchly,John William)任总设计师,和他的学生约翰·埃克特(John Presper Eckert)基于ABC计算机的设计思想研制成功出了一台真正使用的电子数字计算机,取名埃尼阿克(Electronic Numerical Integrator And Computer,ENIAC,简称ENIAC),ENIAC代表了计算机发展史上的里程碑。莫奇利和他的学生埃克特成功研制ENIAC后就立即为其申请并获得了美国专利,这就导致了ABC于ENIAC之间的“世界上第一台电子数字计算机”头衔之争。不过莫奇利的专利于1973年被美国明尼苏达地区法院宣判取消,因而现在公认的第一台电子计算机为ABC,不过至今为止国内外的不少文献上仍将ENIAC列为“第一台”计算机,在此我们也不做过多的讨论,值得肯定的是无论是ACB还是ENIAC无疑都是人类历史上最伟大的发明之一。
自1946年ENIAC诞生后,计算机随着硬件设备的发展也迎来了飞速进步,大致分为四个阶段,如表所示。
发展阶段 |
时间 |
硬件设备 |
运算速度 |
操作系统 |
特点 |
第一代 |
1946~1956 |
电子管 |
几千~几万 |
无操作系统 |
使用机器语言编程 体积庞大,耗电量大,主要用于军事研究 |
第二代 |
1956~1963 |
晶体管 |
几十万~几百万 |
单道批处理系统 |
主要使用汇编语言 开始使用FORTRAN、GOBOL等语言 体积变小,耗电量降低,可靠性提高 |
第三代 |
1964~1971 |
集成电路 |
几百万~几千万 |
多道批处理系统、分时系统 |
高级语言进一步发展 开始使用A(ALGOL)、B、C等语言 速度快、体积小,开始应用于社会各个领域。 |
第四代 |
1971~至今 |
超大规模集成电路 |
几十亿~几千亿 |
现代操作系统 |
使用各种高级语言,如Java、C/C++、Python等 体积更小,运算速度更快,应用领域更广。 |
1.1.2 冯诺依曼体系结构
在1946年世界上的第一台电子数字计算机ENIAC诞生后,其仍然存在很多问题,ENIAC由各种门电路组成,这些门电路通过组装出一个固定的电路板,操作这台庞然大物需要通过旋钮、开关和接插线不同的位置来表示所要执行的程序,一旦需要修改程序功能,就要重新组装电路板,因此在ENIAC上设置一段程序往往需要花费大量的时间,如果频繁的设置不同的程序会导致机器在很大一部分时间内都处于程序设计状态而无法运行,实用性能大打折扣。
在ENIAC的总体设计已经完成并进入硬件实现阶段时,来自匈牙利犹太裔美籍计算机科学家约翰·冯·诺依曼(John von Neumann)加入了由莫奇利和埃克特主导的ENIAC团队,一起讨论对ENIAC进行改进,他们要解决的核心问题就是将硬件化程序变为可编程,放在存储器中,随意使用,这就是冯.诺依曼计算机体系的开端,这台新机器名叫电子离散变量自动计算机(Electronic Discrete Variable Automatic Computer),简称EDVAC,由于冯.诺依曼对现代计算机技术的突出贡献,因此冯·诺依曼又被称为“现代计算机之父”。
在冯.诺依曼结构(也被称为普林斯顿结构,因为冯诺依曼当时在普林斯顿大学任教授)概念被提出之前,程序和数据是俩个截然不同的概念,数据放在存储器中,而程序作为控制器的一部分(程序是作为硬件的存在),这样的计算机计算效率低,灵活性较差(每一次编程都需要重新组装电路等)。冯.诺依曼结构中,将程序和数据一样看待,将程序编码为数据,然后与数据一同存放在存储器中,这样计算机就可以调用存储器中的程序来处理数据了。
这意味着,无论什么程序,最终都是会转换为数据的形式存储在存储器中,要执行相应的程序只需要从存储器中依次取出指令、执行,冯.诺依曼结构减少了硬件的连接,这种设计思想导致了硬件和软件的分离,即硬件设计和程序设计可以分开执行。
冯.诺依曼结构消除了原始计算机体系中,只能依靠硬件控制程序的状况(当时程序作为控制器的一部分,作为硬件存在),它将程序编码存储在存储器中,实现了可编程的计算机功能。
冯.诺依曼计算机体系的主要特点如下:
- 构成程序的指令和存储的数据均采用二进制表示
- 指令和数据都存放在主(内)存储器中,计算机在工作时按地址访问并执行
- 指令由操作码和地址码组成,每一段指令都有其地址
- 计算机硬件由运算器、控制器、存储器、输入设备、输出设备这五大部分组成
- 机器以运算器为中心,输入/输出设备与存储器之间的数据传送通过运算器完成
冯·诺依曼结构以运算器为中心,输入/输出设备与存储器之前的数据传输都需要经过运算器,如图所示。
在冯诺依曼结构中,控制器与其他4个部件都通过控制线与反馈线相连接,控制器通过控制线发送信号控制4个部件进行工作,这些部件通过反馈线将信息反馈给控制器。控制器将用户通过输入设备输入的信息交由运算器进行运算,存储器存储输入设备输入的数据和要控制器要执行的指令,在控制的控制下也可以将存储器存储的信息交由输出设备进行输出。这样一次信息的运算(交互)在5个部件的协同配合下完成了。
但是这样以运算器为中心的结构中也存在一定的问题,那就是即使不需要运算器参与的输入/输出操作时运算器也会参与进来运算,浪费了运算器性能。
现代计算机一般以存储器为中心,这样输入/输出设备就可以直接与存储器交换数据,提高整体效率,如图所示。
1.1.3 计算机系统组成
计算机系统分为硬件系统和软件系统两大类,如图所示:
现代计算机硬件的五大部分:
- 控制器:计算机的指挥系统。控制器通过地址访问存储器,从存储器中取出指令,经译码器分析后,根据指令分析结果产生相应的操作控制信号作用于其他部件,使得各部件在控制器控制下有条不紊地协调工作。
- 运算器:实现算术运算和逻辑运算的部件。
- 存储器:是计算机用来存放所有数据和程序的记忆部件。它的基本功能是按指定的地址存(写)入或者取(读)出信息。 计算机中的存储器可分成两大类:一类是内存储器,简称内存或主存;另一类是外存储器(辅助存储器),简称外存或辅存。 存储器由若干个存储单元组成,每个存储单元都有一个地址,计算机通过地址对存储单元进行读写。一个存储器所包含的字节数称为存储容量,单位有B、KB、MB、GB、TB等。
- 输入设备:是向计算机中输入信息(程序、数据、声音、文字、图形、图像等)的设备。常见的输入设备有:键盘、鼠标、图形扫描仪、触摸屏、条形码输入器、光笔等。 外存储器也是一种输入设备。
- 输出设备:主要有显示器、打印机和绘图仪等。外存储器也当作一种输出设备。
控制器+运算器=CPU,CPU、内存(主存储器)以及其他I/O设备都由一条系统总线(bus)连接起来并通过总线与其他设备通信,简单示意图如图所示:
关于一些主要部件的描述如下:
- CPU:类似于人的大脑,负责控制全身和运算。
- 主存:主存(内存)是人的记忆,负责临时存储。
- 输入设备(Input):是耳朵或眼睛或嘴巴,负责接收外部的信息存入内存,如键盘、鼠标、话筒、写字板等用于接收外部信息指令的设备。
- 输出设备(Output):是你的脸部(表情)或者屁股,负责经过处理后输出的结果,如显示器、打印机等设备。
以上所有的设备都通过总线连接,总线相当于人的神经。现代计算机的结构更复杂,包括多重总线。
下面我们可以通过一个实际案例来模拟一些计算机的工作原理。
上课开始,老师讲课,学生听课,老师是程序员,学生是计算机,学生的器官都是计算机各部分组成。
(1)你通过耳朵接收老师讲的知识(输入)。
(2)通过自己的神经,将接收的数据存入自己的内存/短期记忆(总线、内存)。
(3)光听不行,你还需要反应(处理)老师讲的知识,于是你的大脑(cpu)从短期记忆里取出知识(指令),分析知识(指令),然后学习知识/执行指令 (cpu取指、分析、执行)。
(4)你通过作业或者说话输出你学到的结果。
(5)你想要永久将知识保存下来,只能拿出一个笔记本,把刚刚学会的知识都写到本子上,这个本子就是硬盘(磁盘)。
综合上面所说的,我们知道其实计算机是由五大单元:CPU(控制单元、算术逻辑单元)、主存储器、输入单元、输出单元构成的。也可以说CPU+主存储器+输入输出构成了电子计算机的三大核心组件,如下:
(1)控制单元+算数逻辑单元=CPU 。
(2)主存储器,即内存。
(3)输入单元Input+输出单元Output=IO设备。
1.1.4 操作系统的概述
编程语言语言是人们用于和计算机沟通的介质,语言有英语、法语、俄罗斯语等,仅我们国家就有汉语、藏语、满语等,但不管是什么语言,都是用来沟通的介质。其表达意思的本质都是一样的,程序员编程的本质就是让计算机去工作,而编程语言就是程序员与计算机沟通的介质程序员要想让计算机工作,必须知道计算机能干什么,怎么干的,这也就是我们必须学习计算机基础的原因。
程序员用编程语言写程序,最终开发出的结果就是一个软件 ,这些软件必须运行在操作系统之上,你肯定会问:为何要有操作系统呢?
没错,远古时代的程序员确实是在没有操作系统的环境下,用编程语言直接操作硬件来编程的,你可能觉得这没有问题,但其实问题是相当严重的,因为此时你必须掌握如何操作硬件的所有具体细节,比如如何具体操作硬盘(现在你得把硬盘拆开,然后你能看见的所有的东西,你都得研究明白,因为你编程时要用到它),这就严重影响了开发的效率。
Tips:操作系统的出现就是运行于硬件之上,来控制硬件的,我们开发时,只需要调用操作系统为我们提供的简单而优雅的接口就可以了。
所以要运行一个我们开发的软件需要有硬件的支持、操作系统的支持、编写成功的软件;其中软件是运行在操作系统之上的。
操作系统(Operating System,简称OS)是一个管理电脑硬件与软件资源的一款系统软件。是控制其他程序运行、管理系统资源并为用户提供操作界面的系统软件的集合。它负责直接管理硬件资源和软件资源,如内存、处理器、磁盘空间、文件和用户输入/输出设备等。操作系统是用户和计算机硬件之间的接口。
计算机软件都运行在操作系统之上,一款软件在运行期间需要调用计算机的硬件设备时也是通过调用操作系统提供的接口来操作硬件,这样操作系统就帮我们屏蔽掉了非常多的一些复杂操作。因此操作系统不仅需要与软件交互也要与硬件交互,操作系统同时管理着我们的软件和硬件的运行,我们打开windows的任务管理器可以看到当前windows操作系统对这台计算机的管理状况。
综上,操作系统的特点如下:
- 统一管理计算机资源:包括管理硬件、软件等资源。
- 硬件管理:CPU资源调度、内存管理、IO设备管理等。
- 软件管理:进程/线程资源调度、文件管理、权限管理等。
- 实现了对计算机资源的抽象:为IO设备管理提供读写接口,文件管理提供操作文件接口等。
- 提供了用户与计算机之间的接口:提供了GUI(图形用户界面)、命令形式等为上层提供方便易用的服务。
有了操作系统我们可以完成一些最基本最原始的功能,例如文件管理(创建/删除/拷贝文件等)、进程管理(运行程序/关闭进程等)等,但更复杂的功能我们还需要借助一些应用软件来完成,所以一般我们的计算机在安装好操作系统之后,内部会预装非常多的应用软件,例如音视频播放器、文本编辑器、计算器、浏览器等,这些软件在运行过程中需要调用一系列硬件也都是借助操作系统来调用的。一款操作系统提供的功能不可能满足所有的用户,因此市面上出现了各式各样的软件,例如QQ、微信、各种娱乐软件、办公软件等。