CPU位宽与指令

CPU时钟信号
1,芯片中电子元件晶振通电后产生震荡,震荡产生频率稳定的脉冲信号,高频的脉冲信号每秒可达百万次,通过谐振效应发送信号形成方波。
2,通过电子元件调整脉冲的频率,将脉冲信号转换为需要的频率,形成驱动芯片工作的时钟信号,信号的频率,称作芯片的时钟频率。
3,时钟信号驱动芯片工作,每次脉冲到来,让芯片状态发生一次变化,用这种方法,存储器中的指令被一行行执行。

CPU位宽
1,如果CPU每次可以计算4个byte,称作32位CPU;如果CPU每次可以计算8个byte,称作64位CPU,32和64是CPU的位宽。
2,CPU支持多个byte一起计算,位数越大,可以计算的数值越大。

3,CPU和内存及其他设备之间通过总线通信,地址总线用来指定CPU将要操作的内存地址,数据总线用来读写内存中的数据。
1)CPU读写内存时,通过地址总线指定内存地址,再通过数据总线传输数据;
2)控制总线用来发送和接收关键信号,比如中断信号,设备复位、就绪等信号,CPU对信号进行响应也需要控制总线。

4,32位宽的CPU不能控制超过32位的地址总线、数据总线工作,如果有一条40位的地址总线,32位的CPU不能一次给40个信号,因为它最多只有32位的寄存器,最多操作4G的内存地址。
1)线路位宽,32条线路,每条线路传递一个信号,可以操作4G的内存。
2)32位宽的CPU,如果处理64位数据需要拆分成2个32位数字计算,先计算低32位数字,再计算高32位数字加上进位。

5,64位CPU可以一次读入64位数字,同时64位的CPU内部逻辑计算单元也支持64位数字的计算。但大部分应用不需要计算超过32位的数字,所以计算在32位还是64位中区别不大。

CPU指令
1,CPU执行程序时,首先读取PC指针指向的指令,导入指令寄存器。
1)需要CPU控制单元操作地址总线指定需要访问的内存地址,通过数据总线获取指定内存中的数据存入指令寄存器;
2)然后分析寄存器中指令,确定指令类型和参数;
3)如果是计算类型的指令,就交给逻辑运算单元计算,如果是存储类型指令,就由控制单元执行;4)最后PC指针自增,准备获取下一条指令。
5)PC指针也是一个寄存器,32位的机器上,指令是32位4个字节,需要4个内存地址存储,PC指针自增4。

2,64位的CPU提供64位的寄存器,寻址范围大,但会受到总线条数的限制,如果64位CPU配置的地址总线只有40条时,寻址范围也只有1T。

3,编绎器将程序翻译成机器指令,CPU执行指令。
1)不同类型的指令,参数的个数、每个参数的位宽都不一样。
2)参数可以是寄存器、内存地址、数值(一般是整数和浮点),内容都是数字。

4,指令从功能划分,分为
1)I/O类型的指令,处理内存间数据交换的指令store/load等,或将内存地址的数据转换到另一内存地址的mov指令;
2)计算类型的指令,处理两个寄存器之间加减乘除、位运算、比较大小等;
3)跳转类型的指令,修改PC指令,条件判断+跳转的逻辑,if-else, switch-case, 函数调用等;
4)信号类型的指令,例中断指令trap;
5)闲置CPU的指令nop,一般CPU执行这条指令会空转一个周期。

5,CPU的指令周期指通过PC指针读取内存地址中指令,对指令进行解码,执行指令,执行结果存回寄存器或将寄存器存回内存。

6,指令根据寻址模式也可分为,
1)直接加载内存地址中的数据到寄存器叫直接寻址;
2)将数值导入寄存器的指令叫寄存器寻址;
3)将寄存器中数值作为地址,加载这个地址中数据的指令叫间接寻址。

7,寻址模式是从指令如何获取数据角度对指令分类,同样是求和可分为将两个寄存器的值相加指令,及将寄存器和一个整数相加的指令。

CPU指令执行
1,CPU是石英晶体产生脉冲转化为时钟信号驱动的,每一次时钟信号高低电平的转换就是一个时钟周期,CPU的主频即时钟信号的频率,多数指令并不能在一个时钟周期完成,通常需要2、4、6个时钟周期。
2,64位CPU可以执行更大数字的运算,这个优势在普通应用上不明显,但在数值计算较多的应用上比较明显。
3,64位CPU也可以寻址更大的内存空间,64位指令的机器可以兼容32位指令,32位指令的机器寄存器存不下64位指令的参数,不可以兼容。
4,将递归函数转成非递归函数的通用方法,使用jump跳转指令执行下一次循环,jump指令直接操作PC指针,很多CPU会抢先执行下一条指令,通常在jump后跟随一条空指令,让CPU空转一个周期,避免jump下面的指令被执行。
5,条件控制程序,if-else是自上而下执行逻辑,需要一个个比较,switch-case语句通过计算直接算出case所在指令位置,精准跳转。
6,不同的CPU指令集不一样,Intel和AMD家族使用CISC精简指令集,ARM和MIPS主要使用RISC复杂指令集。

7,函数执行,函数调用先将返回值、返回地址、函数参数入栈,跳转到函数体对应指令所在的位置执行函数调用,执行结果存入栈中返回值位置,函数返回将压入的参数出栈,跳转回栈中返回地址的指令位置,返回地址出栈,返回值出栈返回返回值。
1)栈中数据大小一样,函数执行过程中,可以通过参数个数和序号计算参数在栈中的位置。
2)栈顶指针指向下一个可以写入的位置,将数据写入到栈顶指针指向位置,栈顶指针加1,通常用一个特殊寄存器存储栈指针。

8,class类型实现,class构造函数执行时,为属性分配内存空间,方法存到代码区,并存储方法指令所在内存地址。
1)调用class方法与函数调用一致,将返回值和返回地址压栈,压栈参数,执行跳转;
2)成员函数隐式参数this指针作为第一个参数压栈,可通过this指针访问成员,class也就可以翻译成指令了。

9,如果程序语言不支持递归函数,可使用栈实现递归算法,以一个栈指针实现压栈、出栈等栈操作模拟函数调用方法达到递归调用的效果。

中断
1,程序处理键盘输入,按键按下、释放、以及组合键都由操作系统进行统一封装或计算。
1)按键、释放,组合键必须结合时间因素判断;
2)如果不停地扫描按键,对整个系统带来很大的负担,可考虑消息模型,程序在操作系统端注册一个响应按键函数,每次触发按键时执行这个函数。

2,从用户体验上,按键是一个高优先级的操作,程序需要随时中断去响应高优先级操作,则需要从底层支持这个行为,最好从硬件层面支持,速度更快。
1)每次按键,如果触发CPU能力,由CPU内部处理,则增加了软件的耦合,问题复杂化了,CPU是用来计算的,它的工作是专注高效的指行指令。
2)可以设计成主板通过总线通知CPU,CPU中断当前执行的程序,去执行另一个程序的模型。
3)CPU不知道操作系统响应按键程序的位置,CPU需要跳转到固定位置,操作系统在固定地址内写入指令,让PC指针跳转到操作系统处理按键程序的位置。

中断的设计
1,中断整体设计分成三层,第一层硬件设计、第二层操作系统设计、第三层程序语言设计。
2,按键码的收集,是键盘芯片和主板的能力,芯片将按键信息的电学信号转换成具体按键的值,主板通知CPU,CPU中断当前执行的程序,将PC指针跳转到固定位置,称为一次中断。
3,系统中会出现各种事件,根据中断类型确定PC指针跳转的位置,例按键程序、打印机就绪程序、系统异常等都需要中断,系统调用也需要中断当前执行程序,切换到内核态执行内核程序。
4,中断类型通过中断识别码分类,CPU根据不同识别码跳转到不同地址,这个地址称为中断向量,存储中断向量的空间称为中断向量表。

5,CPU接收到中断后,根据中断类型找到中断向量,操作PC指针,操作系统必须在这之前修改中断向量内的值插入指令,比如写入跳转指令,将PC指针跳转到操作系统处理对应中断类型的程序。
1)操作系统接管后,以按键为例操作系统会将按键放入队列,保存起来,操作系统不能保证及时处理所有的按键,需要先存储下来,再分时慢慢处理;
2)计算组合键,利用按下、释放之间的时间关系;
3)给过一定计算将按键抽象成消息、事件结构或对象;
4)提供API给应用程序,让应用程序可以监听操作系统处理后的消息;
5)分发按键消息给监听按键的程序。
6)所以在应用程序层面,只需要对接操作系统的API就可以了。

中断的类型
1,按照中断的触发方式分成同步中断和异步中断;根据中断是否强制触发分成可屏蔽中断和不可屏蔽中断。

2,中断可以由CPU指令直接触发,这种主动触发的中断叫做同步中断:
1)系统调用从用户态切换到内核态,触发一个中断,中断触发后需要继续执行系统调用;
2)检测到某种错误,触发一个中断,中断响应结束后,重新执行触发错误的地方,比如缺页中断,程序抛出的异常。

3,另一部分中断不是由CPU直接触发,需要响应外部的通知,比如响应键盘、鼠标等设备而触发的中断,这种中断称为异步中断。

4,CPU通常支持设置一个中断屏蔽位(一个寄存器),设置为1后CPU暂时不再响应中断。
1)对于键盘鼠标输入、错误、异常等情况,会被临时屏蔽。
2)但一些特别重要的中断,如CPU故障导致掉电中断会正常触发。
3)可以被屏蔽的中断称为可屏蔽中断,多数中断都是可屏蔽中断。

  • 20
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值