处理器是IT、通信、电子产业的基石 处理器的客户是程序员,程序员在处理器上开发程序,对处理器了解得越深,编写出来的代码执行效率就越高
摘要
本篇博客参考万木杨于2011出版的《大话处理器》,对其主要内容进行总结,以便加深理解和记忆
写在前面
作为一名计算机专业的硕士研究生读这本科普类的处理器基础知识读本,属实有些不好意思。不过不得不说,对我个人而言,现在读这本书不是相见恨晚,而是恰逢其时。它将我近年学到的书本知识和实践经验串成了一条线,让我从自身情况出发,对计算机的一些知识、学习方向和行业发展有了直观而深刻的认识。
这本书是一本非常好的书,它没有拘泥于复杂的系统设计,而是生动简洁地介绍了以处理器为核心的计算机的很多原理,作者还很有文学艺术,引用了很多发人深省的名言,可以从中看出他的人生哲学。

1. 计算机简介
计算机不是一个科学发现,而是一个科学和工程结合的系统工程
1.1.计算机发展简史
-
起源
- 法国帕斯卡发明了加法器
- 德国莱布尼茨发明了乘法器
- 全套运算:计算器(计算机相比于计算器,最大的不同在于它的程序思想)
- 法国亚卡尔制造了一台织布机,打孔控制技术,机器可以根据卡片上打孔设计织物的花样
- 英国人巴贝奇 差分机(制表) → 分析机(机械式 存储库 运算室 分支控制) ”不管今天怎样被认为是无用的知识,到后世会变成大众的知识,这就是知识的生命力“
- 爱达(拜伦的女儿 母亲数学家)第一位程序员(女) 创造了子程序、循环的概念 美国防部开发了一种面向对象的高级编程语言,并命名为ADA(爱达)
-
落地与军用
- 美国哈弗博士生 艾肯 机电方式代替机械方式构造分析机 研制出 MarkI机电式计算机
- 图灵:用理论证明计算机可行的第一人 《论可计算数及其在判定问题中的应用》描述了一项计算任务如何用一种计算机完成 图灵测试
- ABC → ENIAC(毛奇莱) → EDVAC(冯诺依曼机 ”如果人们不相信数学很简单,只是因为他们没有认识到生活有多复杂“)
-
民用
- IBM(国际商业机器公司)诞生:前身是制表公司,后在朝鲜战争时研制701大型计算机而站起,擅机械精密制造,20C50-70S在全球计算机行业中处于霸主地位(服务器、处理器、芯片制造领域前列),现转信息服务业
- DEC小型计算机兴起
-
个人计算机兴起
- Intel诞生:“晶体管之父”肖克利 在硅谷建立“肖克利半导体实验室” → 硅谷八叛将成立仙童半导体(发明集成电路 平面处理技术)→ 其中两人创建intel(乔布斯:仙童半导体公司就像个成熟了的蒲公英,你一吹它,这种创业精神的种子就随风四处飘扬了”)
- Gordon Moore:摩尔定律
- Andy Grove:“唯惶恐者才能生存”——任正非
- MITS公司的创始人发明了世界上第一台PC机Altair
- 微软诞生:比尔盖茨主动为Altair开发软件,开发出BASIC编译器,遂退学创业,开创微软
- 苹果诞生:乔布斯兄弟和好友成立苹果公司,发明个人计算机
- IBM采用Intel的8088处理器和微软的MS-DOS操作系统(由购买的QDOS系统改编)开发出自己的个人计算机,IBM-PC,成为个人计算机的代名词。该决策直接导致了微软和Intel后来的成功,这种“开放式”的体系结构,使得大量的克隆产品出现,一批新的公司成长了起来
- 图形用户界面问世
- 苹果借鉴施乐公司的PARC GUI,推出Macintosh(苹果坚决不与IBM-PC兼容)
- 微软在IBM-PC上开发出用户图形界面,win95获得空前成功
- Intel打败摩托罗拉,Macintosh选用的是Motorola的处理器,但由于IBM-PC都采用Intel的处理器,苹果的衰败也开始采用Intel处理器,摩托罗拉彻底退出了通用处理器市场 → Wintel联盟一统江湖(计算机的本质在于可编程)
- Sun公司挑战Wintel:Sun包含整体IT产业链,发明Java可跨平台,提出“网络就是计算机”的概念(云计算)后被Oracle收购
- google挑战Wintel:浏览器成为OS外的又一大用户窗口,Google等公司大力开发基于互联网的服务(软件即服务),为屏蔽OS做铺垫,网络服务对处理器和OS的依赖性越来越弱
- Intel诞生:“晶体管之父”肖克利 在硅谷建立“肖克利半导体实验室” → 硅谷八叛将成立仙童半导体(发明集成电路 平面处理技术)→ 其中两人创建intel(乔布斯:仙童半导体公司就像个成熟了的蒲公英,你一吹它,这种创业精神的种子就随风四处飘扬了”)
-
移动互联网
- 第一代移动通讯系统的终端设备:大哥大(几乎被摩托罗拉公司垄断,模拟时代注重话音质量)
- 第二代移动通信技术(欧洲超美):GSM标准,局端设备供应商:瑞典爱立信,终端设备供应商:芬兰诺基亚(数字时代注重功能便携和外观)
- iPhone与移动互联网:模糊了手机和计算机的界限,APP Store
- 山寨机
1.2.计算机分类
- PC机
- 服务器:和PC机本质上没有多少不同,主要特点有
- 高可靠性,少出故障(7×24小时业务不中断)
- 高可扩展性:硬盘、内存可扩展
- 高吞吐量:单位时间能处理的请求数(并发量)
- 嵌入式计算机:专注于某个特定领域,如通信、工业控制,低功耗、低成本
一般而言:服务器性能 > PC机性能 > 嵌入式性能
1.3.PC机结构

-
处理器CPU:计算机所完成的工作都是由一条一条指令完成的,指令在处理器中执行,计算机的其他部件都是为了配合处理器而存在。所有外部输入的命令都是由处理器处理的
-
存储器

CPU计算时从寄存器中读数据,寄存器容量太小,则需从内存中读数据,为了减少访存速度,在寄存器和内存间增设cache
光盘使用光特性,内存和U盘使用电特性,磁盘使用磁特性
存储器公司:华人王安发明磁芯存储技术 → Intel以存储器起家,发明集成电路存储芯片 → 日本产出高质量的DRAM(内存条使用DRAM颗粒) → 韩国、台湾生产物美价廉的DRAM(三星的手机可以与苹果抗衡,显示器没有公司可以抗衡,存储器没有对手)
-
主板与芯片组
- 主板:承载计算机内部的各部件,提供各种接口
- 芯片组:负责处理器和其他部件间通信
- 北桥:负责处理器与较高通信带宽部件间的通信,主要是内存和显卡(一些处理器Intel Core i7内置内存控制器可与处理器直接通信)
- 南桥:负责处理器与较低速度部件的通信,主要是各种外设
-
外设
- 键盘:QWERTY、DVORAK
- 鼠标:机械鼠标、光电鼠标、无线鼠标、3D鼠标
- 触摸屏、眼睛凝视系统、游戏手柄(虚拟现实、传感器和无线通信设备)、语音输入
- 显示器:2D显示器(CRT、LCD)、3D显示器、数字纸张、多屏、卷轴显示器、投影(越来越大、越来越靓、越来越无形)
-
显卡:连接主机与显示器之间的桥梁(GPU显卡内的处理器)
- 将处理器送来的图像数据处理成显示器认识的格式,再送到显示器成像
- 图像绘制:CPU要画圆时,向GPU发送命令,告诉GPU圆的位置、大小、颜色等信息,GPU负责绘制
- 视频解码
-
通信接口
-
QPI(QuickPath Interconnect):Intel的芯片间点对点互联技术,用于将两个处理器或处理器和南北桥连接起来,它替代了传统的前端总线(Front Side Bus),AMD与之类似的技术叫HyperTransport(HT)
-
PCI/PCI-E
- PCI外部设备互联总线,是一种连接计算机主板和外部设备的总线标准,是一种共享式总线,因此总线上需要有仲裁器
- PCI-E是其升级版,多个设备通信时采用桥的方式,彼此互不干扰
- PC中,显卡、网卡等通过外界板接入到PCI-E插槽中,因此PCI作为板间互联协议。在嵌入式设备中,由于空间大小限制,芯片被直接焊在PCB电路板上,使用PCI连接时,PCI作为芯片间互联协议
- 与PCI-E竞争的高速通信接口还有:嵌入式中的RapidIO等
-
SATA(Serial ATA):串行ATA,硬盘的主要接口,一次只会传输1位数据(传输频率高),从而减少接口引脚和连接电缆数,进而降低系统能耗、减小系统复杂性
-
USB:PC机和外部可拔插设备之间的接口
-
显示器接口
- VGA:较老,传输模拟信号
- DVI(Digital Video Interface):传输数字信号
- HDMI(High Definition Multimedia Interface):高品质同时传输未经压缩的视频和多声道音频数据,线缆可以更长
-

2.初识处理器
2.1.处理器的硬件模型
- 硬连电路(一定终身)
每一种新的运算都需要重新搭建数字电路,如:
out = in1 + in2 * in3 + in4 * in5 * in6;
out = in1 + in2 + in3 + in4 * in5 + in6;

- 通用计算机模型(硬件搭台,软件唱戏)
控制器将存储器中的数据送到算数逻辑单元(ALU,包含加法器、乘法器等实现的基本运算)运算,将结果回存到存储器中。数据放到哪,做什么运算,都由指令告诉控制器
随着集成电路的发展,电路可以在一块很小的芯片上实现,该芯片就叫处理器
2.2.处理器的编程模型
-
计算机发展早期,软件的编写都是直接面向硬件系统的,这个时代软件和硬件紧密耦合,不可分离
-
ISA横插一刀:IBM为了增加自己系列计算机的兼容性,引入了指令集体系结构ISA(Instrument Set Architecture)的概念,将编程所需了解的硬件信息从硬件系统中抽象出来,这样编程人员就可以面向ISA进行编程。ISA用来描述编程时用到的抽象机器,这种机器并非具体实现。从编程人员的角度看,ISA包括一套指令集和一些寄存器。程序员知道它们就可以编写程序,可移植到支持ISA的机器上。

Intel和AMD的处理器都是基于X86指令集的,手机多是基于ARM指令集的
2.3.处理器的分层模型
- ISA:架构(Architecture)是处理器的抽象描述
- ISA在处理器的实现:微架构(Microarchitecture),它用于描述处理器是如何实现功能的。同样架构的不同处理器的微架构是不同的(如X86架构的Intel和AMD使用不同的维微架构)
- 物理实现:具体的实现过程,如可以用20nm或40nm的集成电路工艺实现处理器,可以采用电子或量子的方式实现计算机
Architecture就好比需求,Microarchitecture就好比设计,物理实现就好比具体的代码

处理器一般结构:
- 内核:Microarchitecture通常可等同于内核
- 存储器、外设与接口、时钟、电源

2.4.如何选择处理器
-
硬件指标
- 性能
- 时钟基准MIPS/MFLOPS:每秒能执行的M数量级的指令数或浮点数运算数。该数值越高,意味着每秒能执行的指令或运算越多。但由于并行性不强、Cache miss、通信效率、总线冲突等问题,实际执行的指令数或运算数是小于理论值的。该指标是处理器公司最容易给出的指标,也能大致反应处理器的性能,但不能真实反映
- 综合基准:该类基准可以独立于任意类型的计算机进行公平比较(用第三代语言C等编写一个程序在不同系统上运行并记录时间,如Whetstone侧重于浮点运算、Linpack侧重于线性代数程序、Dhrystone侧重于字符串和整数程序(统计某程序1是内能执行的次数,即Dhrystone数))提供了一些依据,但也并不完善
- 专业评估组织基准:SPEC,基准套件程序:CPU套件、嵌入式领域的EEMBC基准
- 功耗:CPU和GPU是功耗大户,散热、制冷(性能和功耗两者最重要,难以同时满足)
- 面积:小
- 接口
- 性能
-
软件指标
- 软件开发环境IDE:方便开发、调试
- 编译器性能:处理器的能力要靠编译器才能体现出来
- 软件兼容性
- 二进制兼容:PC上的应用在每一代的处理器都可以正常运行
- 源代码兼容:PC上的应用的源代码在不同代处理器上重新编译一下可以正常运行
-
商业指标
- 价格(一个东西的价格与其本身的价值关系不大,和市场关系较大。嵌入式芯片市场竞争激烈,价格较低。PC芯片市场竞争缓和,价格较高)
- 芯片成熟度
- 生态环境:OS支持、开发工具支持、应用软件支持、程序员支持
3.指令集体系结构
处理器的外表
重新选择一套指令集,与之配套的编译器、OS、应用软件都需要重新编写
3.1.处理器编程模型

lw R15, 0(R2) # 将内存地址0(R2)处取值存入R15寄存器中
lw R16, 4(R2) # 将内存地址4(R2)处取值存入R16寄存器中
sw R16, 0(R2) # 将R16寄存器取值存入内存0(R2)中
sw R15, 4(R2) # 将R15寄存器取值存入内存4(R2)中

3.2.指令集发展历程
-
CISC时代:Complex Instruction Set Computer复杂指令集计算机,指令集强大、灵活、一条指令能完成很多功能,能减少访存次数,变长指令集,其代表是Intel的X86指令集
-
RISC时代:仅保留常用简单的指令,大多指令可以在一个时钟周期内完成,处理器频率得到大幅提高,可以更好的实现流水线。采用定长编码,译码过程简单.RISC也有一些缺点,就是指令划分太精细,造成访存次数增多
-
后RISC时代:RISC处理器通过更合理的微架构,在性能上超越CISC。Intel不甘示弱,设计了新的处理器,X86指令会先被解码为类似于RISC的微操作,执行过程采用RISC内核,达到了性能和兼容性的统一

3.3.指令集分类
-
X86:属于CISC指令集,Intel出品,开放给AMD。几乎所有的PC机都采用X86指令集,因而PC市场被Intel和AMD垄断,后入侵占领了服务器市场。(硕大的大象)
-
ARM:属于RISC指令集,使用ARM指令集的处理器销量最大,来自英国的公司,占据了手机处理器的市场,具有低能耗、低成本的特点。ARM公司不生产指令集,而是向半导体公司提供指令集、内核授权,其他公司使用ARM的处理器内核生产自己的处理器芯片,主要面向嵌入式市场。(稳扎稳打的蚁群)
-
MIPS:Microprocessor without Interlocked Piped Stages无内部互锁流水级的微处理器,最经典的RISC指令集,被称为处理器的教科书,学术价值高。和ARM的商业模式类似,在通信领域有一定市场份额(优雅的孔雀)
-
Power:IBM推出的高性能指令集(Performance Optimized With Enhanced RISC), IBM的POWER和PowerPC侧重于服务器、游戏机领域,在PC领域缺乏应用软件支持(昔日的贵族)
-
C6000:DSP数字信号处理器,专在视频网站、视频通信的无线通信网络建设的背景(无线通信技术、音视频技术)下做数字信号处理,相比于上述的通用处理器,它是一种专用处理器(偏安一隅的独立王国)
3.4.汇编语言格式
-
机器字长:处理器一次处理数据的长度,主要由运算器、寄存器决定,如32位处理器,每个存储器可以存32bit数据,加法器支持两个32bit数相加。32位处理器的地址总线通常也是32位,数据总线一般长于机器字长,因而一次可以读取更多数据
-
操作数个数
-
X86处理器的寄存器(操作数)个数一般是2个,源和目的操作数共用一个寄存器,后来又扩充了一些SSE指令,包含3个操作数(1个源操作数,1个目的操作数,1个掩码)
-
RISC指令集基本都使用了3个操作数(2个源操作数,1个目的操作数)
-
-
操作数顺序
- X86:目的操作数在前,源操作数在后
ADD BX AX; # 将BX和AX相加,结果存到BX中
- C6000 DSP:源操作数在前,目的操作数在后
ADD A1, A2, A3; # A1和A2相加,结果存到A3
- MIPS:目的操作数在前,源操作数在后
-
大小端:Intel的X86采用小端字节序,很多处理器可以配置成大端或小端

-
指令类型
- 算数逻辑指令(乘法、加法、移位等)
- 控制指令(跳转指令和条件跳转指令