一、计算机发展历史
1.1 计算机硬件发展
计算机硬件发展是指计算机硬件技术的不断进步和发展,包括计算机的中央处理器(CPU)、内存、存储器、输入输出设备和通信设备等方面的发展。
第一代计算机硬件发展于20世纪40年代末到50年代初,采用电子管作为主要的元件,体积较大,功耗高,速度较慢。
第二代计算机硬件发展于20世纪50年代到60年代,采用晶体管替代了电子管,体积减小,功耗降低,速度提高。
第三代计算机硬件发展于20世纪60年代到70年代,采用集成电路(IC)技术,将多个晶体管集成在一个芯片上,进一步减小了体积,提高了性能。
第四代计算机硬件发展于20世纪70年代到80年代,采用微处理器技术,将整个中央处理器集成在一个芯片上,进一步提高了性能,同时也使计算机更加便携。
第五代计算机硬件发展于20世纪80年代到90年代,引入了大规模集成电路(LSI)和超大规模集成电路(VLSI)技术,将更多的电路集成在一个芯片上,进一步提高了性能和节约了成本。
随着计算机硬件发展的进步,计算机的速度、存储容量和功能都得到了大幅提升,同时计算机的体积也逐渐缩小,功耗也大幅降低。近年来,计算机硬件发展的重点主要集中在提高计算速度、增加存储容量和改善能源效率等方面,同时也在发展新型的存储技术、处理器架构和通信技术等方面进行研究和探索。
1.2 计算机软件发展
计算机软件发展是随着计算机硬件的进步而不断演化的过程。早期的计算机软件开发较为复杂,需要直接操作硬件。随着高级编程语言的出现,如Fortran、C、C++等,软件开发变得更高效。随着计算机应用领域的拓展,出现了各种各样的软件开发技术和方法。软件工程领域的发展使得软件开发更科学和规范化。近年来,人工智能技术的发展也在推动让计算机软件具备更智能化的能力。总的来说,计算机软件发展旨在提高开发效率、增强功能和提高质量。
1.3 摩尔定律
摩尔定律是英特尔创始人戈登·摩尔在1965年提出的一个观察和预测规律。根据摩尔定律,集成电路上可容纳的晶体管数量每隔约18至24个月会翻倍,而成本却相对不变。换言之,摩尔定律描述了集成电路的集成度每隔一段时间将提高一倍的趋势。
摩尔定律的发展给计算机硬件带来了巨大的革新和进步。由于集成电路上可容纳的晶体管数量不断增加,计算机的处理能力也不断提升,同时成本也相对下降。这使得计算机硬件在过去几十年里出现了巨大的飞跃,从最初的大型机到个人计算机,再到现在的智能手机和云计算等领域。
二、计算机系统层次结构
2.1 计算机系统的组成
众所周知,计算机由有:硬件系统和软件系统所组成。其中,硬件就是指有形的物体,如:键盘、屏幕等。而软件则为:硬件上所运行的各种程序以及相关数据及其文件。
对于计算机的性能,很大程度上使用软件的效率和作用来实现的。但,软件性能又离不开硬件的支持。
所以,对于某一功能来说:如果既可以用硬件来实现,又可以用软件来实现,我们就可以说:软/硬件在逻辑功能上是等价的。
如果,一个功能能用硬件来实现,其成本比较理想且效率高。
2.2 计算机硬件
2.2.1 冯·诺伊曼机基本思想
我们明白,现在计算机的基本结构仍是冯·诺伊曼结构,以此为概念的计算机也被成为冯·诺伊曼机。对此,我们要了解其思想。
1. 构成:由运算器、存储器、控制器、输入设备、输出设备五大部件构成。
2.工作思想:采用“存储程序”和“程序控制”。
注:“存储程序”基本思想:将事先准备好的程序和运行程序的数据以二进制形式送入存储器。一旦程序开始运行,计算机会逐条执行指令,直到程序结束。
“程序控制”基本思想:控制器取出存储器中的指令并顺序执行,控制个部件完成操作,完成数据处理。
3.指令与数据均用二进制代码来表示,且在存储器中存储地位相同,形式无区别,但计算机可以区分它们。
4.指令由操作码和地址码组成。地址码即为操作数的地址,操作码即为操作的类型。
5.冯·诺伊曼机基本方式工作特点:存储程序和顺序执行。
6.工作方式:程序流驱动方式。
2.2.2 功能部件
1. 输入设备:将程序与数据以机器所能识别和接受的形式输入给计算机。常见的输入设备有:鼠标、键盘等。
2. 输出设备:将机器处理的结果以人所能接受的形式或其他机器所能接受的形式进行输出。
3. 存储器:存储程序和数据。存储器分为:主存储器(内存储器 / 内存)和辅助存储器(外存储器 / 外存)。
主存储器是指:CPU能直接访问的存储器。辅助存储器:帮助主存储器存更多的信息、数据,其中的信息必须要调到主存储器才能被CPU所访问。
主存储器存取方式为:按地址存取方式。即,按存储地址方式进行存取。
主存储器由:存储体、地址寄存器(MAR)、数据寄存器(MDR)、时序控制逻辑所构成。
存储体:存放二进制信息。
存储器地址寄存器(MAR):存取访问地址,进行译码后找到其存储单元。
存储器数据寄存器(MDR):用于暂存从存储器的读或写信息。
时序逻辑控制:用于产生存储器操作所需的各种时序信号。
在存储器中我们所存储的均为二进制编码。存储体中由许多存储单元,每个存储单元均可存储一串二进制代码。这段二进制编码我们称之为存储字,所 储字数称之为存储字长。存储字长可为1B(8bit)或其偶数倍。
MAR用于寻址,其位数可反映最多寻址的存储单元数。如:MAR位数为10,最多可寻2^10个存储单元。其长度与PC(程序计数器)长度相同。
MDR的位数通常等于存储字长,一般为字节的2次幂的整数倍。
注:MAR(地址寄存器)与MDR(指令寄存器)虽存于存储体中,但在现代计算机中处于CPU中。
向存储器单元存入或取出信息,都称访问存储器。
4.运算器 :用于信息加工的部件,它对数据进行算术运算和逻辑运算。其中必须具备:累加器(ACC)、乘商寄存器(MQ)、操作数寄存器(X)。
5.控制器:协调计算机各部件的工作,实质就是解释程序。
组成部分:指令寄存器(IR),指令计数器(PC),控制单元(CU)。
2.3 计算机软件
2.3.1 系统软件和应用软件
计算机软件按功能分为:系统软件和应用软件。
系统软件:保证计算机系统高效、正确运行的基础软件。作为系统资源提供给用户使用。
应用软件:解决某个应用领域的各类问题而编制的程序。
系统程序员:编写系统软件的人员。
应用程序员:利用计算机及其所支持的系统软件来解决应用问题的人员。
2.3.2 三个级别语言
1. 机器语言。也就是二进制代码语言。机器语言是计算机唯一能够直接识别和执行的语言。
2.汇编语言。汇编语言可以更加容易人们记忆和理解,使用该语言编写的程序必须经过汇编程序的系统软件的翻译,转变为机器语言程序后,才能在硬件系统上运行。
3.高级语言。高级语言(C/C++、Java)方便程序设计人员写出处理问题的解决方案和解题过程的程序。想要执行需要经过编译转变为汇编语言程序,由汇编操作转变为机器语言程序。或者直接转为机器语言程序。
2.3.2 软件和硬件的逻辑功能等价性
硬件实现的往往是最基本的算术运算和逻辑运算功能,其它功能大多由软件来进行扩充。对于某一个功能,既可用硬件又可用软件实现的,从用户看来没有区别,它们是等价的,这样的等价称之为:软/硬件逻辑功能的等价性。
2.4 计算机系统的层次结构
对于计算机层次结构可用下图来解释:
微程序机器层:这是一个硬件层,机器硬件直接执行微指令。
传统机器语言层:机器层,由微程序解释机器指令系统。
操作系统层:由操作系统实现,由机器指令和广义指令组成。
汇编语言层:汇编程序支持和执行。
高级语言层:由各种编译器支持和执行。
没有配套软件的纯硬件称之为:裸机。
层次之间的关系:下层是上层的基础,上层是下层的扩展。
2.5 计算机系统的工作原理
2.5.1 “存储程序”的工作方式
每条指令的执行过程包括:主存储器器中取指令,对指令进行译码,计算下一条指令的地址、取操作数执行、将结果返回存储器。(具体参考后续文章)
2.5.2 源文件到可执行文件
预处理阶段:就是进行宏替换以及头文件展开,输出.i文件
编译阶段:进行编译生成汇编程序,输出.s文件
汇编阶段:将.s翻译成机器语言指令,生成重定位目标文件.o,该文件为二进制文件
链接阶段:将多个.o文件以及库函数进行合并,生成可执行文件,并保存在磁盘上。
三、计算机的性能指标
主要包括:机器字长,数据通路带宽,主存容量,运算速度,基准程序。
机器字长:计算机所能进行一次定点整数运算所能处理的二进制数据位数。 机器字长一般与通用寄存器的位数和ALU(算术逻辑单元)的宽度相同。
数据通路带宽: 数据总线一次所能并行传输信息的位数。各个子系统通过数据总线连接形成的数据传送路径称之为数据通路。
主存容量:主存储器所能存储信息的最大容量,通常用字节也可用字数乘字长来表示。其中,MAR(存储器地址寄存器),反应存储单元个数,MDR(存储器数据寄存器)反映存储单元字长。
基准程序:进行性能评价的程序,不同基准程序评价结果不同。
运算速度:
吞吐量: 系统在单位时间内处理请求的数量。取决于:信息多快地输入主存。
响应时间: 用户发送一个请求,系统对其做出响应并获得结果的等待时间。通常包括CPU时间(程序运行时间)与等待时间(访存、I/0操作等时间)
CPU时钟周期:机器内部主时钟脉冲信号的宽度,CPU工作的最小时间单位。
时钟脉冲信号: 机器脉冲源发出的脉冲信号经整形和分频后形成的。
主频(CPU时钟频率): 时钟周期的倒数。可理解为:每秒有多少个时钟周期。
CPI(Cycle Per Instruction)(时钟周期)执行一条指令所需的时钟周期数。CPI = 1 / 主频,主频以Hz为单位。
IPS: 每秒执行多少条指令,IPS = 主频 / 平均CPI
CPU执行时间 = CPU 时钟周期数 / 主频 = (指令条数 * CPI)÷ 主频。
CPU性能取决于:主频、CPI和指令条数。
MIPS: 每秒执行多少百万条指令 MIPS = 主频 ÷ (CPI + 10 ^ 6)
FLOPS: 每秒执行多少次浮点运算。
完!