计算机基本工作原理
1946年,第1台通用电子计算机 ENIAC诞生 :用十进制表示信息并运算采用手动编程,通过设置开关和插拔电缆来实现
1946年,普林斯顿高等研究院开始设计“存储程序”计算机,被称为IAS计算机,1951年完成。1949年由英国剑桥大学完成的EDSAC是第一台)
冯·诺依曼结构最重要的思想是“存储程序(Stored-program)”
存储程序方式基本思想:任何要计算机完成的工作都要先被编写成程序,然后将程序和原始数据送入主存并启动执行。一旦程序被启动,计算机应能在不需操作人员干预下,自动完成逐条取出指令和执行指令的任务
冯诺依曼结构基本思想:
采用存储程序工作方式
- 计算机由运算器、控制器、存储器、输入设备、输出设备5个基本部件组成
- 储存器不仅能存放数据,也能存放指令,形式上数据和指令没有区别,但计算机应能区分它们;控制器应能自动执行指令;运算器应能进行算术运算,也能进行逻辑运算;操作人员可以通过输入/输出设备使用计算机
- 计算机内部以二进制形式表示指令和数据;每条指令由操作码和地址码两部分组成,操作码指出操作类型,地址码指出操作数的地址;由一串指令组成程序
冯诺依曼结构计算机模型
现代计算机结构模型
- 主存:存放指令和数据的主存储器
- 算术逻辑部件(ALU):用来进行算术逻辑部件
- 控制部件(CU):自动逐条取出指令并进行译码的部件
- 通用寄存器组(GPRs):临时存放从主存取来的数据或运算的结果
- 标志寄存器:标志信息记录的位置
- 指令寄存器(IR):从主存取来的指令需要临时保存在指令寄存器中
- 程序计数器(PC):在执行当前指令的过程中,自动计算出下一条指令的地址并送到PC中保存
- 中央处理器(CPU):控制部件、运算部件和各类寄存器互连组成的电路
- 主存(单元)地址::主存中每个单元的编号
- 总线:链接不同部件进行信息传输的介质
- 主存地址寄存器(MAR):CPU送到地址线的主存地址应先存放在主存地址寄存器
- 主存数据寄存器(MDR):发送到或从数据线取来的信息存放在主存数据寄存器
CPU访问主存时,需先将主存地址、读/写命令分别送到总线的地址线、控制线,然后通过数据线发送或接收数据
计算机如何工作?
- 程序由指令组成
- 程序在执行前:
- 数据和指令事先存放在存储器中,每条指令和每个数据都有地址,指令按序存放,指令由OP、ADDR字段组成,程序起始地址置PC
- 开始执行程序:
- 第一步:根据PC取指令
- 第二步:指令译码
- 第三步:取操作数
- 第四步:指令执行
- 第五步:回写结果
- 第六步:修改PC的值
- 继续执行下一条指令
指令:用0和1表示的0/1序列,用来指示CPU完成一个特定的原子。包括操作作性质(操作码)源操作数1 或/和 源操作数2 (立即数、寄存器编号、存储地址)目的操作数地址 (寄存器编号、存储地址)
- 取数指令:从主存单元取出数据放到通用寄存器中
- 存数指令:将通用寄存器的内容写入主存单元
- 加法指令 :将两个通用寄存器内容相加后送入结果寄存器
- 传送指令:将一个通用寄存器的内容送到另一个通用寄存器
程序执行过程:
指令的执行阶段都包含若干个微操作,微操作需要相应的控制信号进行控制
CPU中所有微操作都由时钟信号进行定时,是时钟信号的宽度为一个时钟周期
1.2程序的开发与运行
最早期的程序开发过程:用机器语言编写程序,并记录在纸带或卡片上
机器语言:是同特定计算机规定的指令格式而形成的0/1序列
汇编语言:用助记符表示操作码、用标号表示位置、用助记符表示寄存器
- 优点:不会因为增减指令而需要修改其他指令不需记忆指令编码,编写方便、可读性比机器语言强
汇编语言程序由汇编指令构成,汇编指令是机器指令对应的符号
汇编语言编写的汇编源程序必须先转换为机器语言程序,才能被计算机执行
机器级语言:机器语言和汇编语言都是面向机器机构的语言,他们统称为机器级语言
高级编程语言:随着技术的发展,出现了许多高级编程语言
- 它们与具体机器结构无关
- 面向算法描述,比机器级语言描述能力强得多
- 高级语言中一条语句对应几条、几十条甚至几百条指令
- 有“面向过程”和“面向对象”的语言之分
- 处理逻辑分为三种结构:顺序结构、选择结构、循环结构
- 有两种转换方式:“编译”和“解释”
- 编译程序(Complier):将高级语言源程序转换为机器级目标程序,执行时只要启动目标程序即可
- 解释程序(Interpreter ):将高级语言语句逐条翻译成机器指令并立即执行,不生成目标文件。
翻译程序:可以将高级编程语言程序转化为机器语言程序的软件的统称。被翻译的语言和程序分别称为源语言和源程序,翻译生成的语言和程序分别成称为标语言和目标程序
翻译程序分为3类:
- 汇编程序:也称汇编器,将汇编语言源程序翻译称机器语言目标程序
- 解释程序:也称解释器,将源程序中的语句按其执行顺序逐条翻译成机器指令并立即执行
- 编译程序:也称编译器,将高级语言源程序翻译成汇编语言或机器语言目标程序
相邻数组元素交换功能的不同层次语言之间的等价转换过程:
以程序“hello.c”为例的从源程序到可执行文件的运行过程:
1 #include<stdio.h> 2 int main(){ 3 printf("hello,world/n"); 4 }
通过程序编辑软件得到hello.c文件,文件在计算机中以ASCII字符方式存放通常把ASCII码字符或汉字字符表示的文件称为文本文件,源程序文件都是文本文件,是可显示和可读的
hello.c进行预处理、编译、汇编和链接,最终生产可执行目标文件
- 预处理阶段:预处理程序对源程序中字符以#开头的命令进行处理,预处理程序输出的结果还是一个源程序文件,以i为扩展名
- 编译阶段:编译程序对预处理后的源程序进行编译,生产一个汇编语言源程序文件,以s为扩展名。对同一台机器来说,不管何种高级语言,编译转换后的输出结构都是同一种机器语言对应的汇编语言源程序
- 汇编阶段:汇编程序对汇编语言源程序进行汇编,生产一个可重定位目标文件,以a为扩展名。其为二进制文件
- 链接阶段:链接程序将多个可重新定位目标文件和标志函数库中的可重定位目标文件合并成为一个可执行目标文件
Hello程序的数据流动过程:
- shell程序将用户从键盘上输入的每个字符逐一读入CPU寄存器中,然后再保存到主存储器中,在主存的缓存区形成字符串“./hello”(对应红线)。
- 等到接收到【Enter】案件时,shell将调出操作系统内核中相应的服务例程,由内核来加载磁盘上的可执行程序hello到存储器(对应蓝线)。
- 内核加载完可执行文件中的代码及所要处理的数据后,将hello第一条指令的地址送到程序计数器中,CPU永远都是将PC内容作为将要执行的指令的地址,因此,处理器随后开始执行hello下,他将加载到主存的字符串中的每一个字符从主存取到CPU寄存器中,然后将CPU寄存器中的字符送到显示器中显示出来(对应绿线)。
程序被启动执行,必须依靠系统的支持,包括提供人机接口环境(如外壳程序)和内核服务例程(提供对底层硬件操作的系统调用服务例程)
I/O设备:键盘、磁盘和显示器等外部设备简称外设,也称I/O设备
I/O控制器(I/O适配器):外设控制外部设备工作的电子部分
计算机系统的结构层次
语言的发展过程是一个不断抽象的过程,因而,相应的计算机系统也不断由新的层次出现
语言处理系统包括:各种语言处理系统(如编译、汇编、链接)、运行时系统(如库函数、调试、优化等功能)
操作系统包括人机交互界面、提供服务功能的内核例程
计算机层次结构:
指令集体系结构(ISA):软件和硬件接口的一个完整定义
计算机硬件执行机器语言程序的过程就是让其执行一条一条指令的过程。ISA是对指令系统的一种规定或结构规范,具体实现的组织称为微体系结构,简称微架构。
ISA和微体系结构是两个不同层面上的概念,微体系结构是软件不可感知的部分,相同的ISA可能具有不同的微体系结构,微体系结构最终是由逻辑电路实现,每个逻辑电路都是按照特定的器件技术实现的
计算机系统由硬件和软件两部分组成
- 硬件:物理装置的总称
- 软件:运行在软件上的程序和数据以及相关的文档
- 程序:指挥计算机如何操作的一个指令序列
- 数据:指令操作的对象
根据软件用途,一般将软件分成系统软件和应用软件两大类。
系统软件:包括有效、安全地使用和管理计算机以及为开发和运行应用软件而提供地各种软件,介于计算机硬件与应用程序之间,它与具体应用关系不大。
- 系统软件包括操作系统和各类实用程序。
- 操作系统主要用来管理整个计算机系统的资源,包括对它们进行调度、管理、监控和服务等,另外还提供计算机童虎和硬件之间的人机交互界面,并提供对应软件的支持。
- 语言处理系统主要用于提供一个高级语言编程的环境,包括源程序编辑、翻译、调试、链接、装入运行等功能
应用软件:指专门为处理数据、科学计算、事务管理、多媒体处理、工程设计以及过程控制等应用所编写的各类程序。
最终用户:使用应用软件完成特定任务的计算机用户
系统管理员:利用操作系统、数据库管理系统等软件提供的功能对系统进行配置、管理和维护,以建立高效合理的系统环境供计算机用户使用的操作人员。
应用程序员:指使用高级编程语言编制各种应用软件的程序员。
系统程序员:设计和开发系统软件的程序员
计算机性能评价
计算机系统性能的基本指标:吞吐率和响应时间
吞吐率:在单位时间内完成的工作量
宽带:单位时间内传输的信息量
响应时间:从作业提交到作业完成的时间
计算机性能测试
操作系统在对处理器进行调度时,一段时间内往往会让多个程序轮流使用处理器,因此在某个用户执行程序时,可能同时还有其他用户程序和操作系统程序在执行,所以通常情况下,一个程序的执行时间除了程序包含的指令在CPU上执行所用的时间外,还包括磁盘访问时间、输入输出操作所用时间以及操作系统程序运行这个程序所用的额外开销等
用户感觉到的执行时间分为两部分:CPU时间和其他时间
CPU时间:指CPU用于本程序执行的时间。包括:1、用户CPU时间,真正用于运行用户程序代码的时间。2、系统CPU时间,指为了执行用户程序而需要CPU运行操作系统程序的时间
其他时间:指等待I/O操作完成的时间和CPU用于执行其他用户程序的时间
系统性能与CPU性能的区别:系统性能是指系统的相应时间,它与CPU外的其他其他部分也有关系。CPU性能是指用户CPU时间,只包含CPU运行用户程序代码的时间
时钟周期:CPU主脉冲信号宽带
时钟频率:CPU的主频就是CPU中主脉冲信号的时钟频率,是CPU时钟周期的倒数
CPI:表示执行一条指令所需的时钟周期数
用户CPU时间度量式中的时钟周期、指令条数、CPI三个因素是相互制约的。提高时钟频率可能会对CPU结构带来影响,从而使其他性能指标降低。因此,提高时钟频率可能会加快CPU执行程序速度,但不能保证执行速度又相同倍数的提高。指令条数少不代表执行时间段,同样,时钟频率高也不说明执行速度快。在评价计算机性能时,仅考虑单个因素是不全面的,必须三个因素同时考虑
用基准程序进行性能评估
基准程序:专门用来进行性能评价的一组程序,能够很好的反映在运行实际负载时的性能,可以通过在不同机器上运行相同的基准程序来比较在不同程序上的运行时间,从而评测其性能。
执行时间的归一化值 = 参考机器上的执行时间 / 被测机器上的执行时间
Amdahl定律:对某个硬件部分或者软件部分进行更新所带来的系统性能更改程度,取决于该硬件部分或软件部分被使用的频率或其执行时间占总执行时间的比例
改进后的执行时间 = 改进部分执行时间 ÷ 改进部分的改进倍率 + 未改进部分执行时间
整体改进背书 = 1 /(改进部分执行时间比例÷ 改进部分的改进倍数 + 未改进部分执行时间比例)
阿姆达尔定律适用于对特定任务的一部分进行优化的所有情况,可以是硬件优化也可以是软件优化
MIPS:指令速度所用计量单位,含义为平均每秒执行多少百万条指令
峰值MIPS:选取一组指令组合,使得到的平均CPI最小
相对MIPS:根据某个公认的参考机型来定义相应的MIPS值
MIPS反应了机器执行定点指令的速度,但是,用MIPS来对不同机器进行性能比较有时是不准确或是不客观的。因为不同机器指令集不同,而且指令的功能也不同,同样的指令条数完成的功能可能完全不同,不同机器的CPI和时钟周期也不同,同一条指令在不同机器上所用的时间也不同。