提纲
- 计算机的结构
- 机器指令及其执行
- 计算机性能
- 发展史以及可能的拓展,如图灵机,冯诺依曼体系
简单定义
接受输入,根据指令对输入进行处理,产生输出结构的高速电子计算机器。计算机的结构
根据冯诺依曼体系设计的计算机包括5个主要部分,输入设备、输出设备、存储器、运算器、控制器。
控制器、运算器组成CPU,而输入输出设备则统称为I/O设备
- 存储器
存储器的主要功能是存储程序和数据。分为主存储器和辅助存储器两种。主存储器即内存,辅助存储器即现在的硬盘等设备。
主存储器一般用于存放临时数据,指令等,操作系统,程序以及涉及到的变量大多都放在内存中(关机就消失)程序正在被执行时必须要存储在内存中。辅助存储器则是用来长期存放数据,具有持久性(关机不消失)。
内存中包括大量的半导体存储单元,每一个存储单元能够存储一个二进制信息(0/1),称为位。位通常不单独处理,而是以固定数量的位组成组进行处理,这个组称为字。
为了在内存中能很容易找到任何一个字,每一个字都与一个不同的地址关联。地址是用来识别字的数字。通过指明一个特定的字地址,然后给出一条开始进行存储或检索过程的控制命令,就能对字进行访问。
每个字的位数通常称为计算机的字长。字长反映了一台计算机的计算精度,CPU同时处理位数。字长由微处理器对外数据通路的数据总线条数决定。典型的字长范围是从16位到64位。数据通常按单个字、多个字、或字的部分单位进行处理。每访问一次内存,通常只有一个字的数据被读或写。
在执行过程中,程序必须保护在内存中。指令和数据既可以写入内存,也可以在处理器控制下读出。在内存中,能够尽快访问到任意字的位置是很重要的。任何单元在指明了其地址之后就能在固定长度的时间内访问到存储器,叫做随机访问存储器(RAM),访问一个字所需要的时间叫做存储器访问时间。这个时间是固定的,与所访问字的位置无关。一般在几纳秒到100纳秒之间。
- 运算器
计算机的大多数操作(算数逻辑运算)是算术逻辑部件ALU执行的。
考虑一个典型的例子,将内存中的两个数求和,它们被送入处理器中,由ALU执行实际的加法操作,所求得的和可能存储在内存或保留在处理器中以便直接使用。
- I/O(输入/输出)
键盘、鼠标、显示器,打印机,音响等均是I/O设备
- 控制器
存储器、运算器、I/O对信息进行存储与处理,然后执行输入和输出操作。控制器则用于协调这些操作,将控制信号传送到其他设备并检测它的状态
- 总线
指令的执行
首先明确一点,计算机的活动是由指令控制的。为了执行一个给定的任务,要在存储器中存放一个包含连续指令的相应程序。完成特定操作的指令从存储器中逐个取出,然后送入处理器。
先来看看CPU内部结构
MAR:内存地址寄存器,保存着即将访问单元的地址
MDR:内存数据寄存器,保存着即将写入MAR所保存地址的数据或是从MAR所保存地址读出的数据
PC:程序计数器,保存下一条即将被读取和执行的指令的内存地址
IR:指令寄存器,保存当前正在执行的指令
ALU:算数逻辑单元,负责运算
:其他的通用寄存器,用于存放状态,数据等内容,各有不同用处
一条指令的执行过程一般分为取指令,分析指令,获取操作数,运算,传送结果。
来看看一个指令的执行过程
取指令阶段:
- 当PC指向程序开始的第一条指令时,程序开始执行。
- PC中的内容传送到MAR,然后将一条读取控制信息传送到存储器中
- 随后根据MAR中的地址从内存中获取数据(此处为一条指令),放入MDR
- MDR将指令内容传送给IR
- 随后将PC指向更新,进入下一阶段
分析指令阶段:
- 在该阶段将IR中的指令操作码取出后进行译码,分析其指令性质。如指令要求操作数,则寻找操作数地址。
获取操作数:
如果操作数保存在内存中,就要通过它的地址传送给MAR来获取
- 随后开始一个Read周期,这个操作数从内存中读出并送至MDR
- 操作数从MDR送入ALU。重复上述步骤可取出所有操作数
- ALU进行运算
传送结果:
假设结果放入内存
- ALU运算得出结果后,将结果放入MDR
- 再将要存放该数据的地址放入MAR
- 开始Write周期,根据MDR和MAR的内容将数据写入内存
简单的描述一条指令
如:Add LOCA,R0
这条指令将存储器中位置为LOCA的操作数加到处理器中一个寄存器R0的操作数上,然后把所求的和放入寄存器R0中,原来LOCA位置中的内容被保护起来,R0上的值被覆盖。
计算机的性能衡量
衡量计算机的性能好坏最主要的因素是看它执行程序的速度有多快。但是影响的因子却有多个。
- 处理器的时钟
处理器的电路由称为时钟的时序信号控制,时钟定义了规则的时间间隔,称为时钟周期。为了执行一条机器指令,处理器将要被执行的动作分解为一系列基本步骤,这样使每个步骤都可以在一个时钟周期内完成,时钟周期的长度P是影响处理器性能的重要参数,其倒数,表示每秒的周期数。即常说的CPU频率,常用单位GHz,是描述处理器性能的重要参数之一。
- 性能公式
令T为执行使用高级语言编写的程序所需要的时间
编译器生成一个与源程序相符的机器语言目标程序
假设该程序的完整执行需要执行N个机器语言指令,N为实际指令执行数(目标程序中的一个指令可能执行多次)。
假设一条机器指令需要的基本步骤数平均为S,每个步骤都在一个时钟周期内完成
时钟频率为R
程序的执行时间为
性能上表现最直观的就是程序时间T
- 流水线与超标量操作
以上公式假设指令是一个接一个执行的,因此,S是执行一条指令总的基本步骤数。通过使用一种名为流水线的技术,可以叠加连续指令执行的方法减少S。
- 时钟频率
提高时钟频率可以有效的降低时间T,有两种方法。
- 改进集成电路技术,减少完成一个基本步骤所需要的时间。
- 减少在基本步骤中的处理量
最主要的因素还是改进集成电路的技术
- 指令集
简单的指令少量的步骤即可完成,而复杂的指令需要大量的步骤。对于一个只有简单指令的处理器来说,一项给定的程序可能需要执行大量的指令,这导致一个较大的N和较小的S。但是单独的指令执行较多复杂操作,会导致较小的N和较大的S。那种选择的优越并不明显。比较两种选择的关键是流水线的使用。
- 编译器
编译器将高级语言转为机器指令,优秀的编译器能有效的利用处理器的特性减少的值。
- 性能测量
控制变量,选择一套使用实际的应用程序,面向不同的应用领域,根据消耗的时间不同比较性能
指令集,汇编与CPU架构的关系
汇编是机器代码的一种便于理解的表述形式,指令集是固定机器代码的集合。CPU架构则是指令集的硬件实现。同一个指令集可以有多种不同的CPU架构实现,而一个指令集就与汇编对应(不同的指令集汇编是不同的)。编译器干的就是高级语言转为汇编(机器代码)。
发展历程
此处讨论的发展代数是基于构成CPU的基本元件,从电子管到晶体管,到集成电路作为每一代的标志。而实际上的发展历程并不能进行这样简单且清晰的划分,我认为读一读计算机史是很好的。
制造工艺 | 时间 | |
---|---|---|
第一代 | 真空管 | 1945-1955 |
第二代 | 晶体管 | 1955-1965 |
第三代 | 晶体管集成电路 | 1965-1975 |
第四代 | 超大规模集成电路 | 1975-至今 |