计算机原理
计算机的基本组成及其工作原理
1.1 计算机系统的组成
计算机系统是由硬件系统和软件系统两大部分组成。
计算机硬件是构成计算机系统各功能部件的集合。 是由电子、机械和光电元件组成的各种计算机部件和设备的总称,是计算机完成各项工作的物质基础。计算机硬件是看得见、摸得着的,实实在在存在的物理实体。
计算机软件是指与计算机系统操作有关的各种程序以及任何与之相关的文档和数据的集合。其中程序是用程序设计语言描述的适合计算机执行的语句指令序列。
没有安装任何软件的计算机通常称为“裸机”,裸机是无法工作的。如果计算机硬件脱离了计算机软件,那么它就成为了一台无用的机器。如果计算机软件脱离了计算机的硬件就失去了它运行的物质基础;所以说二者相互依存,缺一不可,共同构成一个完整的计算机系统。
现代计算机,大部分都是基于冯诺依曼体系结构,而我们这里谈论的也是此问前提。冯诺依曼的核心是:存储程序,顺序执行。所以不管计算机如何发展,基本原理是相同的。计算机程序实际上是告诉计算机做什么。
天才冯诺依曼
约翰·冯·诺依曼
John von Neumann
世界上第一台通用计算机“ENIAC”于1946年2月14日在美国宾夕法尼亚大学诞生。发明人是美国人莫克利(JohnW.Mauchly)和艾克特(J.PresperEckert)。 [1]
美国国防部用它来进行弹道计算 ENIAC以电子管作为元器件,所以又被称为电子管计算机,是计算机的第一代。电子管计算机由于使用的电子管体积很大,耗电量大,易发热,因而工作的时间不能太长。
ENIAC长30.48米,宽1米,占地面积约170平方米,30个操作台,约相当于10间普通房间的大小,重达30吨,耗电量150千瓦,造价48万美元。它包含了17,468真空管7,200水晶二极管, 1,500 中转, 70,000电阻器, 10,000电容器,1500继电器,6000多个开关,每秒执行5000次加法或400次乘法,是继电器计算机的1000倍、手工计算的20万倍。
1.2 计算机硬件系统的基本组成及工作原理
⑴ 计算机硬件由五个基本部分组成:运算器、控制器、存储器、输入设备和输出设备。
⑵ 计算机内部采用二进制来表示程序和数据。
⑶ 采用“存储程序”的方式,将程序和数据放入同一个存储器中(内存储器),计算机能够自动高速地从存储器中取出指令加以执行。
可以说计算机硬件的五大部件中每一个部件都有相对独立的功能,分别完成各自不同的工作。如图1-7所示,五大部件实际上是在控制器的控制下协调统一地工作。首先,把表示计算步骤的程序和计算中需要的原始数据,在控制器输入命令的控制下,通过输入设备送入计算机的存储器存储。其次当计算开始时,在取指令作用下把程序指令逐条送入控制器。控制器对指令进行译码,并根据指令的操作要求向存储器和运算器发出存储、取数命令和运算命令,经过运算器计算并把结果存放在存储器内。在控制器的取数和输出命令作用下,通过输出设备输出计算结果。
软件系统
系统软件 应用软件
CPU指令
因为在计算机中指令和数据都用二进制来表示,也就是说它只认识0和1这样的数字。最早期的计算机程序通过在纸带上打洞来人工操操作的方式来模拟0和1,根据不同的组合来完成一些操作。后来直接通过直0和1编程程序,这种称之为机器语言。这里就会有一个疑问,计算机怎么知道你这些组合的意思?
于是就出现了CPU指令,我们现在买CPU都会听到指令集这一说。CPU指令其实就对应了我们这里说的0和1的一些组合。每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统。有了CPU指令集的文档你就可以通过这个编写CPU认识的机器代码了。所以对于不同CPU来说可能会有不同的机器码。
指令集是存储在CPU内部,对CPU运算进行指导和优化的硬程序。
cpu主要性能指标
内存(RAM)主要性能指标
计算机如何存储数据
二进制与10进制
bit Byte KB MB GB
计算机编程语言
机器语言(Machine Language)是直接由机器指令(二进制)构成的,因此由它编写的计算机程序不需要翻译就可直接被计算机系统识别并运行。这种由二进制代码指令编写的程序最大的优点是执行速度快、效率高,同时也存在着严重的缺点:机器语言很难掌握,编程繁琐、可读性差、易出错,并且依赖于具体的机器,通用性差。
汇编语言(Assemble Language)采用一定的助记符号表示机器语言中的指令和数据,是符号化了的机器语言,也称作“符号语言”。汇编语言程序指令的操作码和操作数全都用符号表示,大大方便了记忆,但用助记符号表示的汇编语言,它与机器语言归根到底是一一对应的关系,都依赖于具体的计算机,因此都是低级语言。同样具备机器语言的缺点,如:缺乏通用性、繁琐、易出错等),只是程度上不同罢了。用这种语言编写的程序(汇编程序)不能在计算机上直接运行,必须首先被一种称之为汇编程序的系统程序“翻译”成机器语言程序,才能由计算机执行。任何一种计算机都配有只适用于自己的汇编程序(Assembler)。
高级语言
汇编语言的出现大大提高了编程效率,但是有一个问题就是不同CPU的指令集可能不同,这样就需要为不同的CPU编写不同的汇编程序。于是又出现了高级语言比如C,或者是后来的C++,JAVA,C#。 高级语言把多条汇编指令合成成为了一个表达式,并且去除了许多操作细节(比如堆栈操作,寄存器操作),而是以一种更直观的方式来编写程序,而面向对象的语言的出现使得程序编写更加符合我们的思维方式。我们不必把尽力放到低层的细节上,而更多的关注程序的本身的逻辑的实现。
高级语言 又有 编译型语言 和解释性语言之分