冯・诺伊曼计算机——一个程序员的基本修养(1)

一,基本概念
现代计算机之父-冯·诺依曼在1945年重新定义了计算机的架构,被称为“冯·诺依曼架构”,并开辟了现代计算机时代。人类沿用此架构至今。

二,冯·诺伊曼计算机的组成结构

  • 输入/输出设备(IO设备):人与计算机之间的桥梁。鼠标,扫描仪;显示器,打印机。输出设备:数字信号转换为光信号。
  • 内部存储器(Memory):外存与CPU进行沟通的桥梁,计算机里面的所有程序的运行都是在内存中进行的,又称主存储器。其作用是暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行,操作系统就会把需要运算的数据从内存调到CPU中进行运算,运算完成后,再将结果传送出来。就好比编辑文档的时候,敲字的时候是暂时存储到内存中,保存之后才会存储到外村中。
  • 运算器(arithmetic unit):计算机中执行各种算术和逻辑运算操作的部件。运算器的基本操作:加,减,乘,除四则运算,与,或,非,异或等逻辑操作以及移位,比较和传送等操作。也称为算术逻辑部件。是组成CPU的核心部分。
  • 控制器(controller):电脑的神经中枢,指挥电脑中各个部件自动协调工作。完成协调和指挥整个计算机系统的操作。主要分为逻辑控制器和微程序控制器
  • 外部存储器:断电后依然可以保存数据。

计算机运行时,运算器的操作和操作种类由控制器决定。运算器处理的数据来自与存储器,处理数据后通常送回存储器,或暂时寄存在运算器中。

冯・诺伊曼计算机——一个程序员的基本修养(1)_第1张图片
冯・诺伊曼计算机——一个程序员的基本修养(1)_第2张图片
三,冯·诺依曼瓶颈
1.首先理解一下数据和指令
指令和数据均用二进制表示,同地位存放在存储器中,按地址寻访。
指令由操作码(操作的性质)和地址码(操作数在存储器中的位置)组成,按顺序存放。
由于数据和指令无差别存放在存储器中,当CPU(控制器)从存储器中将某地址的数据取出来后,就要从以下两点进行区分应该放在指令寄存器还是数据寄存器。
a.时间:在取指周期(或取值微指令)取出的为指令,指令执行周期取出/写入的为数据。
b.空间(地址来源):由PC提供存储单元地址的取出的是指令,由指令地址码部分提供存储单元地址的取出就是操作数。

内存取出指令送给控制器,而指令执行周期,从内存中取出的数据送给运算器,往内存写入的 数据也来自于运算器。

2.瓶颈
冯诺依曼架构不区分数据和指令,将两者放在同一内存中,相对的哈佛结构将两者分别存储到指令存储器和数据存储器。
取指令和取数据不能同时进行,否则会引起访存的混乱。但是发展到今天,CPU的运算速度已经远远超过了访存的速度,因此CPU必须浪费时间等数据,而哈佛架构由于指令和数据是分开的,等数据的同时可以预取指令,CPU的利用率更高。
由于指令与数据存放在同一内存带来的CPU利用率(吞吐率)的限制,在内存容量指数级提升以后,CPU 和内存之间的数据传输带宽成为了瓶颈,即冯诺依曼瓶颈。

四,中央处理器(CPU)
读取指令,解释指令,执行指令。
主要包括两部分,控制器和运算器

五,内存分配

原文链接:https://blog.csdn.net/jirryzhang/article/details/79518408

一个由C/C++编译的程序占用的内存分为以下几个部分

1、内存栈区(stack):程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。
其操作方式类似于数据结构中的栈。

2、内存堆区(heap):在内存开辟另一块存储区域。存放new/malloc出来的对象,一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。
注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。

3、全局区(静态区)(static):编译器编译时即分配内存。存放全局变量和静态变量。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。
程序结束后由系统释放

4、文字常量区 :常量字符串就是放在这里的。 程序结束后由系统释放。

5、程序代码区—存放函数体的二进制代码。

注意:静态局部变量和静态全局变量

属于静态存储方式的量不一定就是静态变量。

例如:全局变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。

把局部变量改变为静态变量后是改变了它的存储方式,即改变了它的生存期。
把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

你可能感兴趣的:(程序员的基本素养)