处理器结构

处理器硬件结构

现代计算机结构处理过程:

  • 输入设备输入数据,存储器存储输入数据
  • 控制器接收指令控制存储器将数据送入ALU进行计算
  • 控制器接收指令将计算后的结果存入存储器
  • 控制器接收指令将存储器数据输出到输出设备

冯诺依曼结构

所有复杂运算都是通过简单运算组合而成。而CPU中最核心的部分为ALU。

ALU(算数逻辑单元):主要由与门和或门构成,用来进行二进制数据的计算。

处理器模型

ISA:指令集体系架构,也是目前使用的最广的CPU体系架构。主要包括一套指令集以及一些寄存器,而程序员针对这些指令集以及寄存器进行编程,而不需要关心具体的硬件。

在PC上,大部分用的Intel和AMD处理器都是基于x86指令集,而嵌入式设备上的程序大部分使用的AMR指令集。

处理器

  • 指令集体系结构:x86,arm,armv7,mips等
  • 处理器微架构:NetBurst等
  • 处理器物理实现:20nm/40mn的集成电路工艺,电子计算机,量子计算机等

而处理器除了内核外,还有其他很多东西,如I/O,电源,电池,时钟等等。

处理器结构

CPU硬件指标

MIPS:每秒执行指令数,而实际中该值会偏低,因为实际情况中会遇到并行,Cache Miss,通信效率,总线冲突等问题。

功耗:现在设备中CPU与显卡功耗非常大

指令集体系结构

处理器模型: 例如C=A+B;语句:

  • 操作数:C,B,A均为操作数,操作数存储在主存中

由于从Memory访问数据很慢,于是CPU在ALU附近加入了寄存器,用来存储计算中产生的中间数据,避免将这些数据存入主存再读取的耗时

  • 操作码(op):+为操作码

处理器模型

对于C=A+B可以分为以下指令执行:

load R3,#0;// 加载#0地址存储的数据到R3寄存器
load R2,#1;   // 加载#1地址存储的数据到R2寄存器
add R0,R3,R2;// 将R3,R2寄存器的数据相加保存到R0寄存器中
store R0,#2;// 将R0寄存器中的数据保存到#2地址

其中load,add,store为指令,R0,R1,R2,R3为寄存器,#1,#2为主存地址

这种指令的写法就是汇编语言,处理器公司也会对外发布指令集手册,而这手册也是使用汇编语言来描述。

而计算机无法理解loadstore等指令,也不知道具体的寄存器为R1R0,计算机只知道0和1,所以最终编译过后每一条指令均如01011101011001,代表着load R3 ,#0;

最初程序员直接写汇编语言来进行程序开发,直到Fortran的出现,才出现了高级语言,能让程序员从解放出来。

高级语言的转换

指令集的发展

CISC:复杂指令集,提供了很多与高级语言以及特性相关的指令(如复杂的寻址模式,直接对应的指针运算)等,导致指令集非常庞大。而x86的CPU仍然在使用CISC指令集。

RISC:精简指令集,相对于CISC来说减少了许多直接的指令,只保留了常用的简单的指令。如Mips,Arm,Power等CPU使用RISC指令集。

RISC使得CPU不需要浪费大量的晶体管来做复杂而又较少使用的功能,X86的指令集有1000多页,而RISC指令集手册只有200页左右,并且精简指令集的大部分指令都可以在1个cycle执行完,并且使用了定长编码,使得指令译码的过程变得简单,并且CPU的频率得到了大幅度的提升

可是CISC的一条指令对应着多条RISC指令,所以在执行复杂操作的时候,RISC指令集使得CPU与存储器之间的数据交换增多,而存储器的速度远远低于CPU执行速度,比较容易导致性能恶化

PS:芯片的制程工艺(32nm,22nm)决定了芯片内部晶体管的数量,晶体管数量越多,则芯片能完成的任务也就越多

手机上的CPU大部分用的是ARM,无论是高通还是TI,还是三星使用的还是ARM内核。因为ARM在设计之初就将低功耗,低成本的优先级放在了高性能之前。

ARM自己不生产芯片,而是向半导体公司提供指令集与内核授权,让半导体公司生产ARM指令集的芯片。

计算机字长(Word)

16位计算机的字长为16bit。 32位计算机的字长为32bit。 64位计算机的字长为64bit。

字长代表着处理器一次处理数据的长度,主要由运算器和寄存器决定。

32位处理器,每个寄存器都可以存储32位的数据,而加法器可以支持两个32位的数据相加

image.png

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 处理器结构--ReorderBuffer

    Reorder Buffer用来保存在乱序执行之前的(OOOE)指令执行顺序,当指令集合在乱序执行后按照原有指令顺序将结果提交。

    None_Ling
  • X86处理器架构--Nehalem

    最开始的处理器比较简单,8086处理器是评估当前的指令指针(CS:IP)指向的指令,然后再执行解码、执行、退出,并移动指令指针到下一个位置,每一个新的芯片都做了...

    None_Ling
  • X86 Assemble指令--LEA

    LEA指令用来计算第二个操作数(源操作数)的有效地址,并且将该地址保存到第一个操作数(目的操作数)中。源操作数是CPU寻址模式中的内存寻址模式(支持偏移量)。而...

    None_Ling
  • 面试官问:能否模拟实现JS的call和apply方法

    之前写过两篇《面试官问:能否模拟实现JS的new操作符》和《面试官问:能否模拟实现JS的bind方法》

    lucifer210
  • 【一起学源码-微服务】Nexflix Eureka 源码十一:EurekaServer自我保护机制竟然有这么多Bug?

    上一讲主要讲了服务下线,已经注册中心自动感知宕机的服务。 其实上一讲已经包含了很多EurekaServer自我保护的代码,其中还发现了1.7.x(1.9.x)...

    一枝花算不算浪漫
  • 密码技术之数字签名

    我们知道,散列函数解决了消息的完整性防止篡改,消息认证码解决的是消息发送者是否被伪装的问题,但是消息的防抵赖性如何保证呢?因为发送接收双方都共享一个密钥,因为对...

    安智客
  • R语言绘制绘制ROC和PR曲线(总结)

    (1)总结常用的绘制ROC和PR曲线的R包 (2)生存预测模型的时间依赖性ROC曲线

    用户1359560
  • 这些在 2016 年融了钱的明星AI初创公司,今年都在干嘛?

    商汤科技 最近商汤科技的各种传言不断,大的传言大家也可能都知道了,至于哪些是真哪些是假,si间、si间会给你答案。 咱直接看看他们今年的融资情况。今年 4 月,...

    BestSDK
  • (译)kube-proxy 模式对比:iptables 还是 IPVS?

    kube-proxy 是 Kubernetes 中的关键组件。他的角色就是在服务(ClusterIP 和 NodePort)和其后端 Pod 之间进行负载均衡。...

    崔秀龙
  • Java后端2017书单推荐

    对于程序员来说,个人感觉最佳学习方式是看书,视频花费时间太长,而博客则不够系统。初学相关领域最好的方式就是找到一本经典的好书,然后啃完它。

    Java后端工程师

扫码关注云+社区

领取腾讯云代金券