目录
引言
中科院计算基数研究所研究员、龙芯CPU首席科学家 胡伟武:要想彻底解决我国在计算机领域自主创新的问题,必须把眼光放得长远,自主研发中国的CPU势在必行。
从大学阶段一直到成为中科院计算技术研究所的一名科研人员,胡伟武始终没有忘记自己入党时立下的誓言,并时刻以身边的优秀党员作为自己学习的榜样。为了研发龙芯CPU,胡伟武带领几十名年轻科研人员日夜奋战,终于在2002年8月10日,将中国人设计的第一枚通用CPU“龙芯1号”研制成功,终结了国产计算机没有自主CPU芯片的历史。
“龙芯1号”诞生的随后20年中,胡伟武带领科研团队走出了一条从实验室走向市场的道路,随着一代代以龙芯命名的产品的更新换代,他们在学习中不断追赶全球最前沿技术,逐渐将龙芯二字发展成为中国自主CPU的代名词。最新亮相的龙芯3A5000系统通用CPU,已经接近国际主流CPU的性能,在部分实际应用中,其表现甚至优于国外同类型产品。
通过“龙芯1号”的研发历程,我们认识到一定要把中华民族的发展主导权牢牢抓在自己的手里,刻苦学习科学技术,对我们来说,就是这些信息产业的基础产品(像CPU、操作系统)要实现自主。自主就是我们党长期建立的自力更生、艰苦奋斗,掌握自己的能力。
立足中国,纵观历史,我国IT产业的根本出路在于构建自己的生态体系。
摘要
【目的/意义】
CPU承载了计算机中最本质的技术原理。
CPU的架构从根本上定义了一台计算机的核心功能,
CPU原理涵盖了整个计算机大部分的运行过程。
学习计算机组成原理从CPU入手是最直接的途径,也是必由之路。
【方法/过程】
本论文会站在芯片产业发展的角度,
阐述CPU的基本概念、核心原理、生产制造及产业生态。
【结果/结论】
中国IT产业的根本出路是建立自己的生态体系。产业链存在剥削现象,一个产业链最终的价值是消费者给的,而产业链内部的利益分成则主要是由生态主导者定的。
中国IT企业的普遍情况是制造业发达、解决方案落后、利润率低。华为属于中国创新能力最强的一线厂商,干的事情最多最辛苦,但利润都不如苹果公司的零头。归根结底是因为中国企业没有解决方案的话语权,没有建立自己的生态体系。
第一章 CPU概览
第1节 CPU的发展历程
计算机是一种可以执行计算功能的自动化设备。在信息社会中,无数的计算机每天都在执行大量的信息处理和计算工作,本来属于人的工作可由计算机自动完成,大大提高了社会生产力。
计算机科学先驱冯·诺依曼在1945年以论文的形式描述了计算机的结构模型,鉴定了现代计算机的结构基础。冯·诺依曼体系结构是现代计算机共同的模型,现在无论是高性能的大型科学计算机,还是我们身边的台式计算机、手机,都遵从冯·诺依曼体系结构。
事实上,计算机中的运算器、控制器两部分经常被一起设计,二者合称为中央处理器(Central Processing Unit,CPU)。CPU的主要任务就是由控制器指挥计算机中的其他部件一起协同工作,并且由运算器执行数值计算。
CPU是计算机中最复杂的芯片。CPU采用的是超大规模集成电路,现代的芯片制造技术可以在一根头发丝的宽度上排列1000根电路连线。台式计算机中的一个芯片就能包含50亿个晶体管,而人脑中的神经元的数量也就在800亿个左右。
电子计算机的发展已经有70多年的历史,CPU的发展和生物进化有相似性,都是从简单到复杂,从低级到高级,从原始到智能。制造工艺历经电子管、晶体管、集成电路等多个阶段,CPU的基本原理几乎没有变化,但体积却在不断变小,计算速度不断提升。
第2节 为什么我国需要自主研发CPU?
在全球范围内,高端CPU的设计技术被少数发达国家的企业掌握,CPU不可避免地成为国家之间博弈的筹码,如果一个国家没有自己的CPU企业,在信息系统中只能大量采用国外CPU产品,那么无论是台式计算机、服务器,还是工业控制等领域广泛使用的高性能CPU,都无法摆脱被国外产品长期垄断的命运。
第3节 指令集
什么是指令集?
指令集是CPU运行的软件的二进制编码格式。由于硬件电路都是由晶体管组成的,只能识别0、1(二进制),因此CPU上运行的软件必须有一种编码格式来让CPU识别。另外指令集是软件和硬件的接口。
什么是指令集的兼容性?
兼容的CPU能运行相同的软件
为什么指令集要向下兼容?
如果指令集发生变化,很容易因为设计上的疏忽而引入“不兼容”问题,导致以前的软件无法在新的计算机上运行,那么新的计算机是不会被用户购买的。成功的CPU系列能保持几十年兼容。
如何保持兼容性、又能让指令集越来越强大?
为什么说指令集可以控制生态?
指令集承载了一个软件生态,也是软件生态的源头,假定有一个CPU企业,不妨称为A公司,想要设计CPU并投放市场,那么一定是从设计指令集开始的。软件生态的价值大于CPU,生态的规模越大,吸附能力越强。
为了保护市场先行者的利益,鼓励技术创新,知识产权法规对指令集有保护制度。CPU指令集可以通过申请专利的形式获取专利权,任何人在付出一定条件下的前提下才有权使用指令集。
为什么主流指令集这么少呢?
1.做指令集不难,难的是做软件生态。把CPU做出来不能算是第一步,还需要在这种CPU上开发越来越多的软件,这样才能让CPU的使用价值更大。
2.软件厂商面对一个新指令集时,很难有动力为其投入成本做开发。尤其是在指令集刚推出、还没有多少用户的阶段,如何吸引软件厂商是很难解决的问题。
3.高端CPU需要的指令集已经非常复杂,远远超过简单CPU。
CISC和RISC的区别是什么?
CISC和RISC如何融合?
第4节 汇编语言
什么是汇编语言?
汇编语言是使用一种接近自然语言的文本形式来表示二进制的机器指令。
为什么现在很少使用汇编语言?
汇编语言是一种“面向机器”的语言,而不是“面向问题”的语言。
使用汇编语言编程时程序员需要考虑寄存器、内存这些CPU本身的基本功能。
汇编指令的语义往往很简单,所以当编写复杂的程序时代码很容易变得很长。
高级语言的发明是程序员的第二次解放。高级语言比汇编语言更为“强大”。在高级语言中可以使用的数据类型上升为整数、浮点数、指针、数组、结构体这些更抽象的逻辑,能够描述的控制机制也更多,例如各种条件判断、循环等。
第5节 CPU的生产流程
第一部分
第二部分
第三部分
第四部分
第二章 CPU系统原理
CPU承载了计算机中最本质的技术原理。CPU的架构从根本上定义了一台计算机的核心功能,CPU原理涵盖了整个计算机大部分的运行过程。学习计算机组成原理从CPU入手是最直接的途径,也是必由之路。
第1节 基础理论
CPU是数学、电子、计算机科学的交叉结晶。
什么是EDA?
EDA是电路设计人员每天使用的工具。美国占全球EDA软件市场的产品份额95%以上,中国有十余家提供EDA的公司,包括华大九天、芯禾科技、广立微等。但是在产品水平上还有很大差距,例如在工艺上以16nm和28nm为主,还无法支持先进的7nm工艺。
设计CPU的两个阶段
什么是ALU?
算术逻辑单元(ALU)是实现各种数值计算功能的部件。
什么是寄存器?
CPU中用于存储数据的单元。
什么是CPU的流水线?
CPU将一条指令切分为不同的执行阶段,不同的阶段由独立的电路模块负责执行,宏观上实现多条指令同时执行。
什么是动态流水线?
动态流水线中指令的实际执行顺序和软件中出现的顺序不同。
1966年IBM的360/91采用了一种经典的Tomasulo算法,确立了动态流水线的基本思想。
第2节 乱序执行
什么是乱序执行?
在CPU内部执行过程中,指令执行的实际顺序可能和软件中的顺序不同。乱序执行是CPU内部的执行机制,对程序员是不可见的。
特点是“有序取值、重新排序执行顺序、有序结束”,意思是指令的结束顺序也要符合软件中的原始顺序。
乱序执行如何处理例外?
只有正常执行、不产生例外的指令才能提交。
CPU遇到例外指令时通常要执行以下操作:
立即停止执行产生例外的指令,因为错误已经发生,再执行下去也没有意义。
对例外指令后面的指令也要停止执行,避免例外指令的错误传播到后面。
CPU把发生例外的指令地址记录下来,以方便用户排查程序的错误。
第3节 多发射和转移猜测
什么是多发射?
流水线的每个阶段都能处理多于一条的指令。
什么是转移猜测?
CPU流水线针对转移指令的优化机制。在遇到跳转指令时,假设跳转一定不会发生,这样就可以把跳转指令及其后面的指令都取到流水线中执行。但是如果跳转指令在执行时遇到了不满足跳转的条件,则只需要借助ROB和COMMIT阶段的作用,对跳转指令后面的指令不做提交即可,这样软件的功能仍然是正确的。
第4节 内存
什么是内存?
内存是一块大规模集成电路,是一组存储单元的集合,用来保存计算机运行过程中的软件和数据。每一个存储单元都有一个可访问的地址,称为内存地址,
什么是内存访问指令?
内存访问指令有读(Read)、写(Write)两种,代表两种不同的数据传输方向。读指令是把内存单元的值加载到CPU内部的寄存器中,写指令是把寄存器的值写回到内存单元。寄存器充当了CPU和内存之间的数据交换枢纽。
CPU的流水线中,对内存控制器的调用一般作为一个独立的流水线阶段,称为“访存阶段”,位于提交阶段之前。
什么是访存指令的“尾端”?
内存中的多个字节被读取到CPU的一个寄存器中时,采用什么样的排列顺序。多个内存字节在寄存器中有两种放置顺序:大尾端和小尾端,大尾端即内存低地址单元的字节加载到寄存器的高位;小尾端即内存低地址单元的字节加载到寄存器的低位。
什么是缓存?
CPU和内存之间的一个数据存储区域,用来提高CPU访问内存的速度。
缓存的设计利用了计算机中的一个事实规律“数据局部性”,即CPU访问的数据往往只占整个内存中非常小的一个比例,但是CPU会多次重复利用这些数据,这样的数据也叫作“热点数据”。缓存就是以非常小的容量保存这些热点数据的,让CPU在执行绝大多数的访存指令时都能快速完成。
在芯片中,缓存占有的电路面积已经超过了处理器核,因此增大缓存会直接增大芯片成本,所以缓存也是体现CPU性能的一个重要参数。
什么是虚拟内存?
操作系统管理内存的一种机制,使多个同时运行的应用程序能够共享内存。
现在的操作系统支持多个应用程序同时运行,称为“并发操作系统”。
第5节 从CPU到计算机
什么是总线?
总线是模块之间的通信线路,是把所有模块连接起来的纽带,是CPU作为计算机的大脑来指挥其他模块的神经中枢。
什么是主板?
计算机中的一块电路板,所有主要的电子元器件都焊接在主板上,还有一些外围设备以独立的电路板插到主板的I/O扩展槽上。CPU、内存条、桥片、显卡、网卡以及其他主要电路模块都安装在主板上共同组成一台完整的计算机。
什么是BIOS固件?
BIOS是固化为主板上的软件,是开机后执行的第一个程序。固件是指向电子硬件中嵌入的软件程序。这种电子硬件一般带有可擦写的存储器,软件程序可以写入存储器中来改变电子硬件的功能。
计算机中最重要的固件是基本输入输出系统,BIOS包含了计算机在开机时需要运行的初始化程序。BIOS存储在主板上的一个“只读存储器”芯片中,这个芯片的内容是在计算机出厂之前使用专业的生产设备写入的,出厂后就固化住,用户一般不用修改。
什么是BLOS最重要的功能?
加载操作系统,在系统自检通过后,BIOS从存储设备(硬盘或光盘)上找到操作系统的文件,把操作系统的引导程序加载到内存中运行。
计算机处理一次按键事件的流程
第三章 CPU生态
第1节 生态的重要性
什么是CPU生态?
CPU生态是围绕某一种CPU的全部资源的集合,包括配套软硬件、应用软件、社区、知识库、书籍、开发者、合作厂商、用户等所有上下游产业链。
什么是软件生态?
软件生态是指某一种CPU能运行的所有软件的集合。软件生态是CPU生态中最重要的一方面,在日常交流中也经常称为应用生态、信息化生态,或者简称为“生态”。
CPU厂商为什么要重视生态?
CPU本身没有使用价值,CPU的价值由其上承载的软件生态的价值决定。应用软件数量越多,代表软件生态越丰富,则CPU能做的事情越多,给用户提供服务的价值越大。而做软件生态的门槛远远高于做CPU。做CPU主要是技术工作,CPU的基本原理已经在2000年前后达到成熟,一个CPU公司只要投入足够的人力和时间就能做出产品。
做生态最难的是在发展初期,很难打破“应用数量少——用户少——用户厂商不愿意支持——更加没人用”的怪圈。很多CPU厂商都是在还没有跳出跳圈的时候就没法再维持下去,能够进入良性正向循环的生态就属于幸运儿了。
软件生态的典型架构
复杂的软件生态是自底向上生长的“多层结构”,在相邻的两层中,下层软件为上层软件提供支撑服务。操作系统位于软件生态的最底层。应用软件位于软件生态的最上层,是最终用户使用的软件。
第2节 操作系统
第3节 虚拟机
什么是虚拟机?
虚拟机是使用软件编写的一个编程语言运行平台,能够加载应用程序的源代码进行执行。
什么是本地编译型?
源代码经过编译,转换成二进制的CPU机器指令序列,即“可执行文件”。应用程序运行时,只需要可执行文件,不再需要源代码。
什么是虚拟机型?
源代码不需要事先编译,而是直接在一个虚拟机上运行。虚拟机动态地加载源代码,将其转换为当前运行的CPU的机器指令,然后就可以运行了。
虚拟机的优点是什么?
虚拟机屏蔽了应用程序对CPU的依赖。本地编译型编程语言发布的可执行文件需要针对不同CPU提供不同的二进制版本,而虚拟机型编程语言发布的只有一份源代码,可以运行在所有CPU上,因为虚拟机屏蔽了不同指令集的差异。应用软件者在编写源代码时,不用考虑将来其运行在什么CPU上。例如Java虚拟机使Java语言可以“一次编译,多处运行”。
虚拟机型语言的数量远远超过本地编译型。本地编译型的典型编程语言有汇编语言、C/C++等,都属于20世纪80年代以前诞生的传统语言;20世纪90年代以后诞生的新语言大部分为虚拟机型编程语言例如Java、Python、PHP、Shell脚本等。还有一些语言属于“混合类型”,即支持本地编译,又能以源代码方式在虚拟机上执行,例如Google在2009年发布的Go语言。
API中最普及的虚拟机是什么?
在服务器API中,最成功的虚拟机生态是Java,占据90%以上的市场份额。
在桌面API中,使用量最大的是JavaScript虚拟机,其在每一台计算机的浏览器中都是不可缺少的。
在移动计算API中,最普及的是Android虚拟机,它是人们使用的Android手机、平板电脑的基础平台。
第4节 生态的优点
松散型的生态:Linux
Linux在台式计算机市场占有率几乎为0,在服务器商场占有率仅为10%。Linux的优点是坚持开放性,但在兼容、优化方面缺乏建树。
第5节 我国计算机事业的发展历程
中国自研计算机的代表是什么?
中国自研计算机的代表是109丙“功勋计算机”,1967年中科院计算所自行设计通用大型晶体管数字计算机,这是中国第一台具有分时、中断系统的计算机,字长为32位,每秒运算10万次。中国第一个自行设计的管理程序(操作系统前身)也是它在上面建立的。
109丙“功勋计算机”使用时间长达16年,在多个领域发挥了重要作用,证明了中国有能力发展自己的计算机事业。
中国的操作系统命运坎坷
20世纪70年代以前操作系统主要服务于硬件设计,不作为独立产品。
20世纪80年代的重点是解决在PC上的汉字显示、中文输入法、汉字处理软件,离操作系统核心技术渐行渐远。
20世纪90年代后则被Windows、UNIX操作系统垄断。中国操作系统失去了产业市场,从而放弃研发完全自主代码的“COSIX”操作系统,以“红旗”为代表的国内操作系统厂商仅从事开源Linux的发行版定制,走向产业链末端,生态建设阻力重重,没有形成有影响力的操作系统产业。
结论与心得
经过我对龙芯芯片,计算机组成原理的学习及总结后,我得出了中国IT产业的根本出路是建立自己的生态体系。产业链存在剥削现象,一个产业链最终的价值是消费者给的,而产业链内部的利益分成则主要是由生态主导者定的。
中国IT企业的普遍情况是制造业发达、解决方案落后、利润率低。华为属于中国创新能力最强的一线厂商,干的事情最多最辛苦,但利润都不如苹果公司的零头。归根结底是因为中国企业没有解决方案的话语权,没有建立自己的生态体系。
CPU经常被称作“电脑之心”,是当之无愧的计算机中驱。程序的每一条指令都要经过CPU的解析和执行。同时,CPU也是计算机最复杂的芯片。本文章会站在芯片产业发展的角度,阐述CPU的基本概念、核心原理、生产制造及产业生态。