目录
4.2算术逻辑单元ALU(Arithmetic & Logic Unit)
5.3分支语句(if,else,while,for,break,continue)
一.计算机发展史
1.计算机历史
计算机的发展历史悠久,最早可追溯到1946年在费城公诸于世的第一代电子管计算机——ENIAC(The Electronic Numerical Integrator And Computer),它通过不同部分之间的重新接线编程,还拥有并行计算能力,但功能受限制,速度也慢。ENIAC的问世标志现代计算机的诞生,是计算机发展史上的里程碑。在随后的发展中,可大致将计算机的使用分为四个阶段。
- 第一阶段:一个国家使用一台计算,
- 第二阶段:一个商业组织共同使用一个,多个计算机。
- 第三阶段:PC(Personal Computer) 以家庭开始使用计算机。
- 第四阶段:以个人开始使用计算机。
2.计算机之父——冯诺依曼
约翰·冯·诺依曼(John von Neumann,1903年12月28日-1957年2月8日),美籍匈牙利数学家、计算机科学家、物理学家,是20世纪最重要的数学家之一。冯诺依曼对于后世影响最大最伟大的成就就是发明了冯诺依曼机,对于现代计算机来说大都采用的是冯诺依曼体系
冯诺依曼体系结构有以下特点:
- 计算机处理的数据和指令一律用二进制数表示;
- 指令和数据不加区别混合存储在同一个存储器中;
- 顺序执行程序的每一条指令;
- 计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成。
冯诺依曼体系结构的计算机必须具有如下功能:
- 把需要的程序和数据送至计算机中;
- 必须具有长期记忆程序、数据、中间结果及最终运算结果的能力;
- 能够完成各种算术、逻辑运算和数据传送等数据加工处理的能力;
- 能够根据需要控制程序走向,并能根据指令控制机器的各部件协调操作;
- 能够按照要求将处理结果输出给用户。
二.计算机的工作原理
1.基本原理
对于我们现代计算机来说,最关键的2个部件就是CPU和内存。内存存储了要执行的程序指令,而CPU就是用来执行这些指令。CPU首先要知道这些指定存放在存储器的那个区域,然后才能执行,并且把执行的结果写入到执行区域。
2.数据的存储
在计算机中,数类型的数据一般是由01编码所存储的,但是广义上的数据并不单单只是数据类型的数,还有更多非数据类型的数据,例如声音,图片,字符串等,这些数据的存储就需要将其转换成数据类型的via编码来进行存储。
3.演示一个8位加法器的过程
一个加法器表现在逻辑概念就是一个电子开关。
根据一个电子开关这个电子元件,就可以相互拼接,构成与门,或门,非门,异或门。
非门
与门
或门
异或门
利用与或非 + 异或门构建8(bit)位加法器
1)首先构建一个半加器和全加器
二进制相加如图
根据一个二进制相加原理来构造一个半加器和全加器
此时由两个半加器就构成了一个全加器。
2)拥有了半加器和全加器之后,就可以构建一个8bit位的加法器(8位加法器 = 7*全加器 + 1*半加器)
4.CPU的工作原理
4.1,CPU的组成部分及其功能
- 逻辑算术运算符:完成 或,与,非,加,减,乘,除,取余运算。
- 控制器:分析指令并发出相应的控制信号
- 寄存器:临时存储数据的存储单元(每个都能保存一个整形数据,但是个数不止一个)。
- 现代的CPU为了提高性能,还增加了缓存器(CPU内缓存)level1,level2,level3(L1/L2/L3)缓存。
4.2算术逻辑单元ALU(Arithmetic & Logic Unit)
CPU是计算机的核心,而ALU是CPU的核心
- 从算数的角度来说,可以实现加法,减法,乘法,除法,取余;
- 逻辑角度,可以实现与,或,非。
如图示ALU 的示意图,其中ALU有三个输入:
- A: 要参与运算的第一个数
- B:要参与运算的第二个数
- C:本次运算是什么,指编码后的简单指令(opcode)
4.3 程序
所有程序的执行,本质上都是计算 + 读取 + 存入
- 读取:内存->寄存器
- 存入:寄存器->内存
4.4 控制单元CU(Control Unit)
CU的主要任务就是控制ALU去进行何种计算
在CU中,还存在两个非常重要的寄存器 PC寄存器和IR寄存器
- PC:下一条要执行的指令在内存中的地址
- IR:下一条要执行的指令
4.5指令(Instruction)
所谓指令,即指导 CPU 进行工作的命令,主要有操作码 + 被操作数(例如:opcde+a+b)组成。其中操作码用来表示要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也可能是寄 存器编号等。指令也是一种特殊的数据,也是以整形的形式保存在内存中。
5.CPU的工作流程
5.1CPU的工作主要分为三个步骤:
- 取码阶段:CU根据寄存器的值,去内存的相应位置,把数据(指令)读取到IR寄存器中,正常情况下,PC寄存器中的值自动+1
- 解码阶段:CU按照预先设定的指令集解读 指令数据(opcode+操作数) 例如:0010 1110 人为规定 0010是opcode,查询指令表后,直到0010代表的意思:从后面地址指定内存处,将数据读取到A寄存器 地址ob1110-> 14
- 执行阶段:LOAD指令应该由CU执行,所以按照规定执行指令
5.2 正常模式下的CPU流程周期是
总结:
- 由于硬件中PC在自动加+1,所以我们代码变成的指令才能顺序的执行下去
- 代码中的一条语句,很可能是需要很多条指令才能完成的,因此语句是一组指令的封装抽象,变量是一段内存空间的封装抽象
- PC寄存器中的值在这个指令周期中很关键,可以控制执行哪里的指令。
5.3分支语句(if,else,while,for,break,continue)
CPU中往往会提供一些指令,这些指令可以去修改PC的值
例如 :
if(a > b){ 把a的值加载到寄存器中;
......甲 把b的值加载到寄存器中;
}else{ 计算a - b 的值,如果>0,pc值变成甲相关的,<0,pc值改变
.....乙
}
5.4CPU的中断模式
在正常模式下,CPU可以顺序执行,可以分支执行,但总归按照既定的顺序执行,但是在现实中,很多时候需要暂时中断CPU当前的执行流,先让CPU执行其他的执行流或者其他工作,之后再回来再继续执行。
其中中断的操作是CPU硬件中提供了一种中断机制,让CPU停下,其执行步骤是
- 保存当前的PC的值到内存的某个位置
- 修改PC的值,让它执行其他执行流
- 其他执行流结束后,通过刚才保存的PC值恢复到PC寄存器
- 继续执行原来的执行流
中断机制经常用作:
- IO设备的处理 : 当有外部数据到达Input设备时,触发某个中断,让当前正在执行的执行流暂停,切换到 Input 驱动对应的执行流,把 Input 设备中读取到的数据放在内存的某个位置,恢复之前的执行流
- 操作系统中的用来作进度调程(线程调度)