P3 1.2.冯诺依曼的结构主要思想
第一台通用电子计算机的诞生
1946年,第一题爱通用电子计算机ENIAC诞生
由电子真空管组成的
Electronic Numerical Integrator And Computer
电子数字积分计算机
采用手动编程
1944年,冯诺依曼参加原子弹的研制工作
1944年,
冯诺依曼被戈尔斯坦介绍加入ENIAC研制组
101页的总结报告:存储程序通用电子计算机
1946年,普林斯段高等研究院开始设计存储程序的计算机,被称为IAS计算机(1951年才完成的,并不是第一台存储程序的计算机,1949年由英国剑桥大学完成的EDSAC是第一台
在那个报告当中提出的计算机结构被称为是冯诺依曼结构
最重要的思想是存储程序(Stored -program)
任何计算机要完成的工作都要先变成程序,然后后将程序和原始数据送入主存当中并气动执行,一旦程序被启动,计算机应该你能够在不需要工作人员的干预下,自动完成逐条取出指令和执行指令的任务
完全是自动完成的
冯诺依曼计算机也称为冯诺依曼机器
几乎现代所有的通用计算机大多数采用冯诺依曼结构
r任何要计算机完成的工作都要先编写成程序,然后将程序和原始数据送入主存并且启动执行,一旦程序被启动,计算机也应该能在不需要操作人员干预下,自动完成逐条取出执行和执行指令的任务。
应该有主存来存放数据,还有程序
应该有一个自动逐条取出指令的部件
应该还有具体执行指令的部件
程序是由指令构成的
输入设备-》存储器-》输出设备-》运算结果输出
存储器将指令送到控制器当中译码
存储器当中的数据送到运算器,
早期,部件之间采用分散的方式
现在,部件之间大多采用总线方式
主要思想
1.计算机应该是由运算器,控制器,输入设备,输出设备,存储器
2.各个基本部件的功能
存储器不仅能够存放数据,还能够存放指令,形式上两者没有区别,但是计算机应该能够区分数据还是指令
控制器应该能够自动取出指令来执行
运算器应该能够进行加,键乘除算术运算,还有逻辑预算,附加运算
操作人员可以通过输入设备,输出设备和主机进行通信
3.内部以二进制表示指令和数据,每条指令由操作码和地址码两部分组成的,操作码指出操作类型,地址码指出操作数的地址,由一串指令组成的程序。
4.采用存储程序的工作方式
现代计算机的结构模型
冯。诺依曼计算机结构的特点
存储器
控制器
现代计算机当中也有控制器
算术逻辑部件
算术运算还要逻辑部件
P26ipad课件的图的流程的讲解
ALU里面的操作数可以是寄存器的操作数还可以是存储器当中的操作数,寄存器还可以总线送到存储器当中,运算的结果除了之间产生数据意外,还有标志信息,送到控制器当中影响后续程序的执行,PC程序计数器,指令的地址先送到MAR当中,然后通过总线送到了存储器,指令的地址是在PC当中送进来了,取的是操作数的地址也要送到MAR,操作数的地址可以在寄存器当中,寄存器称为通用寄存器,GPRs通用寄存器组。指令取出来送到控制器当中执行的时候先放到寄存器当中这个寄存器就叫做指令寄存器,MDR送到指令寄存器IR,操作码字段送到控制器当中进行译码。CPU和主存之间是通过总线相连的,主存是一些内存条,有很多芯片插在主机板上擦条里面,
运算器,控制器,还有存储器组成的,主机和外部世界的连接通过输入设备和输出设备连接,MAR和MDR是和总线相连的,属于总线接口部件,CPU要到存储器去取指令,必须要把指令的地址送到存储器当中,并且把读信号送到控制器线上,读出来的信息通过数据线送到MDR当中,指令的话就送到了指令的寄存器当中数据的话就送到寄存器当中,然后送到ALU当中进行演算,或者是MDR的数据直接送到ALU当中进行演算,
CPU中央处理器,PC:程序计数器,MAR:存储器地址寄存器
ALU:算术逻辑部件,,IR:指令寄存器,MDR:存储器数据寄存器
GPRs:通用寄存器组(由若干通用寄存器组成,早期就是累加器)
PC程序及初期,MAR:存储器地址寄存器
指令当中的需要的信息
操作性质
源操作数1,2(立即数,寄存器编号,存储地址)
目的操作数地址(寄存器编号,存储地址)
存储地址描述和操作数的数据结构有关。
P5
最早的程序开发过程
用机器语言编写程序,并记录在纸袋或者卡片上
输入:按钮,开发
输出:指示灯,
所有的信息都是0/1序列
如果在第四条指令前面加入一条指令,则需要重新计算机地址码,
用符号表示跳转的位置和变量的位置,是否简化了问题?
用助记符表示操作码
用标号来表示位置
用助记符表示寄存器
需要将汇编语言转换成机器语言!
汇编语言程序是由汇编指令构成的
用助记符和标号来表示的指令
指令包含操作码和操作数或者其地址码
只能够描述:取,两个数加,
汇编语言编写复杂程序是怎样的情形?
程序会很长,很长,需要描述的细节非常的多!
机器语言和汇编语言都是面向机器结构的语言,所以他们统称为机器级语言。
随着技术的发展,出现了许多高级编程的语言
他们和具体的机器结构是无关的,
面向算法的描述,比机器语言描述的能力要强得多
处理逻辑:
顺序结构,选择结构,循环结构
有两种转换:
1.编译和解释
编译程序:将高级语言源程序转换成为机器级目标程序,执行的时候只要启动目标程序就可以了
Complier
解释程序:将高级语言语句逐条翻译成为机器指令并立即执行的,不生成目标文件。
P6:
一个典型的程序的转换处理的过程
预处理-》编译-》汇编-》连接
./hello
hello,world
数据经常在各个存储部件之间传递,所以现代计算机大多采用缓存技术
数据经常在各个存储部件之间传送,所以说现代计算机大多采用缓存技术
高级语言源程序-》编译程序-》汇编语言源程序-》汇编程序-》机器语言目标程序-》指令译码器-》控制信号
直接输入指令和数据,启动后把第一条指令地址送PC开始执行
需要编辑器编写程序
需要一套翻译转换软件处理各类源程序
编译方式:预处理程序,编译器,汇编器,连接器
解释方式:解释程序
语言处理程序
+语言的运行时候的系统-》语言处理系统
需要一个可以执行程序的界面环境
GUI方式:图形用户界面
CUI方式:命令行用户界面
人机接口+操作系统操作系统内核
指令集体系结构
计算机硬件
支撑程序开发和运行的环境由系统软件提供的,最重要的系统软件是操作系统,和语言处理系统
语言处理系统运行在操作系统之上,操作系统利用指令管理硬件
P7:
最早的计算机用机器语言编程的
机器语言称为第一代程序设计语言(First generation programming language,1GL)
应用程序,指令集体系结构,计算机硬件
后来用汇编语言编程
汇编计称为第二代程序设计语言
现代计算机用高级语言编程
第三代程序设计语言(3GL)为过程式语言,编码的时候需要描述实现过程,即如何做
第四代程序设计计:做什么,非过程化的语言,
应用程序,语言处理系统,操作系统,指令集体系结构,计算机硬件
语言的发展是一个不断的抽象的过程,因而,相应的计算机系统也不断的有新的层次出现
语言处理系统包括:各种语言处理程序(如编译,汇编,连接),运行时候的系统(如库函数,调试,优化等功能)
操作系统包括:人机交互界面,提供服务功能的内核历程
P8:最终用户解决的问题转换成为算法,用高级语言程序进行描述,操作系统对底层的东西抽象的功能,微体系结构,功能部件,电路,器件
指令集体系结构
算法,程序编写还取决于语言处理系统,操作系统,ISA,微体系结构
功能转换:上层对下层的抽象下层是上层的实现,底层为上层提供支撑环境。
最终用户工作在由应用程序提供的最上面的抽象层
系统管理员工作在由操作系统提供的抽象层
应用程序员工作在由语言处理系统(主要是编译器和汇编器)的抽象
语言处理系统建立在操作系统之上的
系统程序员(实现系统软件)工作在ISA层次,必须对ISA非常的了解
编译器和汇编器的目标程序是由机器级代码组成的
操作系统通过指令直接对硬件进行编程控制
ISA处于软件和硬件的交界面的接口
ISA是指指令集体系结构,有的时候简称为指令系统
ISA是一种规约,他规定了如何使用硬件
可执行的指令的集合,包括指令格式,操作种类,以及每种操作对应的操作数的相应的规定
指令可以接受的操作数的类型;
操作数所能够存放的寄存器组的结构,包括每个寄存器的名称,编号还有长度以及用途
操作系统所能够存放的存储空间的大小还有编制方式
指令获取操作数的方式,即寻址方式
指令执行过程的控制方式,包括了程序计数器PC,条件码定义
没有了他,软件无法使用计算机硬件
ISA和计算机组成是何种关系
不同的ISA规定的指令集是不同的,如IA-32,MIPS,ARM等
同一种ISA可以有不同的计算机组成,如乘法指令可以用ALU或者乘法器实现
P9
后PC时代计算机教学面临的挑战
后PC时代的几个特征
计算资源多样化i/o设备无处不在,PMD与PC等共存
软件和硬件协同设计(硬件,OS和比阿尼器之间的关联更加密切)
对于应用程序的要求更高
编写高效程序必须了解计算机的底层结构
必须掌握并行程序的设计的技术和工具
应用问题更加复杂,领域更加广泛
气象,生物,医药,地址,天文等领域
物联网,移动设备,信息家电
大规模,分布式,多粒度并行
并行成为重要的主体,
P9:
本课程的目标
IA-32+LINUX+c+gcc平台(开元项目平台)
int sum(it a[].unsigned len)
{
int i,sum-0;
for(int i=0;i<=len-1;i++)
sum+=a[i]
return sum;
}
int main()
{
int a[1]={100};
int sum;
sum=sum(a,0);
printf("%d",sum);
}
return sum;
问题(应用)
算法
程序(语言)
指令集提携结构(ISA)
微体系结构
电路
晶体管
使得计算机是如何生成和运行可执行文件的。
C语言程序设计层
数据的机器级表示,运算,
指令集体系结构(ISA,)和汇编层
微体系结构以及硬件层
CPU通用结构
层次结构存储系统
操作系统
程序执行(存储器访问)
三个祖逖:
表示(Representation)
不同的数据类型(包括带符号整数)
第一部分:
可执行文件的生成(表示和转换)
计算机系统概述
数据的机器级表示和处理
P10
转换的概念在数据表示当中的反映
感觉媒体信息(声音动画,文本等,能够感知的感觉媒体)
树,链表等结构化数据描述
int,float,array,struc等类型
指令指定寄存器或者内存当中的数据
ALU当中的运算寄存器或者内存当中的数据
逻辑门
位信息
int float,array,struct等类型
指令指定寄存器或者内存当中的数据
ALU当中的运算或者总线上传输的数据
逻辑门
位信息
二进制编码表示的各种数据
数组,结构,字符串等结构化数据
二进制数
整数(定点数)
实数(浮点数)
二进制编码的十进制数
非数值型数据
逻辑数据
编码字符
用二进制编码的原因
制造两个稳定态的物理器件容易(电位高、低,脉冲有、无,正、负极)
二进制编码,技术,运算规则的简单
正好与逻辑命题真/假对应,便于逻辑运算
可以方便的用逻辑电路实现算术运算
机器数:用0和1编码的计算机内部的0/1序列
真值:真正的值
数值数据表示的三要素
进位计数制
定点,浮点表示
如何用二进制编码
20137564的值是多少?
不知道
定点整数
定点小数
定点数的编码(解决正负号)
原码,补码
在R进制数字系统当中,应该采用R个基本符号
P12
数值数据的表示
数值数据表示的三要素
进位计数制
定,浮点表示
如何用二进制编码
进位计数制
十进制,二进制,十六进制
定/浮点表示(解决小数点的问题)
定点整数,定点小数
浮点数,(可以用一个定点小数和一个定点整数来表示)
点定数的编码(解决正负号的问题)
原码,补码,易码,反码(很少使用)
原码(Sign and Magnitude)表示
0表示不唯一,所以不利于程序员的编程
加,减运算方式不同意,
什么是移码表示?
将每一个数值加上一个偏置常数
0的移码表示是唯一的
当bias为2^n-1的时候,移码和补码仅仅第一位不同
为什么用移码来表示指数的呢?(阶码)
便于浮点数加减运算的时候的对接操作
P14: