计算机是如何工作的?(硬件角度)

目录

 1.图灵机 -> 冯诺依曼体系

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

1.1 非数类型的数据在内存中的表示方法

1.2 数类型的数据在内存中的表示方法

2.CPU的基本工作原理

1.门电路:

2.算术逻辑单元(ALU):

3.利用与或非门构建 8 位加法器:

3.CPU的基本工作流程

1.ALU 和CU之间的关系

2.程序执行的过程:

4.编程语言

1.顺序执行:

2.分支语句:

5.CPU的中断模式

6.操作系统(Operating System)OS


从硬件角度了解计算机的基本工作原理——CPU的基本工作原理


指令:不是传递给计算机的都是指令,只有让计算机行动的命令才是指令,指令一定是明确的而不是模糊的。只有指令才最终在运行阶段运行,被运行的程序在计算机的CPU中执行。

比如,到 A 中取出一个数,这就是一条指令;但 预测我明天会不会中彩票,这就不是一条指令,因为结果是不确定的。

数据:我要取 A 中的数,那么首先我需要先把这个数放入 A 中,放入的就是数据

因此,粗略的可以看作

程序 = 指令 + 数据;程序 = 算法(有特定意义的指令) + 数据结构(有组织的数据)

一次开发阶段产生的程序,可以有多次运行阶段。

了解编译器:

举个例子:小明只会英语小红只会汉语,导致小明和小红无法直接交流。小明写的东西,小红无法看懂,这个时候,出现了小译,小译把英文翻译成了中文给小红,而小译在翻译的过程中,顺便还会帮小明把步骤也调优。而小译在这里其实就相当于编译器。因此现在的百编译器去其实就是在做这两个事请:1)编译(compile) 2)优化(optimize)

整个过程,小明相当于处于开发阶段(程序员)小译属于编译阶段(编译器)小红属于运行阶段(CPU)

随着发展,小明可能会写了很多很多程序片段,小译进行翻译,出现一个小连,他把小译翻译后的程序片段,把可以合并的进行合并形成程序,最后小红来对这些程序进行运行。小连其实就是计算机中的链接阶段(链接器)


 1.图灵机 -> 冯诺依曼体系

现代的计算机大多遵守冯诺依曼体系结构,冯诺依曼体系中指令只是一种特殊一些的数据

处理器(CPU)= 运算器 + 控制器

存储器(Memory) = 内存

外部数据(物理数据)通过 输入设备 进入到 存储器;存储器内的数据 通过 输出设备 来到外部世界

运算器 + 控制器 + 存储器 + 输入设备 + 输出设备

处理器 + 存储器 + 输入设备 + 输出设备

CPU + 内存 + I/O:CPU和内存间和I/O间(内部数据)交换通过 总线(BUS)


程序 = 指令 + 数据

指令表现为一种特殊的数据需在存储在内存中,它是一组与规定的动作,利用编码表规定,opcode 操作码

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

一类是数,一类是非数的数据(字符串、声音、图片......)

1.1 非数类型的数据在内存中的表示方法

要在计算机中进行“非数数据”的存储,把非数数据转换成数类型的数据 via 编码表

比如字符串可以转为字符,字符有 Unicode 编码,可以进行转换。

图片有 RGB 编码,因此颜色也可以进行编码。

声音可以由波形编码。

这些都可以把非数转化成数。

1.2 数类型的数据在内存中的表示方法

1.整数(整型数)

一般是 有序范围内的整数表示:原码、反码、补码

2.小数(浮点数)

IE标准

2.CPU的基本工作原理

CPU:逻辑算术运算器

        与、或、非、加、减、乘、除、取余

        控制器

        寄存器:临时存储数据的存储单元

现代的高级CPU为了提升性能,一般都带有缓存(CPU内缓存)


1.门电路

组建 与门、或门、非门、异或门 可以实现 1 位(bit)的基本逻辑运算

2.算术逻辑单元(ALU):

算数:加法、减法、乘法、除法、取余

逻辑:与、或、非


3.利用与或非门构建 8 位加法器:

1. 1位加法:

2. 8位加法:

 8 位数的加法器 = 7个全加器 + 1个半加器

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

由此,所有的程序执行,本质上都是计算 + 读取 + 存入

程序:多个(opcode + a + b)来组成,a、b都是需要寄存器来临时保存数据的,同理计算的结果也是需要寄存器来保存的。

读取:从内存到寄存器的过程

存入:从寄存器到内存的过程

控制单元CU :计算的结果由寄存器保存、把本次计算的 opcode 告诉 ALU

3.CPU的基本工作流程

CPU = ALU + CU 

ALU 主要负责进行 逻辑+算数运算,需要利用寄存器完成中间数据的临时保存

CU 主要负责控制 内存和寄存器 之间数据传递的指令 以及 驱动 ALU 工作

1.ALU 和CU之间的关系

CU :1)控制 寄存器 和 内存 之间的数据交换 2)控制 ALU 进行计算

PC:下一条要执行的指令在内存中的地址

IR:下一条要执行的指令

指令作为一种特殊的数据,在内存中也是以整型的形式保存的

2.程序执行的过程:

1.取码阶段:CU 根据PC 寄存器的值,去内存的响应位置,把数据(指令)读取到 IR 寄存器中,

                     正常情况下,PC寄存器中的值自动 + 1

2.译码阶段:CU 按照预先设定的指令集解读 指令数据(opcode + 操作数)

3.执行阶段:LOAD指令应该由 CU 执行,按照规定执行指令

4.编程语言

1.顺序执行:

由于 PC 的自动 +1,我们的代码才可能顺序的执行下去,我们所写的代码中的一条语句,很可能是需要多条指令才能完成。

语句是一组指令的封装抽象,变量是一段内存空间的封装抽象。

2.分支语句:

if、else、while、for、break、continue...

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

if(a > b) {  甲  } else {  乙  }

把 a 变量的值加载到寄存器中,把 b 变量的值加载到寄存器中,计算 a - b 的结果,判断 a - b 的结果是不是负数或者 0,如果是负数或者 0,修改 PC 的值,跳转到 乙。如果不满足那么就顺序的执行 甲。

通过 CPU 中预先规定的指令,可以修改 PC 中的值(带条件修改),进而影响执行流。

只要有个起始位置填充到 PC 里,执行流就可以正常的运行起来了,就比如我们平常的 main 方法。


至于我们程序中出现的变量、方法(函数)等概念,并不是计算机硬件要用到这些概念,这是为了方便人(程序员)而诞生的。

在CPU 眼中,只有指令的概念,没有指令属于谁的概念。


5.CPU的中断模式

正常模式下,CPU 可以顺序执行,可以分支执行,但总归还是要按照既定的顺序去执行。

但现实中,我们可能需要暂时中断 CPU 当前的执行流,先让 CPU 去做点其他的工作,再回过头来继续原来的执行流。

CPU 硬件中提供了一种机制(中断)让 CPU 停下:

1.保存当前的 PC 值到内存的某个位置

2.修改 PC 的值,去执行其他的执行流

3.其他执行流结束之后,返回保存的 PC 值恢复到 PC 寄存器

4.继续原来的执行流

中断经常用作:

1)IO设备的处理

当有外部数据到达 Input 设备时,触发某个中断,让当前的执行流暂停,切换到 Input驱动对应的执行流,把 Input 设备中读取到的数据,放到内存的某个位置,恢复之前的执行流

2)操作系统中用来做进程调度(线程调度)

6.操作系统(Operating System)OS

操作系统是一组做计算机资源管理的软件的统称。目前常见的操作系统有:Windows系列、Unix系列、 Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等。

计算机是   多用户-多任务场景  OS 的主要职责就是协调——专门的软件来协调工作

硬件(资源)会被多任务“同时”访问

OS 协调不同任务对硬件的资源访问,OS 管理着硬件资源,分配给不同的任务去使用。

(1)OS 是一个 管理(硬件、软件)资源的 软件

(2)OS 是一个协调者(管理的含义就是做协调)

(3)OS 是一个分配者,分配的主要主体就是任务。站在任务的角度,就是一切硬件资源都需要找 OS 申请后才能被授权使用。

我们程序其实是以进程的角度去操作系统(OS)中申请资源来使用,这个硬件资源就包括:CPU、内存、IO设备。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值