计算机内部工作原理

🍃冯诺依曼体系

冯诺伊曼体系认为,指令只是一种特殊一些的数据
并且冯诺依曼体系将计算机系统分为处理器(CPU)+ 存储器 + 输入设备 + 输出设备
处理器:运算器 + 控制器
存储器:内存
输入设备:外部数据(物理数据)进入到存储器
输出设备:存储器内的数据出来到外部世界

🍃程序 = 指令 + 数据

指令表现为一种特殊的数据,需要存储在内存中,是一组预规定的动作,利用编码表规定
数据同样需要存储在内存中
opcode编码:给CPU支持的所有动作都编码一个唯一的数据

🍃广义数据在内存中的存储问题

🍀非数的数据在内存中的存储

要在计算机中进行 “非数数据” 的存储,要把非数数据转换成数类型的数据
字符串:unicode 编码
图像:RGB 编码
声音:波形编码

🍀数类型的数据在内存中的存储

数类型可分为整数小数
有限范围内的整数表示:正码、反码、补码 -> 整型数
有限范围内的小数表示:IE标准-> 浮点数

🍃演示一个8位加法器的过程

🍀逻辑上的电子二级开关

在这里插入图片描述
在这里插入图片描述

🍀组建与门、或门、非门、异或门

与门
在这里插入图片描述
在这里插入图片描述

或门
在这里插入图片描述
在这里插入图片描述

非门
在这里插入图片描述
在这里插入图片描述

异或门
在这里插入图片描述
在这里插入图片描述

🍀利用与或非 + 异或门构建 8 位加法器

二进制相加
在每一位上
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0
在这里插入图片描述

半加器:进行两个一位(bit)数的相加
在这里插入图片描述

全加器:进行三个一位(bit)数的加法
在这里插入图片描述

8位加法器 = 7 个全加器 + 1 个 半加器
在这里插入图片描述

🍃CPU的基本工作原理

🍀组成

逻辑算术运算器:与、或、非、加、减、乘、除、取余
控制器:分析指令并发出相应的控制信号
寄存器:临时存储数据的存储单元(每一个都只能保存一个整型数,但是寄存器个数不止一个)
现代的高级 CPU 为了提升性能,一般都带有缓存(CPU 缓存) Level1缓存 / Level2缓存 / Level3缓存

🍀ALU

CPU是计算机的核心,ALU是CPU的核心

三个输入:
A:要参与运算的第一个数
B:要参与运算的第二个数
C:本次运算的操作码 opcode
在这里插入图片描述

🍀程序

所有程序的执行,本质上都是计算 + 读取 + 存入
读取:内存 -> 寄存器
存入:寄存器 -> 内存

🍀控制单元CU

CU 可以驱动 ALU 进行具体的计算工作,即ALU 工作时的 opcode 就是 CU 提供的
在这里插入图片描述

🍀指令

所谓指令,即指导 CPU 进行工作的命令,主要由操作码被操作数组成
其中被操作数用来表示要做的动作,被操作数是本条指令要操作的数据,可能是内存地址,也可能是寄存器编号
指令本身也是一个数字,用二进制的形式保存在内存的某个区域
在这里插入图片描述

🍀CPU 的基本工作流程

在这里插入图片描述

  1. 提码阶段
    CU 根据 PC 寄存器的值,去内存的相应位置,把数据(指令)读取到 IR 寄存器中,正常情况下,PC 寄存器的值自动加 1
  2. 解码阶段
    CU 按照预先设定的指令集解读指令数据(opcode + 操作数)
  3. 执行阶段
    LOAD 指令由 CU 执行,CU 将在指令中得到的内存地址处的数据读取到寄存器 A 中

由于硬件中 PC 在自动加 1 ,所以我们的代码变成的指令才能顺序的往下执行
代码中的一条语句。很可能需要多条指令才能完成
语句是一组指令的封装抽象
变量是一段内存空间的封装抽象
PC寄存器中的值在这个指令周期中很关键,可以控制执行哪里的指令

🍀分支语句是怎么来的

CPU 中往往会提供一些指令,这些指令可以去修改 PC 的值

例如
if(a > b){
…甲
} else {
… 乙
}
此语句在内存中的执行流

  1. 把a变量的值加载到寄存器中;
  2. 把b变量的值加载到寄存器中;
  3. 计算a-b的结果
  4. 判断a- b的结果是不是负数或者0,如果是负数或者0,修改PC的值变成乙所在的地址

🍀指令周期

在这里插入图片描述

CPU 的运算快慢,就是看 CPU 执行指令周期的频率
CPU 的主频可以粗略地看作:每秒钟 CPU 能执行多少个指令周期

🍀CPU的中断模式

正常模式下,CPU 可以顺序执行,可以分支执行,但现实中,很多时候,需要暂时中断 CPU 的当前执行流,先让 CPU 去做点其他工作,再回过头来继续原来的执行流
CPU硬件中提供了一种 机制(中断) 让CPU停下

  1. 保存当前的PC的值到内存的某个位置
  2. 修改PC的值,让执行其他执行流
  3. 其他执行流执行结束之后,通过将刚才保存的PC值恢复到PC寄存器
  4. 继续原来的执行流

中断经常用作:

  1. IO设备的处理
    当有外部数据到达Input设备时,触发某个中断
    让当前正在执行的执行流暂停,切换到Input驱动对应的执行流
    把Input设备中读取到的数据,放到内存的某个位置
    恢复之前的执行流
  2. 操作系统中用来作进程调度(线程调度)
  • 23
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 27
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hssq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值