Java进阶之计算机程序运行的基本原理

前言

Java进阶中,计算机的基础知识能够更好的让我们了解Java底层运行的过程,比如Jvm的知识,TCP三次握手等。因此,此文简单的介绍有关计算机的基础知识(偏向于Java可能涉及到的)

冯诺依曼式计算机

存储程序式计算机也称为冯诺依曼式计算机

1.组成

分为五个部分,它们之间以总线相连
冯诺依曼
通过执行一个简单相加指令举例:
在这里插入图片描述
举例:存储器中一条命令,假设这条命令执行这样一条动作,ADD 123 321,ADD表示要做的事情(相加),后面是参数相加动作的两个数,

(1)通过命令记录员找到当前执行到的命令,并将命令提取出来放到命令控制器中的指令暂存处

(2)接着控制器中的命令解释器对命令进行解释,并将解释结果传给控制信号产生器产生相应的控制信号

(3)在控制器的控制下,将两个数再从存储器中提取出来,分别放到运算器的两个数据缓存区中(数据暂存)

(4)接着控制器产生一个控制信号告诉电路做这两个数的加法,相加得到运算结果.

总结:控制器从存储器取出一条命令,然后对命令进行解析,按照命令的要求把相应参与运算的数据取出,放到运算器,运算器计算获得结果,最后输出到输出设备上执行

完这条命令后,转到下一条命令继续执行.

2.存储器的结构和特点

2.1衡量存储空间大小的度量单位

在计算机中能存储的最小的数是1或0,我们讲存储一个1或0的控件称为位(Bit),通常为了使用和程序编写,将8个位称为一个字节(BYTE).

2.2存储器的种类

在这里插入图片描述

2.3存储设备

寄存器:

(1)处于CPU内部和算术逻辑单元直接相连,算数逻辑单元直接对寄存器进行读写操作

(2)一次存取数据花费0.X纳秒的时间,非常接近算术逻辑单元的 计算速度

(3)很昂贵,容量很小

高速缓存 Cache:

(1)通常由静态随机存储器(SRAM)制成,比寄存器便宜

(2)高速缓存分为内部高速缓存和外部高速缓存(内部高速缓存在CPU中,外部高速缓存在主板上)

(3)通常可以分为1到3级,不同级的工作频率不同

(4)不需要刷新电路即能保存内部存储的数据

内存:

(1)通常由动态随机存储器 (DRAM)制成

(2)程序普通执行时的程序指令和很多用到的数据都放在内存中

(3)临时存放,断电丢失

外存:

(1)最常用的就是磁盘和闪存(Flash EPROM)

(2)数据断电后不丢失

(3)现在常用的外存有磁盘和固态硬盘

(4)容量大,速度慢(相对上面提到的)

显存:

(1)全称是显示存储器

(2)专门存储要显示的图像数据

(3)一般和内存一样,由DRAM构成

举例+说明:这时常用的DDR3内存的截图

在这里插入图片描述
其中:240pin表示有240个引脚,类型是DDR3,工作频率1600M.

通过一级缓存,二级缓存,三级缓存为CPU提供数据的供应链,CPU可以看成是工厂,缓存可以看成是仓库,仓库提供给工厂数据.在这种数据供应机制下,CPU先从最近的缓存开始找,如果找到了直接访问数据,如果没有找到,就会到更远的缓存去找,如果在更远的缓存里面找到了数据,就将整个数据块加载到离它更近的缓存中,从而使得对这个数据块的访问都可以在更高的缓存中进行.通过这些措施,尽量减少可能的”慢”的读写操作.

磁盘的原理和磁带一样,都是用一层薄薄的磁性材料来存储信息,每一个bit的不同磁场方向就分别代表了0和1,用磁头的电流就可以改变磁场的方向,从而改变存储信息。闪存的电荷漏电速度很慢,可以看成 是一种掉电也能用的存储设备,常用闪存是U盘和固态硬盘.

3.程序运行的基本原理

在这里插入图片描述
要执行指令:,红色的为指令码,黑色的是操作数

指令包含两个部分,一部分时指令码,一部分时操作数,这里的操作数是一个地址00011110,在这个地址里面放了数据01001011,该指令要完成的事情是对数据进行加1的操作.

详细执行过程:

(1) 程序计数器PC指令的地址发送给地址寄存器AR

(2)地址寄存器到响应的存储单元中将指令取出放入指令寄存器

(3) 指令寄存器将指令交给指令译码器ID进行译码,经过分析这条指令的操作数是一个地址

(4)控制器将指令中的地址传回地址寄存器AR

(6)在控制器的协调下,到相应的存储器中取出数据,将其送到运算器的缓冲寄存器DR

(7)缓冲寄存器将数据送到算数逻辑单元ALU

(8)操作控制器发送一个加一操作的信号给算数逻辑单元ALU

(9)ALU完成运算,并将运算结果放回到累加器中</

程序的运行

机器 只能执行二进制码
在这里插入图片描述
执行如下三行代码:

a = 4;

b = 3;

c= a + b;

程序的执行过程:

(1)对于某个程序而言,在内存中会开辟两个区域,一个是代码区,一个是数据区,首先程序计数器指向待执行的第一条程序mov a,4
在这里插入图片描述

(2)执行mov a,4,将数据区相应区域给变量a赋值为4,然后程序计数器指向下一条语句,mov b,3
在这里插入图片描述

(3)执行mov b,3,将数据区中变量b相应的位置被赋值为3,然后程序计数器指向下一条语句
在这里插入图片描述

(4)执行mov eax,a (eax代表运算器中的累加寄存器),控制器先去访问数据区中a的值,将值取出送到累加器中,然后程序计数器指向下一条语句
在这里插入图片描述

(5)执行add eax,b,即将累加器中值与b的值相加,控制器先取出数据区中b的值3,送到运算器的缓冲寄存器,然后通过ALU完成相加的运算,结果存放在累加器中,然后程序计数器指向下一条语句
在这里插入图片描述

(6)执行mov c,eax ,含义是将累加器的值传递给变量c中,程序执行完毕
在这里插入图片描述

小结:

1.程序必须要经过编译才转换成CPU所能接收的指令.
2.一句程序有可能转换为多句指令
3.程序执行过程是在内存中完成的
4.程序在执行过程中,在内存中的不同区域,存放代码和相关数据

https://blog.csdn.net/chenkaibsw/article/details/78315931

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值