计算机工作原理
一、计算机组成
冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构,即指令是一种特殊的数据。
数学家冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构。
计算机:运算器 + 控制器 +存储器+ 输入设备+ 输出设备
计算机 : CPU + I/O + 内部数据交换总线(BUS)
处理器 (CPU)= 运算器 + 控制器
存储器 = 外存+内存, 用于存储数据(使用二进制方式存储)
输入设备 :外部数据(物理数据)进入存储器
输出设备 :存储器内部数据到外部
针对存储空间
硬盘 > 内存 >> CPU
针对数据访问速度
CPU >> 内存 > 硬盘
二、数据在内存的存储形式
重点:指令是一种特殊数据,本质还是数据,用数据代表指令
数类型数据:整数/小数
整数(有效范围内):正码,反码,补码
浮点数(有效范围内):IE标准
非数类型数据:字符/字符串,图片,声音
字符/字符串 Unicode编码 (ASCII)
图片 RGB编码
声音 波形编码
三、CPU基本工作原理
3.1 CPU基本组成:
1.逻辑算数运算器(与,或,非,加减乘除,取余)
2.控制器
3.寄存器:临时存储数据的单元
4.现代高级CPU,为提升cpu性能,带有缓存
3.2 实现算数逻辑功能
算术逻辑单元 ALU(Arithmetic & Logic Unit)
ALU 是计算机中进行算数、逻辑运算的核心部件,是计算机的数学大脑。ALU是基于逻辑门与二进制来实现运算的。
电子开关(机械继电器):,可以实现 1 位(bit) 的基本逻辑运算。可以构成门电路
门电路:使用电子开关构建一些有用的部件 —— 门电路。
与门,或门,非门,异或门
逻辑单元:逻辑单元主要用来进行逻辑操作,最基本的操作就是 与、或、非操作,但不只是一位(bit)数的比较。
4位非零判断器:
算术单元:算数单元,负责计算机里的所有数字操作,比如四则运算,当然它能做的远远不止这些。
两位半加器:
寄存器(Register) 和内存(RAM)
光有 ALU 还是远远不够的,我们无法为 ALU 提供存储的部件,这时就需要寄存器和内存。其基本原理还是用门电路实现的。
控制单元 CU(Control Unit)
我们现在有 ALU、存储了,但这还是不足以让我们的计算机工作起来,我们需要有一个部件来指挥 ALU 进行何种的运算而这个部件就是控制单元(CU)。
3.3 CPU的基本工作流程
指令(Instruction)
指令:即指导 CPU 进行工作的命令,主要有操作码 + 被操作数组成。其中操作码用来表示要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也可能是寄存器编号等。指令本身也是一个数字,用二进制形式保存在内存的某个区域中。
cpu工作流程
1.取码阶段:
CU 根据 PC 的值将指令数据读入IR 中,正常情况下PC+1,即指向下一个指令
2.解码阶段:
CU 分析 IR 中的指令组成(opcode+操作数)
0010 查指令,代表:从后边地址指定内存处,将数据读取到A寄存器中
1110,十进制数 14,代表数据内存地址为14
3.执行阶段
CU 完成 LOAD_A指令的动作:从内存14处读取数据到A寄存器
按照上述流程,执行4个指令周期完成运算。如下所示:
指令周期
电子计算机中的 CPU 靠背后一个时钟来进行周期驱动的。CPU的运算快慢取决于执行指令周期的快慢。
只要电脑在开机状态下,CPU就会一直循环这个周期。
在硬件CPU的视角,只有指令的概念,没有指令属于谁的概念
分支语句实现
分支语句if,else,while,for,break,continue…是怎么实现的?
CPU中会提供一些指令,这些指令可以去修改PC的值。
通过CPU中预先规定的指令,可以去修改PC的值(),从而影响执行流。
if(a>b){
甲
}else{
乙
}
实现步骤:
1.把a的值加载到寄存器中
2.把b的值加载到寄存器中
3.比较a-b的值,若值小于等于0,PC的值变为0xc45f,执行乙
4.执行甲
只要有个起始位置填充到PC中,执行流就可以正常执行了
**程序启动:**将写的程序翻译后的第一个指令写入PC中,程序就可以跑起来了。
程序中的函数(方法)等概念并非是计算机硬件使用,而是为了方便程序员的。
CPU中断模式
正常模式下,CPU可以顺序的执行,也可以分支执行。但总归只能按照既定顺序去执行。但现实中,往往需要中断CPU当前的执行流,让CPU去执行新的工作,然后回来继续原来的工作。
CPU提供一种机制(中断)让CPU停下:
1.保存当前PC值到某内存处
2.修改PC值,执行其他执行流
3.当其他执行流执行结束后,将保存的原来的PC值写入PC寄存器中
4.继续原来的执行流
中断有编号,内存中一般存好了编号。
中断作用:
1.IO口设备
1 外部数据进入input设备时,触发某个中断
2 原来执行流暂停,执行input设备数据对应的执行流
3 将input设备读到数据写入内存
4.恢复之前的执行流
2.操作系统中用作进程调度(线程调度)