冯 · 诺依曼体系结构简介
- 1. 冯 · 诺依曼体系结构介绍
- 1.1 发展背景
- 1.2 经典冯 · 诺依曼计算机三大组成部分体系结构
- 2. 汇编语言对冯 · 诺依曼结构的抽象
- 3. 面向过程语言对冯诺依曼结构的抽象
- 4. 面向对象语言对冯诺依曼结构的抽象
1. 冯 · 诺依曼体系结构介绍
1.1 发展背景
- 电子计算机的问世,奠基人是英国科学家艾伦·麦席森·图灵和美籍匈牙利科学家冯· 诺伊曼。
- 图灵的贡献是建立了图灵机的理论模型,奠定了人工智能的基础。而冯· 诺伊曼则是首先提出了计算机体系结构的设想。
- 1946年美籍匈牙利科学家冯·诺伊曼提出存储程序原理,把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式存储,并确定了存储程序计算机的五大组成部分和基本工作方法。
- 从20世纪初,物理学和电子科学家们就在争论制造可以进行数值计算的计算器应该采用什么样的结构。人们被 十进制 这个人类习惯的计数方法所困扰。直到20世纪30年代中期,美国科学家 冯·诺依曼 就大胆的提出:抛弃十进制,采用二进制作为数字计算机的数制基础。
1.2 经典冯 · 诺依曼计算机三大组成部分体系结构
- 输入输出设备统称IO设备:负责数据和程序的输入输出
- 存储器:存储程序和数据
- 中央处理器:由运算器和控制器组成,运算器负责数据按照程序的处理办法进行计算,控制器控制程序的逻辑
传统教科书把冯 · 诺依曼理论分为五部分:输入设备、输出设备、存储器、运算器、控制器
计算机科学的历史一直围绕的是IO设备、存储器、处理器这三大部件
计算机科学一直围绕着数据、逻辑、界面三大部分演变
- 数据对应存储器
- 逻辑对应处理器
- 界面对应IO设备
特殊提醒:这里的存储器指的是内存,而不是磁盘等外存
2. 汇编语言对冯 · 诺依曼结构的抽象
-
汇编语言是对冯 · 诺依曼结构最为直接的抽象
-
在汇编语言中只有三种操作对象:寄存器、存储器、IO设备
-
寄存器是处理器的主要组成部分,不同种类的寄存器分别承担着控制器和运算器的角色
-
- 逻辑处理寄存器:指令寄存器、段寄存器
-
- 数据运算寄存器:累加寄存器
使用汇编语言实现将两个数相加并输出和
- 从上述程序中可以看到,首先定义了数据段并对存储器中的数据进行赋值,然后定义了代码段
- 在冯诺依曼体系结构中,数据段和代码段被统一放入存储器中,并经过处理器中寄存器的逻辑控制和运算,在需要通过IO设备显示的时候调用INT中断程序输出到屏幕上
- 上述可以看出,汇编程序是对冯诺依曼最原始的抽象,汇编程序把数据、逻辑和显示进行了最原始的封装,使得程序员可以方便的控制存储器、处理器、IO设备,而不是和枯燥的二进制打交道
3. 面向过程语言对冯诺依曼结构的抽象
- 面向过程的语言对数据、逻辑和界面进行更深层次的抽象,使得人类更加方便的控制存储器、处理器、IO设备
- C语言是面向过程语言中最具代表性的语言
用C语言实现两个数的加法
- 从上述代码中,int a,b就是程序的数据段,整个main方法就是程序的代码段,printf方法和scanf方法则是对应着INT中断程序,数据段既可以在代码段中也可以在代码段之外
- C语言通过对存储器、处理器、IO设备更高层次的抽象,使得开发过程中不再需要关心哪些是数据段,哪些是代码段,如何去控制处理器和IO设备
- 只需要在需要的地方进行调用定义即可
4. 面向对象语言对冯诺依曼结构的抽象
- 面向对象语言是对冯诺依曼体系结构的抽象更进化的一个层次
- 面向对象语言使得每个对象的存储、逻辑、显示分开来
- 面向对象语言的出现是对冯诺依曼体系结构的一次回归
用C++语言实现对一个人的抽象
-
在一个类中,定义了描述类属性(数据)的数据段,定义了描述类动作(操作数据)的代码段
-
对象的大小取决于数据段占据内存的大小
9)] -
在一个类中,定义了描述类属性(数据)的数据段,定义了描述类动作(操作数据)的代码段
-
对象的大小取决于数据段占据内存的大小
-
对象中的数据段与代码段是分离的,多个对象共享代码段,独自拥有自己的数据段,通过隐式传递this指针给共享代码段来操作自己的数据