计算机组成原理-CPU

一.CPU原理:

晶体管:解决了如何代表数字的根本问题

二.汇编语言

1. 汇编的本质: 助记符,其实就是机器语言
2. 执行过程:

  • CPU读取内存中程序(电信号输入)
  • 时钟发生器不断震荡通电 ,推动CPU内部一步步执行(执行多少步取决于指令所需时钟周期)
  • 计算完成
  • 写回电信号
  • sout

三.CPU的组成

  • PC: (Program Counter) 程序计数器(记录当前指令地址)
  • Register: 寄存器,暂时存储CPU计算所需的数据
  • ALU: (Arithmetic&Logic Unit) 逻辑运算单元
  • CU: (Control Unit) 控制单元,中断控制等等
  • MMU: (Memory Management Unit) 内存管理单元
  • cache:三级缓存,一二级缓存单核使用,第三级缓存多核共享
  • 超线程:CPU的一个核里面有一个ALU和两个PC和两个Register
  • 量子计算机:一位可同时代表0和1

四.缓存

  1. MESI缓存一致性协议(Intel) 不同CPU有不同的协议
  2. 缓存行:数据基本读取单位(按块读取,局部性原理)
  3. 缓存行越大,局部性空间效率越高,但读取时间慢,缓存行越小,局部性空间效率越低,但读取时间快 取一个折中值,目前多用: 64字节
  4. 缓存行对齐:对于有些特别敏感的数字,会存在线程高竞争的访问,为了保证不发生伪共享,可以使用缓存行对齐的编程方式 JDK7中,很多采用long padding提高效率 JDK8,加入了@Contended注解(实验)需要加上:
JVM -XX:-RestrictContended

五.CPU乱序执行

  1. 本质是同时执行
  2. CPU在读等待的同时执行指令(两条指令不相干),是CPU乱序的根源,为了提高效率

六.如何禁止指令重排序

  1. CPU层面:Intel -> 原语(mfence lfence sfence) 或者锁总线
  2. JVM层级:8个hanppens-before原则 4个内存屏障 (LL LS SL SS)

JVM层面,volatile的实现

  1. as-if-serial : 不管硬件什么顺序,单线程执行的结果不变,看上去像是serial

七.NUMA(Non Uniform Memory Access)

  1. UMA的缺点:不易扩展,CPU数量增多之后引起内存访问加剧,CPU的很多资源花在争抢内存地址上,4颗比较合适
  2. NUMA:主板上每块CPU插槽都有一个离得最近的内存,CPU访问最近的内存时会比访问其他CPU插槽附近的内存快很多,分配内存会优先分配该线程所在CPU的最近内存
  3. ZGC - NUMA aware

八.合并写(Write Combining Buffer)

  1. WCB一般是4个字节
  2. 由于ALU速度太快,所以在写入L1的同时,写入一个WC Buffer,满了之后,再直接更新到L2

九.CPU如何区分一个立即数 和 一条指令

总线内部分为:数据总线 地址总线 控制总线
地址总线目前:48位

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值