目录
一、冯诺依曼体系(Von Neumann Architecture)
一、冯诺依曼体系(Von Neumann Architecture)
数学家 冯·诺依曼 提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成( 运算器 、 控制器 、 存储器 、 输入设备 、 输出设备 ),这套理论被称为冯·诺依曼体系结构。
CPU 中央处理器: 进行算术运算和逻辑判断
存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)
输入设备: 用户给计算机发号施令的设备
输出设备: 计算机个用户汇报结果的设备
针对存储空间
硬盘 > 内存 >> CPU
针对数据访问速度
CPU >> 内存 > 硬盘
指令:表现为一种特殊的数据,需要存储在内存中
数据:也需要存储在内存中
一般来讲,取指周期中从内存读出的信息流是指令流,它流向控制器,而在执行周期中从内存读出的信息流是数据流,它由内存流向运算器
任何的数据,基本都是以整型,浮点型进行表示,以保存到内存中,“非数数据”都会按照一定标准格式编码成整型
二、CPU的基本工作原理
CPU的构成:CPU主要由运算器、控制器、寄存器组和内部总线构成。
运算器:由算术逻辑单元ALU、通用寄存器、数据暂存器等组成。程序状态字寄存器接受从控制器送来的命令并执行相应的动作,主要负责对数据的加工和处理。
控制器:由程序计数器PC、指令寄存器IR、地址寄存器AR、数据寄存器DR、指令译码器等。
1.算术逻辑单元ALU
用于进行各种算术逻辑运算(与门、或门、非门、异或门)、算术运算(如加减乘除等),可以搭建出一些运算器
与门
- 只有输入都为true,输出才为true
或门
- 只要有一个输入都为true,输出就为true
非门
- 只有输入都为false,输出才为true
异或门
- 只有当两个输入不一致时,输出为true
- 异或门由两个与门、一个或门,一个非门组成
利用或门,异或门构建8位加法器
1.1算术单元(Arithmetic Unit)
算数单元,负责计算机里的所有数字操作,比如四则运算。
1.1.1半加器(Half Adder)
进行两个一位(bit)数相加
1.1.2全加器(Full Adder)
进行三个一位(bit)数相加,由两个半加器和一个或门组成,先把两个比特位进行相加,把得到的结果再与第三个比特位相加
电子开关 -> 基础门电路 -> 异或门电路 -> 半加器 -> 全加器 -> 8位加法器
1.2逻辑单元(Logic Unit)
逻辑单元主要用来进行逻辑操作,最基本的操作就是与、或、非操作,但不只是一位(bit)数的比较
ALU符号
ALU是CPU的核心,程序的执行,本质上都是计算+读取+存入,A和B都需要寄存器临时保存数据
1.1.3寄存器(Register) 和内存(RAM)
寄存器是CPU内部用来存储数据的组件
访问速度:寄存器比内存快了3~4个数量级
存储空间:比内存小很多很多,现在64位的cpu,大概有几十个寄存器,每个寄存器8~几百字节
成本:cpu上的寄存器非常贵
持久化:断电后,数据消失
2.控制单元CU(Control Unit)
1. 程序计数器 (PC):用于指出下条指令在主存中的存放地址,CPU根据PC的内容去主存处取得指令,由于程序中的指令是按照顺序执行的,所以PC必须有自动增加的功能,也就是指向下一条指令的地址。
2. 指令寄存器 (IR):用于保存当前正在执行的这条指令的代码,所以指令寄存器的位数取决于指令字长。
3. 地址寄存器 (AR):用于存放CPU当前访问的内存单元地址。
4. 数据寄存器DR:用于暂存从内存储器中读出或写入的指令或数据。
5. 指令译码器:用于对获取的指令进行译码,产生该指令操作所需要的一些列微操作信号,以控制计算机各部件完成该指令。
3.指令
由操作码 + 被操作数组成。其中操作码用来表示要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也可能是寄存器编号等。指令本身也是一个数字,用二进制形式保存在内存的某个区域中。
4.CPU 的基本工作流程
4.1取指令阶段
CU根据PC寄存器的值,去内存的响应位置,把指令读取到IR寄存器中,正常情况下PC自动+1
4.2解析指令
CU按照预先设定的指令集解读,指令数据(opcode+操作数)
比如: 0001 1110
假设0001是opcode,代表把指定地址的数据读取到寄存器A中 ,0b1110 -> 14
4.3执行阶段
LOAD指令应该由CU执行
按照要求执行指令:把内存14地址处的数据读取到寄存器A中
5.CPU 的中断模式
正常模式下,CPU可以顺序执行,可以分支执行。但只能按照既定顺序去执行,但是有的时候需要暂时中断CPU的当前执行流,先让CPU去做其他工作,再回过头继续原来的执行流。
CPU硬件中提供了一种机制(中断)让CPU停下来
1.保存当前的PC的值到内存的某个位置
2.修改PC的值,让执行其他执行流
3.其他执行流结束之后,通过将刚才保存的PC值恢复到PC寄存器
4.继续原来的执行流
中断的用途
1. IO设备的处理,当有外部数据到达Input设备时,触发某个中断,让当前正在执行的执行流暂停,切换到Input驱动对应的执行流,把Input设备中读取到的数据,放到内存的某个位置,恢复之前的执行流
2. 操作系统中用来做进程调度(线程调度)