龙芯应用开发标准教程

978-7-115-49636-2
作者: 靳国杰 张戈 胡伟武
译者:
编辑: 俞彬

图书目录:

详情

本书共10章,详细介绍了龙芯的开发平台,包括龙芯CPU、龙芯操作系统、龙芯应用开发环境,并且基于各种开发工具列举了常用的开发案例,包括基于JAVA的网站开发、基于数据库的开发、基于docker的开发等。

图书摘要

其他

龙芯中科介绍

通用处理器是信息产业的基础部件,是电子设备的核心器件。通用处理器是关系到国家命运的战略产品之一,其发展直接关系到国家技术创新能力,关系到国家安全,是国家的核心利益所在。

中科院计算所从2001年开始研制龙芯系列处理器,经过十多年的积累与发展,于2010年由中国科学院和北京市政府共同牵头出资,正式成立龙芯中科技术有限公司,旨在将龙芯处理器的研发成果产业化。

龙芯中科面向国家信息化建设的需求,面向国际信息技术前沿,以安全可控为主题,以产业发展为主线,以体系建设为目标,坚持自主创新,掌握计算机软硬件的核心技术,为国家安全战略需求提供自主、安全、可靠的处理器,为信息产业及工业信息化的创新发展提供高性能、低成本、低功耗的处理器。

龙芯中科公司致力于龙芯系列CPU设计、生产、销售和服务。主要产品包括面向行业应用的专用小CPU、面向工控和终端类应用的中CPU、以及面向桌面与服务器类应用的大CPU。为满足市场需求,龙芯中科设有安全应用事业部、通用事业部、嵌入式事业部和广州子公司。在国家安全、电脑及服务器、工控及物联网等领域与合作伙伴展开广泛的市场合作。

龙芯中科拥有高新技术企业、软件企业、国家规划布局内集成电路设计企业、高性能CPU北京工程实验室以及相关安全资质。

龙芯历程

2001

2001年5月

在中科院计算所知识创新工程的支持下,龙芯课题组正式成立

2001年8月

龙芯1号设计与验证系统成功启动Linux 操作系统

2002

2002年8月

我国首款通用CPU龙芯1号(代号XIA50)流片成功

2003

2003年10月

我国首款64位通用CPU龙芯2B(代号MZD110)流片成功

2004

2004年9月

龙芯2C(代号DXP100)流片成功

2006

2006年3月

我国首款主频超过1GHz的通用CPU 龙芯2E(代号CZ70)流片成功

2007

2007年7月

龙芯2F(代号PLA80)流片成功,龙芯2F为龙芯第一款产品芯片

2009

2009年9月

我国首款四核CPU龙芯3A(代号 PRC60)流片成功

2010

2010年4月

由中国科学院和北京市共同牵头出资入股,成立龙芯中科技术有限公司,龙芯正式从研发走向产业化

2012

2012年10月

八核32纳米龙芯3B1500流片成功

2013

2013年12月

龙芯中科技术有限公司迁入位于海淀区温泉镇的中关村环保科技示范园龙芯产业园内

2015

2015年8月

龙芯新—代高性能麵器雜GS464E发布

2015年11月

发布第二代高性能处理器产品龙芯3A2000/3B2000,实现量产并推广应用

2017

2017年4月

龙芯最新处理器产品龙芯3A3000/ 3B3000实现量产并推广应用

2017年10月

龙芯7A桥片流片成功

龙芯CPU产品

龙芯CPU开源计划与院校合作

在2016中国计算机大会期间,由教育部高等学校计算机类专业教学指导委员会和中国计算机学会教育专委会主办,由龙芯中科等单位承办的“面向计算机系统能力培养的龙芯CPU高校开源计划”在太原湖滨国际酒店举行。在活动中,龙芯中科宣布将GS132和GS232两款CPU核向高校开源。

将知识融会贯通,就离不开具体实践,在龙芯将GS132和GS232两款CPU核向高校和学术界开源后,大学老师可以基于龙芯平台设计实验课程,使学生可以在真实的CPU上运行真实的操作系统,在龙芯实验平台上启动操作系统并进行性能分析。龙芯还研发了CPU实验平台、操作系统实验平台、并行处理实验平台等数款龙芯教学平台,通过为高校提供完整的线上、线下实验环境,助力教学改革和计算机专业学生的系统能力培养,实现“设计真实处理器,运行真实操作系统”。

目前龙芯开源计划(LUP)正式接收高校申请,高校老师可以登录龙芯开源计划官方网站(http://www.loongson.cn/lup),下载《面向计算机系统能力培养的龙芯CPU高校开源计划试点院校申报书》,填写后发邮件到yangkun@loongson.cn。

一、龙芯CPU开源内容

● 龙芯开源CPU IP

• GS132:单发射、32位,静态执行(三级流水),无cache、TLB

• GS232:双发射、32位,乱序执行(五级流水),带cache、TLB

• MIPS32 release1 兼容

• 32/64 AXI 接口

● 提供配套说明文档

• 使用说明手册、设计文档等

● 提供配套开发环境与实验平台

• 线上、线下

● 使用限制

• 仅限自用(教学、学术研究),不得提供给第三方

• 不得用于盈利目的(商业用途)

二、实验平台系列拓展

“十三五”国家重点图书出版规划项目

龙芯中科

LOONGSON TECHNOLOGY

中国自主产权芯片技术与应用丛书

龙芯应用开发标准教程

靳国杰 张戈 胡伟武◎著

人民邮电出版社

北京

图书在版编目(CIP)数据

龙芯应用开发标准教程/靳国杰,张戈,胡伟武著--北京:人民邮电出版社,2018.12

(中国自助产权芯片技术与应用丛书)

ISBN 978-7-115-49636-2

Ⅰ.①龙… Ⅱ.①靳…②张…③胡… Ⅲ.①微处理器—系统设计—教材 Ⅳ.①TP332.2

中国版本图书馆CIP数据核字(2018)第235128号

◆著 靳国杰 张戈 胡伟武

责任编辑 俞彬

责任印制 马振武

◆人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

大厂聚鑫印刷有限责任公司印刷

◆开本:787×1092 1/16

印张:24  彩插:2

字数:520千字  2018年12月第1版

印数:1-5000册  2018年12月河北第1次印刷

定价:69.00元

读者服务热线:(010)81055410 印装质量热线:(010)81055316

反盗版热线:(010)81055315

广告经营许可证:京东工商广登字20170147号

内容提要

建立自主的IT技术体系,核心是研制CPU、操作系统,并且完成应用开发或迁移。本书全面讲述龙芯电脑的操作系统、软件环境和开发工具,汇集Linux领域的主流开发语言,采用龙芯在推广过程中的大量实际项目,展示从X86电脑向龙芯电脑迁移应用系统的经验和方法。

本书代表了龙芯最优秀的一线团队在研发和市场上探索的成果,具有很强的原创性、系统性和权威性。本书不仅适用于龙芯应用软件开发者,而且对X86电脑上的Linux开发者也有极强的启示意义。

致谢

THANK

本书的编写不仅是笔者的功劳,更是龙芯团队在近10年的软件开发实践中的集体成果,每一行代码、每一个案例背后都有一批工程师的智慧和经验,特别感谢龙芯公司系统研发部的高翔、王洪虎、彭飞、敖琪、傅杰、姚长力、李雪峰、汪雷,以及通用事业部的李超、赵雪峰、黄楷、朱宏勋对本书提供的帮助。

在写作过程中得到金山公司、神舟通用数据库等国产软件领军企业的大力协助。

人民邮电出版社的俞彬先生和任芮池编辑在全书的选题立意、素材组织、写作技巧方面给予了高屋建瓴的指导。

感谢多年以来为建设龙芯软件生态而付出努力和汗水的开拓者们!

前言

PREFACE

中国人的电脑要使用自己设计的CPU,这个曾经的梦想已经成为现实。龙芯CPU的性能不断提升,龙芯电脑和操作系统不断完善,龙芯公司已经把软件生态建设提升到发展战略的高度,全方位展开面向开发者的推广活动,建立龙芯应用公社,联合高校开展基于龙芯CPU的计算机基础教育,一场围绕中国自主设计CPU的IT生态建设大戏即将开演。

对于软件开发者来说,转移到龙芯电脑从事开发工作只是时间早晚的问题。在过去30年中,开发者在Intel和Windows联合打造的信息化基础平台上创造了难以胜数的应用软件,在面对龙芯这个新平台时难免会望而生畏。笔者接触的很多开发者在初次接触龙芯电脑时都有无从下手的感觉。如果有一本书能够针对有经验的开发者全面讲述龙芯电脑的操作系统、软件环境和开发工具,重点介绍龙芯电脑与X86电脑的差异,清晰梳理整个软件栈的组成关系,再辅之以翔实的案例展示向龙芯电脑上迁移应用系统的经验和方法,它无疑是极为必要和及时的。

笔者在近10年中一直从事龙芯电脑上的软件开发,深感现在专门讲解龙芯软件开发技术的著作十分匮乏,龙芯电脑的供应渠道还很有限,有志于投身龙芯生态的开发者长期处于“只闻其名,不见其面”的境地。为了推动开发者掌握龙芯电脑上的应用软件迁移、适配、优化技术,笔者特将多年的心得体会汇集成本书。本书具有以下特色。

1.本书是首次全面介绍龙芯电脑、操作系统和软件环境的图书。以龙芯自有的操作系统Loongnix为开发平台,涵盖了 Java、中间件、数据库、浏览器、Qt、PHP、Python、Ruby、3D、Go、云平台等基础软件,内容基本上可以满足任何类型的编程开发。以往X86电脑上的软件,无论是基于Windows还是Linux开发,都可以参照本书提供的思路,快速迁移到龙芯电脑上。

2.全面汇集了Linux开源领域的主流开发语言和平台工具。不仅有传统的Java、PHP、Python等Web编程语言,还包含了Node.js、Go等互联网时代兴起的新语言,甚至包含了Hadoop、MongoDB、Docker等云计算和大数据应用引擎。由此也可以看出龙芯的软件生态已经非常丰富、实用。

3.技术理论和实践相结合,对每一种开发语言提供至少一个实际案例。从编写源代码开始,经过编译过程,直至在龙芯电脑上运行起来,逐步讲述每一个案例的实现细节。由于本书的写作目的是从全景介绍所有开发语言,而不准备深入讲解任何一门语言的具体细节,因此不会逐行讲解源代码,而是尽量概括地介绍这种语言的优点、适用的场景以及迁移到龙芯电脑上会遇到的典型问题和解决方法。这样的好处是能够在最短时间内给读者提供开发语言的选型参考,读者在本书的指引下能够选择出适合自己应用开发需求的编程语言,然后再寻找专门讲解这种编程语言的图书来深入学习。

4.本书所选用的素材大部分来自于龙芯团队原汁原味的开发资料。针对每一种开发语言给出的案例程序都取材于某个真实的项目,大部分案例都基于实际使用的产品,例如龙芯应用公社、动态壁纸、应用程序打包器、Hadoop、NASA WorldWind、Docker平台等,这些程序天天都在龙芯用户的电脑上运行着,笔者相信只有亲自开发的项目才有最强的教育意义。

5.不仅重视功能开发,还提供了性能优化的思路。一款优秀的软件不仅要满足预定的功能,更要重视性能,在设计和编码阶段都要考虑性能问题。以往在X86电脑上开发应用软件时,出于时间和成本的考虑,人们往往来不及把软件本身进行深入的优化,这样在迁移到龙芯电脑上时很容易暴露性能问题。本书针对每一种开发语言都有一个“性能优化”的话题,讲述性能分析的方法和工具,找到性能瓶颈点,以及进行性能优化的手段。

生态建设的核心是价值传递,龙芯生态建设的当务之急就是把龙芯团队自身的价值传递给数以万计的开发者。对于每一位在X86电脑上有经验的开发者,看完本书之后能够对龙芯电脑建立起清晰的认识,按照本书提供的渠道获取一台龙芯电脑,学习每一种开发语言和案例,掌握从X86电脑到龙芯电脑迁移应用系统的能力,进而将以往X86电脑的应用系统迁移到龙芯电脑上,一起为龙芯生态大厦添砖加瓦。

龙芯生态建设的高潮即将到来,愿以本书作为开场序幕,为加快自主信息化推波助澜。由于笔者水平和经验有限,虽然在写作本书的过程中投入了巨大的精力,并且邀请龙芯技术人员进行了多轮审阅,但是难免会存在疏漏,敬请读者批评指正。

靳国杰 张戈 胡伟武

2018年10月于龙芯公司

第01章 龙芯电脑

龙芯CPU是中国人自己设计的中央处理器。CPU是一台电脑中最重要的部件,可以说是整个电脑的“神经中枢”,电脑中其他部件都是在CPU的指挥下工作的。龙芯已经有将近20年的历史,龙芯CPU最开始是中国科学院计算技术研究所发起的一项科研工作,从2010年开始进行产品和市场推广,现在其性能已经达到能够满足日常应用处理的水平,办公、上网、娱乐、游戏都能应对自如,完全有能力替代国外的CPU。笔者衷心希望大家支持中国人自己的CPU,早日转向龙芯电脑完成每一天的工作。

读者以前从市场上买到的联想、戴尔、惠普等品牌电脑都是使用同一种类型的CPU,那就是X86系列的CPU,这是Intel、AMD生产的CPU的统称。基于X86系列的CPU生产的电脑总称为X86电脑。龙芯有和X86不同的CPU,基于龙芯CPU生产的电脑总称为龙芯电脑。本章将介绍龙芯电脑和X86电脑的区别,龙芯电脑的特点、购买渠道,以及龙芯软件生态的基础知识。

学习目标

了解龙芯电脑的特点及其与市面上X86电脑的区别,掌握龙芯电脑产品种类、龙芯电脑主板架构、操作系统Loongnix以及进行应用开发的软件环境,为后面各章节学习应用开发奠定基础。

学习重点

重点掌握CPU在一台电脑中的地位和作用,了解LoongISA、X86等指令集的区别,明晰Linux操作系统的基本操作和命令,知晓购买龙芯电脑的渠道,掌握在龙芯电脑上进行日常操作的基本技能。

主要内容

龙芯CPU和X86的区别

指令集的概念

龙芯为什么不能运行Windows

CPU的复杂性

Loongnix操作系统

龙芯软件生态

龙芯应用开发者的技能组成

龙芯应用开发环境

1.1 龙芯电脑和X86电脑的区别

龙芯电脑产品系列很丰富,包括台式机、笔记本电脑、服务器、平板电脑等各种形态,典型产品如图1-1所示。

从外观上看,龙芯电脑和市场上购买的电脑好像没有什么不同,实际上有着本质的区别,那么,究竟龙芯电脑有哪些特色呢?

1.龙芯电脑的CPU和Intel、AMD是不兼容的

Intel设计和生产了X86的CPU,最早是从8086/80286/80386/80486/80586开始,后来改换成奔腾、赛扬、酷睿、凌动、至强等型号名称,它们都运行相同的指令集,在功能上是“兼容的”。后来Intel把X86授权给AMD、威盛等厂商,这些拿到授权的厂商也可以设计和生产与X86相兼容的CPU,在本质上都是属于和Intel同类的CPU,所生产的电脑可以统称为“X86电脑”,也就是传统的个人计算机。联想、戴尔、惠普等品牌电脑都属于X86电脑。而龙芯CPU采用的是基于MIPS发展而来的LoongISA指令集,与X86系列的CPU是不兼容的,所以龙芯电脑和联想、戴尔、惠普是“不兼容”的电脑。

指令集只是对软件所包含指令的一种编码格式,对CPU的性能和功耗没有直接决定关系,只要CPU设计得足够精简高效,龙芯可以像X86一样以很低的功耗实现很高的功能。

提示!

“指令集”是指一种在CPU上运行的机器指令的二进制编码,计算机领域常说的X86、ARM、MIPS都是指不同的指令集。例如下面的一段C程序,执行了最简单的一个加法操作:

int add(int a,int b)

{

return a + b;

}

如果编译成X86指令集,是以下的二进制编码,采用一条lea指令实现加法操作:

<add>:

0: 8d 04 3e     lea  (%rsi,%rdi,1),%eax

3: c3        retq

上面的代码中“8d 04 3e”就是lea指令的机器指令编码(以十六进制表示)。

而如果编译成MIPS指令集,则是完全不同的二进制编码:

<add>:

0: 03e00008     jr    ra

4: 00851021     addu  v0,a0,a1

可以看到MIPS指令的编码格式与X86的不同点是,X86指令是不定长的,像lea指令有3个字节,retq指令只有1个字节;而MIPS指令都是4个字节。

对于一个软件,如果已经编译成二进制的可执行文件,那么只能在一种固定指令集的CPU上运行。

2.龙芯电脑无法运行Windows操作系统

由于Windows操作系统是专门针对X86的CPU进行设计的,所以Windows操作系统只能在“X86兼容”的电脑上运行,不能在龙芯电脑上运行。Windows操作系统是微软公司的产品,是世界范围内个人计算机上运行最多的操作系统,而微软公司没有把Windows向龙芯上移植,所以不存在“Windows for龙芯”的版本。那么龙芯电脑能够运行什么操作系统呢?答案是Linux,这是一种开源的操作系统,所有源代码都在网络社区上公开下载,经过龙芯的工程师移植后在龙芯电脑上运行。所以,如果要使用龙芯电脑,实际上就是要使用Linux操作系统。龙芯电脑上运行的Linux操作系统有一个专门的名称“Loongnix”,本书就是讲述在Loongnix上开发应用软件的技术。

3.龙芯电脑可以使用X86电脑的大部分外设硬件

龙芯电脑的机箱、显示器、键盘、鼠标都是和X86电脑通用的,从外观上无法区分是龙芯电脑还是X86电脑。只有在拆开机箱,看到CPU表面上的Logo之后才能知道这是一台龙芯电脑。市面上能够购买的大多数电脑硬件外设都能够在龙芯电脑上使用,例如硬盘、显卡、网卡、声卡、内存条、电源、音箱等。以前读者在X86电脑上DIY(Do it yourself,指单独购买电脑配件组装成电脑整机)的经验都能够用到龙芯电脑上。

4.龙芯电脑“更安全”

龙芯电脑运行的Loongnix操作系统根源于Linux,这是由在开源社区上的几千名顶级程序员共同开发的操作系统,相比Windows,它的漏洞更少,更加安全可靠。Linux还提供了多用户的分级保护机制,在日常的办公处理中都是使用一个权限较低的“普通用户”身份,只有在进行安装软件、系统维护等工作时,才临时使用级别更高的“管理员”,这也降低了系统出故障的概率。龙芯电脑在日常使用中几乎不需要安装防病毒软件,也从来不用担心会受到网上的钓鱼、木马、广告等恶意软件的侵扰,开机之后就是干净的桌面环境,非常适合于办公、开发、设计和写作书籍等,这是一个真正意义上的“生产力工具”。

龙芯电脑的高安全性非常适合于在企业中的应用。一个典型案例是在2018年4月的一天,某市政府热线中心的所有Windows电脑全部因感染勒索病毒而停止工作,如果重新安装操作系统至少需要一天时间,热线服务面临瘫痪的危险,当时只有3台部署了龙芯电脑的座席不受病毒的影响,坚挺地支撑了热线服务的正常运营,避免了一场事故。

5.龙芯电脑“更便宜”

龙芯电脑面向开发者的销售价格和市面上的X86电脑基本处于同等价位水平。另外在软件方面,如果是购买X86电脑,用户还需要继续花钱购买Windows、Office、Photoshop等软件,这些软件的支出加起来也是一笔可观的费用,动不动就成千上万,甚至比电脑本身的价格还要贵。相比之下,龙芯电脑的操作系统Loongnix是免费下载使用的,内置包含了上千款优秀的开源软件,甚至像WPS Office这样重量级的办公软件产品也是面向个人用户免费下载,用户不用在软件上多花一分钱。

龙芯电脑因有上述优点,受到电脑厂家的广泛支持,目前清华同方、曙光等很多知名电脑厂家已经实现批量化的生产。在软件方面,龙芯与办公软件、中间件、数据库等国内数十个厂家磨合多年,形成了比较完整的软件生态环境,尤其是面向办公OA等各种信息化应用已经呈现面上铺开的势头。

1.2 龙芯电脑能运行Windows吗

自从微软公司在20世纪90年代将Windows推向世界,人们每天都在使用Windows从事生产、创作工作和娱乐。与此同时,世界上开始出现一个以开发软件为生的新群体“Windows程序员”,他们工作的平台就是Windows操作系统,利用Windows提供的开发工具编写代码,创造出无穷无尽的应用程序,这些程序中有很多已成为软件精品。

读者一定会问,如果龙芯电脑能运行 Windows,不就可以像 X86 电脑一样运行Windows 上的所有软件了吗?但是由于 X86 电脑的 CPU 都是 Intel 定义的 X86 指令集,而龙芯的 CPU 是MIPS指令集,使用术语来说就是两种CPU“不兼容”。Windows是专门针对 X86 设计的,只能在 X86 电脑上运行。所以在龙芯电脑上不能运行 Windows,只能对Windows说“no”。

除了Windows本身之外,所有Windows上的应用程序也是不能在龙芯电脑上直接运行的。典型的是Microsoft Internet Explorer浏览器、Microsoft Office字处理、Adobe Photoshop图像处理工具、Media Player媒体播放器、腾讯QQ这些软件,以及很多传统的个人计算机专属的Windows游戏。这些软件都被编译成X86指令集的可执行程序,并且没有专门向龙芯电脑移植的版本。

那么,龙芯电脑能够运行什么操作系统呢?答案是Loongnix。这是一种由开源程序员编写、龙芯团队定制维护的操作系统,有上万种应用软件可以使用,完全可以满足日常办公的需求,如图1-2所示。

在Loongnix中,很多开源软件可以作为Windows软件的替代品,主要有以下几种。

1.Firefox浏览器可以替代Internet Explorer。

2.金山WPS Office可以替代Microsoft Office。

3.图像处理工具GIMP可以替代Adobe Photoshop。

4.MPlayer可以替代暴风影音等媒体播放器。

5.腾讯QQ可以在浏览器中使用QQ网页版。

6.对于游戏,在Linux上也有很多优秀的游戏,如棋牌、动作、射击、3D等。

笔者从2010年加入龙芯团队之日起就告别了Windows,很多的日常工作都能够在Loongnix操作系统上完成,包括本书都是在龙芯电脑上使用金山WPS Office编写完成的。

提示!

微软公司曾经将Windows 8移植到ARM平板电脑上,本意是想让Windows在移动计算领域得到普及,但是最后没有取得商业上的成功。主要原因在于,从用户角度看,ARM平板电脑只有能够运行PC上的所有软件才有使用价值,这意味着除了Windows本身之外,所有的应用软件也需要移植到ARM上,像微软自家的Office也有ARM版本。但是,并不是所有的软件厂商都愿意做这个移植,因为一个软件要维护两种平台的代价是很高的,如果ARM平板电脑的市场占用率不足以抗衡传统PC,那么移植ARM版本的软件不会有明显利益回报。

所以像Adobe Photoshop等很多的专业软件都没有移植到ARM平台,导致ARM电脑缺乏丰富的应用软件支持,用户很难对运行Windows的ARM平板电脑产生购买欲望,最后微软公司放弃了ARM产品线。

有了这个前车之鉴,微软公司再也没有向其他平台移植Windows,包括龙芯电脑,所以“Windows for龙芯”是很难实现的愿望,龙芯的长远目标还是基于Loongnix建设软件生态。

提示!

Loongnix是专门为龙芯电脑开发的操作系统,只能在龙芯电脑上安装,不能在X86电脑上安装。如果读者要使用Loongnix,手中就要有一台龙芯电脑。

1.3 龙芯电脑架构

1.3.1 电脑之心:CPU

CPU是一台计算机中最重要的组件。虽然CPU看起来只是比巴掌还小的一块塑料片,但是,为什么说CPU是一台计算机的“神经中枢”呢?做CPU究竟难在哪里呢?本节将为读者进行技术上的解释。如果要从内到外清晰地认识一台计算机,最好的起点就是从CPU开始。

CPU 全称是中央处理器(Central Processor Unit),它是一个高复杂度的集成电路,也是计算机中最重要的核心控制部件。CPU的结构和功能如图1-3所示。

现代的CPU一般可以实现以下4方面功能。

1.数值运算

这是 CPU 最核心的一个功能,因为计算机最根本的功能就是“计算”,也就是用户把计算任务输入电脑中,经过 CPU 中的数据运算功能进行加工处理,最后生成计算的结果。数据运算一般包括定点运算、浮点运算、逻辑运算 3 种,其中定点运算是对整型数据(也就是不带小数点的数据 ) 进行计算,例如加减乘除等;浮点运算是对带有小数的数据进行计算,除了加减乘除之外,还有三角函数、求对数等高级运算功能;逻辑运算是对 CPU 中以二进制方式表示的数值进行与、或、非等布尔代数的操作。在高级的 CPU 中,还会实现多媒体计算、数字信号处理甚至3D图形等更丰富的指令。CPU的数值运算功能主要是通过图1-3中的“运算器”实现的。

2.内存访问

内存是在计算机中与CPU直接相连接的一块具有数据记忆功能的电路板,内存中存储的是CPU进行数值运算的输入数据、中间结果以及最终结果。因为现在计算机处理的计算任务都有很大的数据量,这些数据不可能都放在CPU中,所以就专门制作了用于存储大数据量的内存。CPU在执行数值运算任务的过程中,要频繁访问内存中的数据,也就是从内存中读取数据或者向内存中写入数据,因此CPU要具有内存访问的功能。CPU的内存访问功能主要是通过图1-3中的“控制器”实现的。

3.外设控制

CPU和内存共同承担了进行数据计算的核心功能,但并不是全部。对于一台完整的计算机来说,还需要具有其他方面的功能。例如,需要在机器断电的情况下保存计算的结果到硬盘上,在计算的过程中将数据显示在一个图像屏幕中,以及将计算的数据通过网络传递到另外一台计算机上,还要能够让用户通过键盘、鼠标等方式控制计算机。这些功能称为计算机的“输入、输出”功能(Input/Output),人们发明了专门的设备来实现这些功能,称为输入、输出设备,统称为外部设备,简称“外设”。常见的外设有,用于存储数据的硬盘(Hard disk)、用于远程传输数据的网卡(Network Adapter)、用于输出图像信号的显卡(Display Adapter),以及用于处理用户输入的键盘、鼠标等设备。CPU必须和这些外设打交道才能实现上述要求,这些外设都是在CPU的“控制器”操作下完成相应的功能。

4.其他功能

除了上面所说的功能之外,CPU还包含了很多细节的功能。例如:为了保护CPU在过高的功耗下不被烧毁而实现温度检测功能,方法是在CPU核心的部位放置一个温度检测单元,一旦发现CPU核心温度超过警戒线则自动停机;为了CPU能够灵活地适用于不同的主板而提供配置功能,比如设置主频的高低、处理核的数目以及数据Cache的大小;为了实现操作系统的安全机制,CPU提供不同等级的运行级别,对内存的访问也实行分段、分页的保护式层次结构;为了在一台物理机器上运行多个隔离的操作系统而实现虚拟机(Virtual Machine)功能;为了支持图像识别等功能,CPU还不断集成深度学习等人工智能算法模块。总之,在计算机的几十年发展过程中,计算机的结构发生了日新月异的变化,CPU这个计算机中最核心的部件也是日益复杂化。

提示!

操作系统的安全机制、虚拟机等概念涉及几门专业领域的知识,有需要的读者可以查找相关的书籍进行深入学习。对于一般的用户和应用软件开发者来说,则可以暂时忽略。

分析完CPU的组成结构,可以看到CPU是整个电脑中的“主控单元”,扮演着人的大脑的角色。从地位上来看,CPU负责控制电脑中的其他部件。电脑中的内存和外部设备都是在CPU的指挥下完成数据通信和调度,如果把计算机比喻为一个人体,那么CPU就是大脑,外部设备就是四肢。从复杂度上来看,CPU是整个主板上速度最快、计算量最大的芯片。当前主流的CPU的主频都在1GHz以上,像龙芯3A3000就达到1.5GHz,而且包含4个独立的处理器核,理论上每秒最快能做几十亿次计算操作。对于日常生活中的电脑来说,大多数情况下,计算能力是过剩的。

由此可见,任何计算机都离不开CPU这个最重要的“神经中枢”。

接下来可以为读者解答,为什么CPU是一个世界难题。CPU虽然看上去很小,但是制作起来非常困难。国际上现存的商业CPU设计公司数量本来就不多,能够研制桌面、服务器等高性能CPU的企业则少之又少,耳熟能详的以Intel、AMD、ARM公司为代表,在中国则有龙芯。高端芯片一直是各国竞争的技术高地,CPU的主要难点体现在以下几方面。

1.CPU是一个高度复杂的电路系统

CPU是由晶体管按照一定的逻辑构成的数字电路,目前商用CPU的晶体管数量已经突破了10亿,这是什么概念呢?研究结果表明,人脑中的神经元数量是860亿左右。因此这样一个复杂的系统,对设计团队的技术能力、工程能力、管理能力都提出了高度的要求,往往需要十年以上的技术积累才能具备高端CPU的设计能力。表1-1是几种CPU的晶体管数量。

2.CPU的生产制造需要较高的工艺条件

在CPU设计出来以后,还要经过一系列生产过程才能形成芯片产品。半导体制造技术可算得上人类制造技术中最尖端技术。从最核心的晶圆生产到封装测试,目前国内的生产条件与欧美日韩的企业相比还有一定差距。

下面以集成电路生产工艺中的一个重要概念“制程”进行讲解。制程是指半导体硅片上每两个晶体管中的栅极之间的最小距离,读者可以简单理解为间距越小则晶体管排列得越紧密,电子在从一个晶体管流动到下一个晶体管的时间就越短,所以相同的数字电路能够在更短的时序内完成预定的功能,那么CPU的主频就很容易提高上去,计算性能就能够得到提升。另外,也是更重要的,整个电路能够在更小的硅片上生产出来,所以功耗降低非常明显。

现在半导体行业已经逐步进入了10nm时代,龙芯3A3000使用28nm的制造工艺,相当于在一根头发丝的宽度上排布1000根电路连线。读者可能会问,龙芯是不是可以使用最好的工艺进行生产?事实上工艺越高,对于生产设备的要求也越高,成本也呈指数级增长。另外,高端集成电路制造设备主要来自4家生产商,即荷兰的ASML、日本的Nikon、日本的Cannon、美国的Ultratech。其中ASML垄断了80%的市场份额,最高端的设备售价高达1亿美元一台,Intel、三星的14nm生产线都是买自ASML。但是,这些最尖端的生产工艺并不对所有厂商开放,不是想使用就能够用上的。

3.CPU承载了计算机体系结构中日益发展的新功能

现代CPU虽然从20世纪90年代就确立了基本架构,但是在近年间伴随应用的发展而不断扩充新的功能。例如,为了支持多线程高效运行,提出超线程(Hyper-Threading)技术;为了支持数字信号处理和密集数据计算,提出SIMD(Single Instruction Multiple Data)技术;为了降低功耗,提出ACPI(Advanced Configuration and Power Management Interface)等电源管理技术;为了支持虚拟化、云计算,提出VT-x等技术;最近的潮流则是把图形处理器、人工智能、深度学习等算法都集成到CPU中。这样导致CPU越来越复杂,早就脱离了仅仅是“计算单元”的定义,而成为多种技术综合交叉的“微观巨系统”。

由于以上这些原因,CPU成为计算机中最难制作的部件。龙芯使用了近20年时间,已经逐渐追赶上了国外厂商的步伐,再有几年的发展时间极有希望攀升到国际水平的“天花板”。

1.3.2 龙芯3A3000

龙芯CPU产品线包括“龙芯1号”“龙芯2号”“龙芯3号”三个系列。在信息化应用中主要是龙芯3号,基于64位多核架构,目前主推的是用于桌面终端的3A3000和用于服务器的3B3000(可制成双路、四路主板),很多龙芯电脑产品都是使用这个CPU,如图1-4所示。

3A3000芯片的尺寸是40mm×40mm,在顶部标有处理器的型号名称“龙芯3号”和商标“LOONGSON”,在底部则是有1121个金属焊点,这些金属焊点称为“引脚”,能够通过专用设备焊接到主板上,这样CPU就能够和主板上其他电子元器件进行数据通信。

在CPU内部是由大量晶体管组合成的复杂集成电路,一般人是没有机会拆开看的,只有通过观察版图进行了解。版图是指所有晶体管电路堆叠在一块半导体硅片上形成的结构,越是高端的CPU,其版图越复杂。3A3000的所有电路都是在一个面积为155.78 mm2的硅片上实现的,总共包含了大约12亿个晶体管。这么多的晶体管拥挤地排列在版图上,在图1-5中已经很难区分具体哪一个晶体管是什么作用了,只能够以模块的方式大体划分出不同的功能区域。图1-5展示了龙芯3A3000内部的电路版图。

龙芯3A3000包含以下功能模块。

1.处理器核

处理器核是指CPU中执行数值运算功能的部件。3A3000是一个四核CPU,也就是在一个CPU中包含了4个能够独立执行数值运算功能的处理器核,编号是从0到3。每个处理器核的最高主频是1.5GHz。对于桌面电脑的CPU来说,一般四核就能满足使用要求了。

2.三级Cache

Cache的直译是“高速缓存”,是CPU中用于存储数据的区域。虽然计算机中绝大部分的数据都是在内存和硬盘中保存,但是CPU内部也设计了一块容量较小的存储空间Cache,Cache中的内容是内存中数据的一个“局部缩影”,这样做的好处是,CPU处理器核能够以非常快的速度访问Cache,如果要访问的数据不存在于Cache中,转到内存中去访问。Cache的发明极大地提高了计算机的性能。3A3000的Cache是分成3级的,其中一级、二级Cache都是在每一个处理器核中私有的,而三级Cache是4个处理器核共享使用的。私有一级缓存是64KB,私有二级缓存是256KB,共享三级缓存是4MB。三级Cache占据了3A3000版图上很大比例的晶体管面积,所以增大三级Cache会显著增加CPU的成本。

3.内存控制器

内存控制器是CPU访问内存的通道,内存控制器有一定数量的引脚焊接到主板上,通过主板上的走线连接到主板上插入的内存条。3A3000有两个独立的内存控制器,不仅支持DDR2/3-1333规范,而且支持内存数据校验(ECC算法)。

4.HT控制器

HT控制器是CPU与外部设备之间的控制接口,通过引脚连接到主板上,与各种外部设备进行通信。3A3000有两个独立的外设控制器,支持HT 3.0总线规范(HyperTransport)。HyperTransport本质上是一种为主板上的集成电路互连而设计的端到端总线技术,目的是加快芯片间的数据传输速度。HyperTransport技术以前主要在AMD的CPU上使用,现在龙芯CPU也兼容这种总线协议。

1.3.3 龙芯电脑主板

一台计算机的最主要功能是用于进行“计算”,实际上超过80%的计算工作都是由CPU完成的,剩下20%的工作才是主板上的其他芯片完成的。主板是计算机中的一块电路板,包括CPU、内存条以及其他主要电路模块都在主板上,这样共同组合成一台完整的电脑。CPU和主板都封装在机箱里,平时看不到,只有打开机箱,才能一睹CPU的“芳容”。图1-6是龙芯3A3000桌面台式机中广泛使用的电脑主板。

对于有一定电路基础的读者,深入了解主板有助于学习电脑的结构。从技术角度画出这个主板的逻辑框图,如图1-7所示。

龙芯主板主要包括以下3个模块。

1.CPU和内存插槽

处于图1-7正中间、最上面的芯片就是本书的主角—龙芯3A3000 CPU。左侧与之相连接的是两个支持DDR3协议的内存插槽。

2.桥片

3A3000下面连接的是一个桥片7A1000,这是龙芯自行研制的桥片。桥片是除了CPU之外最重要的集成电路芯片,它的作用主要是作为CPU和外部设备之间的桥梁,也就是计算机和外部设备之间的数据通道。现在的桥片往往都集成了大量常用的外设控制器,由专业厂商生产销售。有的厂商把桥片设计成两个独立的芯片:一个芯片用于集成高速的外设控制器,称为“北桥”,另一个芯片用于集成低速的外设控制器,称为“南桥”。北桥和南桥经常搭配着使用,习惯上称为“套片”,也称为“芯片组”,7A1000在一个芯片中同时提供北桥、南桥的功能。

3.各种接口

从CPU引出一个UART串行口,主要用于调试CPU和操作系统的运行状态,普通用户在日常办公中一般不使用这个接口。串行口会在主板的后面板上有一个插座。另外,CPU还提供一个BIOS接口(基本输入输出系统),通常在主板上会连接一个支持SPI协议的Flash芯片(称为ROM),存储一个最小软件,在计算机上电时执行最基本的初始化和引导操作系统的功能。

龙芯主板提供了两路显示器接口VGA和HDMI,还有网络控制器、音频控制器,另外还预留了若干PCIE接口用于插接独立PCIE板卡设备。这些接口都在主板的后面板上提供相应的插座。主板还提供了硬盘接口,即高速串行SATA接口。对于移动设备,主板还提供了最多12个USB 2.0接口。

1.3.4 龙芯电脑有多快

一台电脑的运行速度在很大程度上取决于CPU的性能。龙芯CPU采用国际主流MIPS标准指令集,并在MIPS指令集基础上进行指令扩展,形成“兼容国际主流、自主发展指令集”的特色。龙芯已经得到MIPS指令集的永久商业授权。龙芯在MIPS原有的近400条指令基础上新增了1000多条指令,主要包括虚拟机指令、向量指令、数字信号处理指令、媒体指令等。从龙芯指令集的演进与发展过程来看,龙芯处理器已经在继续保持兼容MIPS的基础上逐渐发展为自主龙芯指令集LoongISA。龙芯CPU在近几年中的性能提升路线如图1-8所示。

龙芯3A3000于2017年4月发布,性能超越国际主流中低端门槛,单核通用处理性能比2014年的产品提高3~5 倍,SPEC CPU2006 分值为10~11 分,超过Intel凌动系列和高端ARM系列。访存带宽为10~13Gbit/s,与Intel I5相当。采用MIPS兼容的龙芯指令集LoongISA,新一代自主微结构设计GS464E,乱序执行四发射超标量处理器结构,综合设计复杂度达到与Intel的IvyBridgy及AMD的Steamroller相当的水平。片内所有功能模块(CPU、内存控制器等)均为自主设计。

使用CPU性能测试工具进行评估,在相同主频的条件下,龙芯达到与AMD、Intel部分型号相当的性能,如图1-9所示。

龙芯团队继续优化设计、提高性能,第三代产品将在2019年或2020年推出,3A4000继续使用28nm工艺,四核2.0GHz,通用处理性能提高一倍。3C5000使用16nm工艺,2.5GHz, 16核,单核性能再提高20%~30%。整体达到AMD水平,具有一定的市场竞争力。

1.3.5 龙芯电脑哪里买

为了促进宣传推广和辅助高校教育,龙芯公司设立了一个“龙芯开发者计划”,定期举办面向开发者的活动。龙芯开发者计划的目标是通过“一个开放社区、一个开发者大会、一个应用公社”,共同构成开发者的生态根据地。在这个计划中,龙芯的开发者可以在龙芯社区进行技术交流和探讨,可以参加龙芯的开发者大会,可以通过龙芯应用公社来分享开发的小程序、小游戏。

如果读者有志向成为龙芯电脑的开发者,第一件工作就是要购买一台龙芯电脑。龙芯社区为开发者建立了专门的产品购买渠道,开发者可以用成本价甚至低于成本价的优惠价格购买到龙芯的产品。龙芯开发者商城供应组装好的龙芯电脑整机,可以方便地在线购买,一台3A3000电脑和市面上X86电脑的价格是不相上下的。图1-10是龙芯电脑的购买页面。

龙芯3A3000电脑的主要规格参数如表1-2所示。

龙芯电脑推荐安装的操作系统有很多种,首选推荐的是龙芯社区维护的开源版本Loongnix,这个版本包含了大量面向开发者的编程环境和工具,非常适合于进行应用软件开发。另外,还有很多商业版本的国产操作系统也为个人用户提供免费下载,包括中标麒麟、深度Deepin、普华等。本书所介绍的应用程序开发技术,对于Loongnix和其他操作系统都是适用的。在办公软件方面,金山WPS Office也对龙芯电脑的个人版和社区版提供了免费下载服务。

1.4 龙芯软件生态

在IT历史上,企业重视生态建设才能取得成功。做CPU的企业如果想要扩大使用群体,一定要完善外围的操作系统和应用软件生态。Intel就是得益于和微软结成商业同盟,把X86电脑的操作系统Windows做到普通人也能够方便易用的水平,并且在几十年内保持对应用程序兼容,不断地培养Windows上的开发者,这样才能从1990年以后雄踞桌面电脑市场。反观其他一些企业,即使技术上比Intel高出一筹,但是如果只注重做单一的CPU、电脑产品而不重视发展软件生态,都很难坚持,像DEC、IBM、SGI就属于这类企业。即使是做兼容X86产品的AMD、威盛,也都因缺乏产业发展的主导权,只能是亦步亦趋地跟随Intel的脚步。

龙芯建设软件生态的核心工作,是为开发者提供优秀的开发工具,方便开发者快速生产高质量的软件产品。龙芯在操作系统和编程语言方面投入了大量研发工作。现在主流的开源编程语言都能够在龙芯电脑上运行,包括C/C++、Java、Python、PHP、Ruby、Go、JavaScript、Flash、OpenGL等。龙芯开发者对这些编程语言和相关工具进行了多年的深入优化,与龙芯CPU在架构和汇编语言层面高度磨合。

大量开源软件都在龙芯电脑上完成移植,像Qt图形库、Eclipse集成开发环境、Tomcat中间件、MySQL数据库等大型软件,都有可运行的二进制文件。甚至像Hadoop、Docker这样的云计算平台也都有龙芯开发者在维护。龙芯软件生态如图1-11所示。

龙芯开发者建立了应用商店,能够轻松获取大量的游戏、网络、视频等应用,如图1-12所示。

可以看到,龙芯软件生态已经非常完善,可选择的编程工具和组件十分齐备,非常适合于在信息化应用中作为桌面和服务器的解决方案。

提示!

软件生态是一个开放的集合,每一个硬件平台只有通过软件生态才能放大价值。经过多年的分分合合,如今IT领域的软件生态基本上是“两极化”:一个是“Wintel生态”,即微软Windows和Intel联合起来控制的桌面、服务器生态;另一个是“AA生态”,即ARM和Android体系联合控制的手机、平板电脑等移动计算生态。龙芯的长远目标是建立一个独立的IT技术生态体系,经过十多年的建设,现在已经有超过几百家合作伙伴,在龙芯电脑上进行开发的人员超过上万人,初步具备成体系的产业链与支撑服务能力。

1.5 龙芯开发者

1.5.1 两种程序员

在任何一个软件生态中,存在两种类型的开发者,也可以叫作两种程序员。一种叫作“系统软件程序员”,这种程序员主要面对的是操作系统本身,工作的目标是把操作系统平台打造好。另一种叫作“应用软件程序员”,他们工作的层面要比操作系统高一级,主要目标是开发无穷无尽的应用软件,每一种应用软件都使这个软件生态更加多姿多彩,如图1-13所示。

一般来说,系统软件程序员的技术门槛要高于应用软件程序员。由于系统软件和底层硬件结合非常紧密,需要开发者对硬件设备、操作系统、编译器、体系结构、汇编语言都要有清晰的了解,并且对于所开发软件的性能要求非常苛刻,只要是计算机专业的基础课程都能派上用场,所以要求开发者的“基础素质过硬”。而应用软件程序员的技术要求则相对简单一些,只需要弄清楚功能需求,使用Java、C/C++、Python等某一种面向应用程序的编程语言正确地实现功能,一般就能够胜任开发工作。正因为如此,市面有不少书籍传授“21天精通Java”,事实上只要稍加努力也不难做到,但是从来没有书籍号称“21天能够精通操作系统”,系统软件程序员需要阅读的书单如图1-14所示。

对于龙芯的开发者来说,系统软件的开发者当然可贵,而应用软件的开发者更为重要。因为系统软件的开发是有一定边界的,只要把操作系统做到功能齐全、稳定可靠,能够满足普遍的使用要求,一般不太会有持续开发的工作任务,这时候系统软件程序员基本就是“完成使命”了。而应用软件则是没有边界的,不同领域、行业都需要大量的应用软件来支撑业务运行,而且是随着需求变化而不断维护升级的。社会越发达、经济发展水平越高,对应用软件开发的需求则越大。

应用软件开发者不仅需要吃透传统的Java、C/C++等编程语言,还要掌握Web领域的JavaScript、HTML、CSS等语言,更要追赶jQuery、Bootstrap、AngularJS等框架,应用软件程序员需要阅读的书单如图1-15所示。

总的来说,应用软件程序员会比系统软件程序员的学习任务更重,在建设软件生态的道路上付出更多的劳动。经过十多年的积累,龙芯的操作系统已经基本达到稳定状态,后面的推广工作需要将大量X86电脑上的应用软件移植到龙芯电脑上,在这个阶段唱主角的显然是应用软件开发者。

1.5.2 怎样成为龙芯开发者

本书的写作目的就是为读者介绍龙芯电脑的操作系统、软件平台、编程环境,使读者能够在短时间内学会在龙芯电脑上开发应用软件的技术,进一步促进龙芯软件生态的繁荣。

想成为龙芯开发者非常简单,只要执行以下步骤,如图1-16所示。

STEP 1 获得一台龙芯电脑。由于龙芯 CPU 和 X86 是“不兼容的”,这个本质的不同点决定了不能在龙芯电脑上安装 Windows,也不能在 X86 电脑上安装 Loongnix。所以如果要进行Loongnix 的应用开发,购买一台龙芯电脑是必要的,前文已经介绍了通过开发者计划购买龙芯电脑的渠道。

STEP 2 在龙芯上电脑安装Loongnix。要熟悉基于Loongnix的开发环境,明白其和Windows开发环境的区别,以后就要在这样一个全新的环境中工作。

STEP 3 通过学习本书,掌握在龙芯电脑上开发应用软件的技术。如果读者只需要进行某种编程语言的开发,那么不必要从头到尾阅读全书,只需要直接跳到介绍这种语言的相关章节就可以学习开发。

STEP 4 通过实际案例不断增长经验。读者经过若干个项目的锻炼,对于龙芯电脑能够积累更多的使用经验和心得体会,这样就完成了从不熟悉到熟悉的转变,就会发现在龙芯电脑上开发应用的更多优势,以后会越来越喜欢龙芯电脑。

STEP 5 分享你的经验。可以在龙芯社区上注册账号,下载开发资料,与其他开发者进行交流,在获得一定的开发成果后则可以将之提交到社区上,让全世界的龙芯用户都能够受益于你的贡献,共同把龙芯生态建设得越来越好。

1.6 如何学习本书

只要有一定的经验,软件开发人员就可以在本书中找到合适的开发资料。如果想要快速胜任龙芯电脑的开发工作,一定的基础是必要的。

1.掌握Loongnix的基本使用方法

由于Loongnix根源于Linux,所以读者应事先掌握Linux的基本使用方法,尤其是对命令行工具要有一定的基础,市面上这类书籍已经很普及。如果读者在X86电脑的Linux操作系统中从事过软件开发,转型到龙芯电脑上后,面对的是一个熟悉的环境,不会遇到太大阻碍。

2.掌握若干通用的编程语言

由于龙芯电脑上的编程语言都是在开源领域流行的,所以本书不再从零开始讲述C/C++、Java、Go、Python的语法细节,而主要是讲述已经编写好的代码在龙芯电脑上的移植过程。如果读者需要深入学习这些语言,可以阅读专门的书籍。

3.动手完成项目案例开发

在案例部分会选用一些规模较大的实际项目,读者如果能够自己动手完成项目,亲眼看到整个项目的运行结果,对技术理解起来会更容易,也会得到更深刻的实际体会。

从下一章开始,我们将迈出在龙芯电脑上的第一步,安装Loongnix操作系统,开启一段通向新世界的旅途。

思考与问题

1.龙芯电脑能不能安装Windows?X86电脑能不能安装Loongnix?

2.龙芯CPU是基于什么指令集?

3.CPU都有哪些功能?

4.龙芯3A3000的性能达到什么水平?

5.为什么说龙芯电脑更安全?

6.龙芯为什么要建设软件生态?

7.系统软件程序员和应用软件程序员有什么区别?

8.龙芯的操作系统是基于什么开源软件移植的?

9.本章有一个“应用软件程序员的书单”(见图1-15),你对其中的哪些编程语言比较熟悉?

相关图书

操作系统抢分攻略 真题分类分级详解
操作系统抢分攻略 真题分类分级详解
统信UOS应用开发详解
统信UOS应用开发详解
统信UOS操作系统使用教程 (第2版)
统信UOS操作系统使用教程 (第2版)
统信UOS应用开发实战教程
统信UOS应用开发实战教程
统信UOS应用开发进阶教程
统信UOS应用开发进阶教程
FreeBSD操作系统设计与实现(第2版)英文版
FreeBSD操作系统设计与实现(第2版)英文版

相关文章

相关课程