MIPS体系结构透视(原书第2版)
作者 : Dominic Sweetman
译者 : 李鹏 鲍峥 石洋
丛书名 : 计算机科学丛书
出版日期 : 2008-05-26
ISBN : 7-111-23362-6
定价 : 48.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 326
开本 : 16开
原书名 :
原出版社:
属性分类: 教材
包含CD :
绝版 :
图书简介

大多数“体系结构概览”类的书籍对体系结构的汇编语言语焉不详,只是给出令人厌烦的概述。然而,本书却是一个典型的反例,为所有这类书的作者树立了一个榜样。作者不但提供了体系结构参考所必需的细节,还以对关键体系结构特点(及其原理)富有洞察力的视角表达出这些细节。
  无论对于通用的计算机还是对于MIPS来说,本书都是非常有用的书籍。它阐述了渗入到体系结构发展中的技术、经济和历史和政治等因素。
  第2版的一个重要补充涉及操作系统、移植以及ABI等问题。本书对于软件开发者来说是一本优秀的参考书。任何从事MIPS体系结构相关工作的人都会乐于拥有这本书。
  ——Randy Allen,Catalytic公司的创始人和首席技术官

  本书是任何MIPS体系结构参考手册的极好伴侣。本版延续了第1版的传统,通过具体实例强调硬件/软件接口。另外,第2版增加了最新的从MIPS-I/V体系结构到MIPS-32/64体系结构的转变,其中包括支持多线程的体系结构。总之,这是任何热衷MIPS体系结构的程序员的必备书籍。
   ——Jan-Willem van de Waerdt,飞利浦半导体研究院

  第2版不仅对第1版进行了彻底的更新,而且将应用广泛的RISC系统结构MIPS与开源操作系统Linux结合在一起。本书的第一部分从MIPS设计原理开始,进而阐述MIPS指令集和程序员资源。书中以MIPS 32/MIPS64标准为基准,对其他体系结构进行了比较。
  与第1版相比,第2版的显著变化是封面图片的小企鹅坐在驾驶员的位置上,本书以此作为研究来自Linux内核的真正的低层操作系统的实例,展示Linux(包括单处理器和SMP)如何构建于MIPS体系结构所提供的基础之上。本书从操作系统的底层(中断、内存调度)开始,进而描述Linux/MIPS应用代码如何载入到内存、连接到库并运行。

图书特色

图书前言

这是一本关于MIPS的书。MIPS是20世纪80年代中期对于RISC CPU设计的狂热追求下的产物。这些年来,在32位处理器中,MIPS的销量虽然不是最大的,但是它却稳居第二位。MIPS的骄人之处在于它所获得的广泛应用。一件内置MIPS CPU的设备可能是一台35美元的无线路由器,也可能是一台价值几十万美元的SGI超级计算机(尽管随着SGI的破产,这些产品已经走到了尽头)。在这两端之间还有索尼和任天堂的游戏机,许多思科的路由器,电视机的机顶盒,激光打印机等等。
  本书第1版的英文版本这些年来的销量接近10 000本,并被翻译为中文,我非常高兴,也非常惊讶,我没想到在美国之外还有如此多的MIPS程序员。
  第2版是MIPS/Linux系统透视。第1版在分析MIPS体系结构的一些特性时有些吃力,因为除非你明白它们如何在操作系统内核中发挥作用,否则没有任何意义。然而,现在许多人都对Linux如何工作有所了解,我可以引用它的源代码,更重要的是,我在谈到它时知道,对它感兴趣的你们可以阅读源代码并且发现它实际上是如何工作的。
  因此,这是一本关于MIPS体系结构的书,但是最后三章涉及Linux内核和应用程序,以说明那些古怪的特征如何起作用。我希望Linux专家原谅我相对忽略了Linux细节,因为描述一个运行在实际体系结构中的实际操作系统这样的机会更让我难以割舍。
  MIPS是一个RISC,一个有用的首字母缩写,它是20世纪80年代发明的许多计算机体系结构的普遍特征,RISC代表了高效率流水线的实现。而首字母缩写CISC则是含糊的。狭义而言,CISC代表着x86和其他1982年前出现的体系结构,那时的人们老想着微码设计。
  你们中有些人可能要举手了:他在混淆实现与体系结构之间的关系!而事实上,计算机体系结构既被看作是与程序员之间的约定—什么样的程序可以在它上面正确运行,本质上,它又是地地道道的工程设计,因为计算机体系结构是为制造好的CPU而设计的。随着芯片设计变得越来越复杂,对体系结构设计者而言,是约定重要还是工程实现重要,其中的权衡恐怕是不一而足。
  本书是写给程序员的,这是我们用来决定本书应该包括什么内容的标准—如果程序员希望看到或者可能感兴趣,这些就被包括进来了。诸如折磨了两代硬件设计工程师的MIPS系统接口这样的对程序员而言陌生的问题不在本书讨论之列。另外,你的操作系统可能隐藏了许多这里讨论的细节,还有许多优秀的程序员认为C语言本身就是相当底层的了,并且具有很好的可移植性,所以没必要对体系结构作详细的了解。但是有的时候,确实需要深入到体系结构中具体的细节—人类生来就爱追根刨底。
  这种导向的一个结果是当描述软件工程师不熟悉的东西,特别是CUP内部工作时,我们倾向于通俗的表达方式,而当处理程序员以前遇到过的部分,例如寄存器、指令以及数据在内存中如何储存时,我们会更加简洁和专业。
  本书假设读者对C语言非常熟悉。书中很多相关材料用C代码片段来简化语言描述,特别是在介绍指令集和汇编语言细节的章节中。
  书中部分内容是针对看过一些汇编语言的读者。透过汇编语言才能充分领略MIPS体系结构的精巧和古怪。但对于完全不懂汇编的读者,也没有太大的关系。
  本书旨在告诉读者对于编程通用MIPS CPU,你需要知道的一切。更确切地说,它描述了MIPS Technologies公司定义的MIPS32和MIPS64体系结构,具体而言,是指自2003年以来发布的第2版标准规范,缩写为“MIPS32/64”。这不仅是一个参考手册,要记住一个体系结构意味着全面地理解它。我也希望想要全面理解现代CPU体系结构的正在学习编程的学生们(在大学中或者在社会这所大学校当中)对本书感兴趣。
  如果你计划从头到尾将此书读上一遍,你一定希望从整体到细节的逐步深入,对于这一点你是不会失望的。你还会看到一些MIPS历史的演进;当我们第一次谈论一个概念时,侧重于第1个版本,Hennessy和Patterson称这种方法为“从演进中学习”,对他们有益的我想也一定会对我有益。
第1章从一些历史和背景开始,通过讨论当初MIPS的发明者们在头脑中最初形成的技术考虑和观念,将MIPS引进来。在接下来的第2章中,继续跟随他们的思路讨论MIPS机器语言的特点。
为了帮助读者看到更广阔的图景,直到第3章才开始讨论处理器的控制细节,介绍MIPS CPU用以控制它的缓存、异常和启动,以及内存管理,貌似丑陋实则极其实用。最后三个题目分别成为第4章~第6章的主题。
MIPS体系结构非常小心地剥离出指令集中处理浮点数运算的部分,从而使MIPS CPU形成对不同层次浮点运算的支持,从完全没有到部分实现再到近乎完全实现。因此,这里也将浮点函数剥离开来,直到第7章才介绍。
到这时,章节安排遵循认识MIPS的合理顺序。随后的章节改变了方向,更像参考手册或者实例教程。
在第8章,我们介绍整个机器指令集,目的是要精确,并且要比标准的MIPS参考手册更加简明。在短短几页中包含了其他资料里上百页的内容。第9章是对阅读和编写汇编语言的简要介绍,比汇编程序手册简短得多。
第10章是帮助的建议清单,针对需要在其他CPU和MIPS CPU之间移植软件的读者。其中最长的一节专门用来讲解在CPU、软件和系统中令人棘手的大小尾端问题。
第11章是简要的软件约定(寄存器使用、参数传递等)的总结。为了使来自不同开发环境下的软件之间可以交互,这些个约定是必需的。第12章介绍了调试和MIPS CPU的标准轮廓特性。
然后,我们来看MIPS是如何运行GNU/Linux的。第13章描述了Linux内核和计算机体系结构的关系,第14章和第15章深度挖掘了关于MIPS体系结构如何满足Linux内核需要的一些细节。第16章简要浏览了一下GNU/Linux应用程序是如何与动态链接库进行动态链接的。
附录A包括MIPS MT(多线程)扩展,它可能在很多年中都是体系结构最重要的扩展。附录B描述更加重要的增补:MIPS 16、新的MIPS DSP扩展以及MDMX。
在本书的最后有一个术语表—寻找专业的、不熟悉的词汇和首字母缩写的好地方,以及进一步阅读需要的书籍、文章列表以及在线参考资料。
风格和限制
每本书都体现了作者的风格,所以我最好说说本书的特点。
因为读者当中有一些学生,所以我考虑要不要将通用用法和MIPS特定用法分开。我决定不这样做。我针对的就是MIPS特定内容,除非对读者一般没什么用。我也尽量写得具体而不那么抽象。不会过多关心像“TLB”这样的术语在更广阔领域中的意思,只在MIPS背景下解释它们。人类是很好的归纳者,具体的解释不会妨碍读者学得更多。
从1986年秋天我开始MIPS CPU方面的工作已经20年了。书中的一些资料可以追溯到1988年,那时我刚开始进行MIPS体系结构的培训课程。在1993年,我把它们汇集成重点针对IDT的R3051家族CPU的软件手册。增加很多额外的资料后产生了本书的第1版,于1999年出版。
1999年以来发生了很多事情。现在,MIPS在SGI服务器上已经处于生存的边缘,但在嵌入式系统上开拓了很多重要的领域。Linux作为嵌入式MIPS最常用的OS出现,但是在嵌入式市场仍然有很多其他操作系统。MIPS规范在MIPS32和MIPS64获得认可(本版将它们作为基准)。完成第2版大约花了3年的时间。
MIPS的故事仍在继续,如果不是,我们只是为历史学家写这本书了,Morgan Kaufmann对出版本书并不十分感兴趣。2005年底以后发布的MIPS进展对本书来说已经太晚了。
致谢
本书的主题伴随了我的计算机生涯。Mike Cole使我对计算机产生了激情,从那以后我一直努力模仿他选择好观点的技能。在Whitechapel Workstations 短暂但激动人心的日子里(1983~1988年),许多同事教我关于计算机体系结构以及如何设计硬件,Bob Newman 和Rick Filipkiewicz可能是教得最多的。我要感谢Whitechapel的销售人员Dave Gravell,他最早使我转向MIPS。我还要双倍感谢在Algorithmics公司存在期间的伙伴工程师(Chris Dearman,Rick Filipkiewicz,Gerald Onions,Nigel Stephens和Chirs Shaw)为我从数不清的讨论、争论和设计中所学到的,以及忍受本书对我时间的占用。
许多感谢应给予审阅者,他们花了很长一段时间来阅读各章节:Integrated Device Technology公司的Phil Bourekas、LSI Logic公司的Thomas Daniel、Silicon Graphics公司的Mike Murphy以及Carnegic Mellon 大学的David Nagle。
对于本书的第2版:我已经认识Paul Cobb很长一段时间了,我们都在MIPS公司工作。Paul提供了资料更新MIPS CPU的历史演进和编程章节,整理了参考书目。尽管如此,无论如何是我做了最后的修订,因此,任何错误都是我的。
在准备这一版的时候,我受雇于MIPS Technologies公司。挑选一些同事感谢而没有感谢其他人是非常危险的,但无论如何我将这样做。
Ralf Baechle维护了www.linux-mips.org网站,该网站协调MIPS上的Linux内核。他对于驱散我对Linux形成的一些幻想很有帮助:我本认为它就像其他的操作系统一样……(Robert Love的《Linux Kernal Development》一书也有帮助,我要向需要内核教育指导书的人们热切地推荐它)。感谢MIPS Technologies和我的多个经理为我提供具有弹性的工作时间,感谢MIPS Technologies的同事们(太多了没办法写出名字),他们阅读了书稿并给出了评论。
Todd Bezenek是本书最坚持的同事/审阅者。MIPS Technologies公司外的审阅者因为热爱和尊敬这一领域而做这一工作:最显著的贡献者是Steven Hill (Reality Diluted公司), Jun Sun (DoCoMo USA实验室), Eric Devolder和Sophie Wilson。
Denise Penrose无疑是最好的编辑。在Finsbury公园(我的家在北伦敦),没有许多人可以说他们飞到旧金山只是为了同出版商吃早餐。
最后当然要最感谢的是Carol O誃rien, 她在这次重写的过程中仓促地嫁给了我。

封底文字

大多数“体系结构概览”类的书籍对体系结构的汇编语言语焉不详,只是给出令人厌烦的概述。然而,本书却是一个典型的反例,为所有这类书的作者树立了一个榜样。作者不但提供了体系结构参考所必需的细节,还以对关键体系结构特点(及其原理)富有洞察力的视角表达出这些细节。 无论对于通用的计算机还是对于MIPS来说,本书都是非常有用的书籍。它阐述了渗入到体系结构发展中的技术、经济和历史和政治等因素。 第2版的一个重要补充涉及操作系统、移植以及ABI等问题。本书对于软件开发者来说是一本优秀的参考书。任何从事MIPS体系结构相关工作的人都会乐于拥有这本书。 ——Randy Allen,Catalytic公司的创始人和首席技术官 本书是任何MIPS体系结构参考手册的极好伴侣。本版延续了第1版的传统,通过具体实例强调硬件/软件接口。另外,第2版增加了最新的从MIPS-I/V体系结构到MIPS-32/64体系结构的转变,其中包括支持多线程的体系结构。总之,这是任何热衷MIPS体系结构的程序员的必备书籍。 ——Jan-Willem van de Waerdt,飞利浦半导体研究院 第2版不仅对第1版进行了彻底的更新,而且将应用广泛的RISC系统结构MIPS与开源操作系统Linux结合在一起。本书的第一部分从MIPS设计原理开始,进而阐述MIPS指令集和程序员资源。书中以MIPS 32/MIPS64标准为基准,对其他体系结构进行了比较。 与第1版相比,第2版的显著变化是封面图片的小企鹅坐在驾驶员的位置上,本书以此作为研究来自Linux内核的真正的低层操作系统的实例,展示Linux(包括单处理器和SMP)如何构建于MIPS体系结构所提供的基础之上。本书从操作系统的底层(中断、内存调度)开始,进而描述Linux/MIPS应用代码如何载入到内存、连接到库并运行。

图书序言

MIPS体系结构是在20世纪80年代早期从斯坦福大学John Hennessy教授和他的学生们的工作中诞生的。他们探寻了精简指令集(RISC)体系结构概念,该概念基于如下理论:使用相对简单的指令,结合优秀的编译器以及采用流水线执行指令的硬件,就可以用更少的晶元面积生产更快的处理器。这一概念如此成功以致于1984年就成立了MIPS计算机系统公司对MIPS体系结构进行商业化。
  在以后的14年里,MIPS体系结构在很多方面得到发展,在工作站和服务器系统中应用得非常成功。在这段时间里,这一体系结构和它的实现得到加强来支持64位寻址和操作,支持复杂的内存保护操作系统,例如UNIX,以及非常高性能的浮点运算。也是在这段时间里,MIPS计算机系统公司被SGI公司收购,MIPS处理器成为了SGI计算机系统的标准。凭借64位处理器、高性能的浮点运算和SGI公司的遗产,MIPS处理器成为了大批量游戏控制台选择的解决方案。
  在1998年,MIPS Technologies公司从SGI公司中分离出来,作为一个单独的公司,将全部精力集中在嵌入式市场的知识产权。相应的结果是,体系结构发展的脚步不断加快以满足这些市场的特殊需求:高性能计算、代码压缩、图形的几何处理、安全、信号处理和多线程。每个体系结构的发展都伴随着该体系结构的处理器内核的实现,这使得基于MIPS的处理器成了高性能、低功耗应用的标准。
  MIPS在工作站和服务器等复杂系统中的应用传统直接有助于今天变得十分复杂的嵌入式系统。一个典型的嵌入式系统由多个处理单元、高性能内存以及一个或多个操作系统组成。与尚在研究建立一个复杂系统需要什么的其他嵌入式体系结构相比,MIPS体系结构早已经提供了一个实现这样的系统的基准方案。
  在很多方面,第1版《See MIPS Run》是具有开创性的关于MIPS体系结构及其实现的书。尽管其他书籍也有类似内容,但是《See MIPS Run》的重点放在程序员需要理解的体系结构和对MIPS芯片有效编程的软件环境上。
  嵌入式系统变得越来越复杂,MIPS体系结构的改进满足了这些系统的需求。本书的第2版对任何目前基于MIPS嵌入式系统的开发者都是必读的书。本版增加了大量的新内容,包括MIPS32和MIPS64体系结构的标准化,崭新的应用特定扩展(如多线程),以及流行的Linux操作系统在MIPS体系结构上的出色实现。除了MIPS体系结构规范,本书第2版是反映MIPS体系结构的最新发展的一部力作,可读性也最强。
  我希望你将发现本书是值得一读且读来有趣的,如我的感受一样。

  Michael Uhler
  MIPS Technologies公司首席技术官
  Mountain View,CA
  2006年5月

作者简介

Dominic Sweetman:Dominic Sweetman: 是一名有经验的硬件系统、CPU、网络和操作系统设计者和开发者,他的丰富经验来自于低层编码、操作系统开发、局域网、分布式系统。他是Whitechapel Workstations的创立者之一,并在1988年创建了一家MIPS咨询公司——Algorithmics。

译者简介

李鹏 鲍峥 石洋:暂无简介

译者序

“世界潮流,浩浩荡荡,顺之者昌,逆之者亡”。孙中山先生这句名言道出了伟人的睿智与对真理的不倦追求。从中我们可以体会到,成功不仅取决于个人的努力,更取决于世界潮流这个大平台。在计算机工程领域,我们可以清楚地观察到,近年来在世界范围内,计算机微处理器等芯片的设计与制造产业中心有向中国转移的趋势:在中高端芯片领域,龙芯处理器的研发进展喜人;在中低端芯片领域,中星微、珠海矩力等IC设计公司已实现大规模生产;在晶圆代工领域,中芯国际的赶超国际先进技术水平的速度也越来越快。“单点突破”正在成为历史,中国芯片产业已经初步形成一个“闭环”,“生态圈”雏形已经形成。作为计算机体系结构领域的研究人员与工程技术人员,面对如此形势,更要努力学习、深入研究与开发,顺应浩浩荡荡的世界潮流。
  与计算机微处理器中其他流行体系结构相比,MIPS体系结构在商业上绝不是最成功的。但作为最早的RISC微处理器以及较早的超标量与64位微处理器,MIPS体系结构有着辉煌的过去。现在,在网络设备、多媒体与娱乐设备以及办公自动化设备等领域,MIPS系列微处理器仍占有主要的市场份额。未来在多核处理器与嵌入式设备普及的背景下,相信MIPS体系结构凭借其内在的简洁性与低功耗特性仍会发出耀眼的光芒。因此,国内许多大学与科研院所的微处理器研究就是从MIPS体系结构为起点开展的。
  本书的译者都是在计算机体系结构相关领域学习与工作的年轻技术人员,包括参与清华大学MIPS兼容微处理器THUMP研发的李鹏博士、AMD北京研发中心的软件高级研发工程师鲍峥、美国风河系统公司的高级工程师石洋、中国科学院博士后汪福全。几位译者同时又是亚嵌教育中心(www.akaedu.org)的技术顾问,在该中心组织的关于嵌入式的学习与交流中,产生了翻译本书的想法。本书是关于MIPS体系结构最经典的教材,也是译者视野范围内关于处理器体系结构设计与实现的最经典的书籍之一。尤其可贵的是,本书的第2版使用最流行的Linux开源操作系统,说明计算机软件与硬件的接口,使读者对计算机体系结构以及其对操作系统等系统软件的支持有了更直观与具体的印象。译者在翻译本书的过程中也学到了许多原理与知识。本书不但内容丰富,而且语言优美,风趣幽默,深入浅出,对复杂的技术细节娓娓道来,读起来生动而有趣。然而,这对译者来说,特别是像本书这样以工程技术为背景的译者来说,就是一件头疼的事了。译者在保证传达作者真实的技术意图的同时,尽量保留其语言风格。但是,由于水平有限,难免有画虎不成反类犬的情况,敬请读者谅解。
  本书的翻译与校对分工如下:序言、前言、第1章、第2章和第3章由李鹏翻译,汪福全校对。第4章和第5章由石洋翻译,汪福全校对。第6章和第7章由李鹏翻译,汪福全校对。第8章、第9章、第10章和第11章由鲍峥翻译,李鹏校对。第12章由鲍峥翻译,汪福全校对。第13章由鲍峥翻译,石洋校对。第14章和第15章由李鹏翻译,石洋校对。第16章、附录A、附录B和术语表由李鹏翻译,鲍峥校对。AKA信息技术小组的何家胜先生参加了本书的校对工作。
  本书的翻译工作得到了亚嵌教育中心(AKA)信息技术小组的郎铁山先生与机械工业出版社华章分社的大力支持。他们的精心策划、热情的鼓励与大力支持,以及认真细致的工作,使本书的翻译工作得以最终顺利地完成。他们对工作的认真态度值得我们学习。我们在翻译的过程中借鉴了本书第1版。在此,对第1版的译者赵俊良、张福新、陶品等各位先生表示感谢。最后,我们衷心地感谢家人、师长、同事以及朋友的鼎立支持。
  
  译者
  2008年1月

推荐序

There is no doubt the first ee MIPS Run?translation was widely popular amongst MIPS fans in China. I am sure this second version with an emphasis in Linux will even be more popular as MIPS is known to be 襱he Linux in the embedded world? Over the last three years since MIPS Technologies entered China and setup their Shanghai Engineering office by Mr. Ho Ying Wai, a veteran MIPS engineering Director from their Mountain View HQ, I have seen good success in the use of the MIPS architecture such as the licensing by China誷 #1 semiconductor company in Zhuhai誷 Actions for PMP devices. Your efforts have helped to provide more reference material for MIPS users and students in Chinese. May I wish you all continual success in your contributions to the industry! 祝贺《MIPS体系结构透视》第2版中文译本面世。 《MIPS体系结构透视》第1版的中文译本无疑在中国的MIPS迷中很受欢迎。我确信本书的第2版因为更加侧重Linux应用将会受到更多的欢迎,就像在嵌入式领域,MIPS体系结构广受各种Linux应用欢迎一样。 三年前,MIPS Technologies进入中国,来自Mountain View总部的资深MIPS主任工程师Ho Ying Wai先生也在上海建立了工程办公室。三年来,我见证了MIPS体系结构应用方面的重大成功,例如中国最大的半导体公司珠海炬力在PMP设备中的授权使用。你们的努力已经为MIPS用户和学生提供了更多的中文参考资料。 衷心祝愿你们对工业界的贡献获得持续成功! Kin Lai(黎庆生) 2008年3月

图书目录

出版者的话
专家指导委员会
推荐序
译者序
序言
前言
第1章 RISC和MIPS 1
1.1 流水线 1
1.1.1 什么使流水线效率降低 3
1.1.2 流水线和缓存 3
1.2 MIPS的五段流水线 4
1.3 RISC和CISC 5
1.4 迄今为止一些重要的MIPS芯片 6
1.4.1 R2000处理器到R3000处理器 6
1.4.2 R6000处理器:一次偏轨 7
1.4.3 第一批CPU内核 8
1.4.4 R4000处理器:一次革命 8
1.4.5 ACE联盟的兴衰 9
1.4.6 SGI收购MIPS 9
1.4.7 QED:嵌入式系统中的快速MIPS处理器 9
1.4.8 R10000处理器和它的后继者 10
1.4.9 消费类电子产品中的MIPS处理器 10
1.4.10 网络路由器和激光打印机中的MIPS 11
1.4.11 现代的MIPS处理器 12
1.4.12 MIPS Technologies的重生 14
1.4.13 现状 14
1.5 MIPS和CISC体系结构的比较 16
1.5.1 对MIPS指令的各种限制 16
1.5.2 编址及内存访问 17
1.5.3 MIPS不支持的特性 18
1.5.4 程序员可见的流水线效果 19
第2章 MIPS体系结构 21
2.1 MIPS汇编语言的风格 23
2.2  寄存器 24
2.3 整数乘法单元和寄存器 26
2.4 加载和存储:寻址方式 27
2.5 存储器和寄存器中的数据类型 27
2.5.1 整数数据类型 28
2.5.2 未对齐的加载和存储 28
2.5.3 内存中的浮点数据 29
2.6 汇编语言中的合成指令 29
2.7 MIPSⅠ发展到MIPS 64指令集:64位(和其他)的扩展 30
2.7.1 迈向64位 31
2.7.2 谁需要64位 31
2.7.3 关于64位与无模式转换:寄存器中的数据 32
2.8 基本地址空间 33
2.8.1 简单系统的寻址 35
2.8.2 核心与用户特权级别 35
2.8.3 整体视图:内存映射的64位视图 35
2.9 流水线的可见度 36
第3章 协处理器0:MIPS处理器控制 38
3.1 CPU控制指令 40
3.2 相关寄存器与时序 41
3.3 CPU控制寄存器及其编码 42
3.3.1 状态寄存器(SR) 42
3.3.2 原因寄存器 46
3.3.3 异常返回地址(EPC)寄存器 48
3.3.4 无效虚地址(BadVaddr)寄存器 48
3.3.5 计数/比较寄存器(Count/Compare):CPU上的计时器 48
3.3.6 处理器ID(PRId)寄存器 48
3.3.7 配置(Config)寄存器:CPU资源信息与配置 49
3.3.8 EBase和IntCtl:中断与异常设置 51
3.3.9 SRSCtl和SRSMap:影子寄存器设置 52
3.3.10 链接加载地址(LLAddr)寄存器 53
3.4 CP0冒险—不经意间的陷阱 53
3.4.1 冒险屏障指令 54
3.4.2 指令冒险与用户冒险 54
3.4.3 CP0指令之间的冒险 55
第4章 MIPS处理器的高速缓存 56
4.1 高速缓存和高速缓存的管理 56
4.2 高速缓存怎样工作 56
4.3 早期MIPS CPU中的写透式高速缓存 59
4.4 MIPS CPU中的写回式高速缓存 59
4.5 高速缓存设计的其他选择 59
4.6 管理高速缓存 60
4.7 二级和三级高速缓存 62
4.8 MIPS CPU高速缓存的配置 62
4.9 编程MIPS32/64高速缓存 63
4.9.1 Cache指令 64
4.9.2 高速缓存初始化和Tag/Data寄存器 66
4.9.3 CacheErr, ERR和ErrorEPC寄存器:
内存/高速缓存的错误处理 66
4.9.4 计算高速缓存大小和配置方式 67
4.9.5 初始化例程 67
4.9.6 在高速缓存中无效或写回一个内存区域 68
4.10 高速缓存效率 69
4.11 重组软件来影响高速缓存效率 70
4.12 高速缓存别名 71
第5章 异常、中断和初始化 74
5.1 精确异常 75
5.2 异常发生时刻 76
5.3 异常向量:异常处理开始的地方 77
5.4 异常处理:基础 79
5.5 从异常返回 79
5.6 嵌套异常 80
5.7 一个异常处理例程 80
5.8 中断 80
5.8.1 MIPS CPU中的中断资源 81
5.8.2 通过软件实现中断优先级 82
5.8.3 原子性和SR的原子改变 83
5.8.4 中断使能时的临界区:MIPS中的信号量机制 84
5.8.5 MIPS32/64中向量化和EIC中断 86
5.8.6 影子寄存器 86
5.9 启动 86
5.9.1 探测和识别CPU型号 88
5.9.2 启动序列 89
5.9.3 启动一个应用程序 89
5.10 模拟指令 89
第6章 底层内存管理与TLB 91
6.1 TLB/MMU硬件和它的功能 91
6.2 TLB/MMU的寄存器描述 92
6.2.1 TLB关键字域—EntryHi和
PageMask 92
6.2.2 TLB输出域—EntryLo0-1 94
6.2.3 选择一个TLB表项—Index,
Random和Wired寄存器 95
6.2.4 页表访问助手—Context和
XContext 95
6.3 TLB/MMU的控制指令 97
6.4 对TLB编程 97
6.4.1 如何进行重填 98
6.4.2 使用ASID 98
6.4.3 Random寄存器与被锁定表项 99
6.5 硬件友好的页表和重填机制 99
6.5.1 TLB缺失处理 100
6.5.2 XTLB的缺失处理函数 101
6.6 MIPS TLB的日常使用 102
6.7 更简单操作系统中的内存管理 102
第7章 浮点支持 104
7.1 浮点的基本描述 104
7.2 IEEE 754标准及其背景 104
7.3 怎样存储IEEE浮点数 106
7.3.1 IEEE尾数和规格化 106
7.3.2 使用特殊值时的预留指数值 107
7.3.3 MIPS浮点数据格式 107
7.4 IEEE 754的MIPS实现 108
7.5 浮点寄存器 109
7.6 浮点异常/中断 110
7.7 浮点控制:控制/状态寄存器 110
7.8 浮点实现寄存器 113
7.9 浮点指令指南 114
7.9.1 加载/存储 114
7.9.2 寄存器间的传递 115
7.9.3 三操作数算术运算 116
7.9.4 乘加运算 116
7.9.5 一元(改变符号)运算 116
7.9.6 转换操作 117
7.9.7 条件分支和测试指令 117
7.10 成对单精度浮点指令和
MIPS-3D ASE 119
7.10.1 成对单精度指令的异常 119
7.10.2 成对单精度的三操作数算术、乘加、
改变符号和无条件移动操作 119
7.10.3 成对单精度转换操作 119
7.10.4 成对单精度测试和条件移动指令 120
7.10.5 MIPS-3D指令 121
7.11 指令时序需求 122
7.12 指令加速的时序 123
7.13 按需初始化和使能 123
7.14 浮点仿真 124
第8章 MIPS指令集完全指南 125
8.1 一个简单的例子 125
8.2 汇编指令及其含义 126
8.2.1 U和非U助记符 127
8.2.2 除法助记符 128
8.2.3 指令的详细清单 128
8.3 浮点指令 145
8.4 MIPS32/64发行版1的区别 150
8.4.1 在发行版2中加入的常规指令 150
8.4.2 发行版2新加入的特权指令 151
8.5 特殊指令和它们的用途 151
8.5.1 向左加载/向右加载:地址非对
齐的存取操作 151
8.5.2 链接加载/条件存储 155
8.5.3 条件传递指令 156
8.5.4 可能分支指令 157
8.5.5 整数乘累加指令和乘加指令 157
8.5.6 浮点乘加指令 158
8.5.7 多浮点条件标志位 158
8.5.8 缓存数据预取 159
8.5.9 存取内存屏障:Sync指令 159
8.5.10 冒险屏蔽指令 160
8.5.11 Synci:指令写入的缓存管理 161
8.5.12 读取硬件寄存器 161
8.6 指令的机器编码 162
8.6.1 指令编码表中的域 162
8.6.2 指令编码表的注意事项 163
8.6.3 编码方式和处理器的简单实现 163
8.7 指令集的功能分组 180
8.7.1 空操作 180
8.7.2 寄存器间的数据传递指令 180
8.7.3 常数加载指令 181
8.7.4 算术/逻辑操作指令 181
8.7.5 整数乘法、除法以及求余指令 182
8.7.6 整数乘累加指令 183
8.7.7 存取指令 184
8.7.8 跳转、分支和子程序调用指令 185
8.7.9 断点及陷阱指令 186
8.7.10 协处理器0功能 186
8.7.11 浮点操作指令 187
8.7.12 用户模式下对“底层”硬件的
有限访问 187
第9章 阅读MIPS汇编语言 188
9.1 一个简单的例子 188
9.2 句法 191
9.3 指令的约定 192
9.3.1 计算指令:3寄存器、2寄存器和
1寄存器 192
9.3.2 立即数:带常量的计算指令 192
9.3.3 关于64位和32位指令 193
9.4 寻址模式 193
9.5 目标文件和内存布局 195
第10章 在MIPS体系结构上移植软件 198
10.1 MIPS应用的底层软件:经常会遇到
问题的列表 198
10.2 尾端:字、字节和位的顺序 199
10.2.1 位、字节、字和整数 199
10.2.2 软件和尾端 201
10.2.3 硬件和尾端 203
10.2.4 MIPS CPU的双尾端软件 206
10.2.5 可移植性和尾端无关代码 207
10.2.6 尾端和外来数据 208
10.3 可见缓存的问题 208
10.3.1 缓存管理和DMA数据 210
10.3.2 缓存管理和写指令:自修改
代码 210
10.3.3 缓存管理和非缓存或写透数据 211
10.3.4 缓存别名和页面着色 211
10.4 存储访问顺序和重排 211
10.4.1 排序与写缓冲 213
10.4.2 实现wbflush 213
10.5 写C程序 214
10.5.1 用GNU C编译器包装汇编代码 214
10.5.2 映射为内存的I/O寄存器和“Volatile” 215
10.5.3 用C写MIPS应用程序的其他
问题 216
第11章 MIPS软件标准(ABI) 218
11.1 数据表示和对齐 218
11.1.1 基本类型的大小 219
11.1.2 “long”型和指针型数据大小 219
11.1.3 对齐要求 219
11.1.4 基本类型的内存布局和尾端如何
产生影响 219
11.1.5 内存的布局结构、数组类型和
对齐 220
11.1.6 结构中的位域 221
11.1.7 C中的不对齐数据 223
11.2 参数传递以及MIPS ABI中的
堆栈约定 223
11.2.1 堆栈、子例程链接和参数传递 223
11.2.2 o32的堆栈参数结构 224
11.2.3 使用寄存器传递参数 224
11.2.4 C库中的例子 225
11.2.5 特殊的例子:传递结构 226
11.2.6 传递可变参数 226
11.2.7 函数返回值 227
11.2.8 扩展寄存器-使用约定:SGI
n32和n64 227
11.2.9 堆栈布局、堆栈帧和辅助调试器 230
11.2.10 可变参数和stdargs 235
第12章 调试MIPS设计—调试和剖析
特性 236
12.1 “EJTAG”片上调试单元 237
12.1.1 EJTAG历史 238
12.1.2 探头如何控制CPU 238
12.1.3 通过JTAG调试通信 239
12.1.4 调试模式 239
12.1.5 单步 240
12.1.6 dseg内存译码区域 240
12.1.7 EJTAG CP0寄存器,特殊调试 242
12.1.8 DCR(调试控制)内存映射
寄存器 244
12.1.9 EJTAG断点硬件支持 244
12.1.10 理解断点条件 246
12.1.11 非精确调试断点 247
12.1.12 PC取样与EJTAG 247
12.1.13 使用没有探头的EJTAG 247
12.2 EJTAG之前的调试支持—break
指令和CP0观察点 248
12.3 PDtrace 249
12.4 性能计数器 249
第13章 GNU/Linux概览 251
13.1 组件 251
13.2 内核代码的层次 254
13.2.1 异常模式下的MIPS CPU 254
13.2.2 屏蔽部分或全部中断的
MIPS CPU 254
13.2.3 中断上下文 255
13.2.4 线程上下文中执行内核 255
第14章 硬件与软件如何协同工作 256
14.1 中断的生命周期 256
14.2 线程、临界区和原子性 258
14.2.1 MIPS体系结构和原子操作 259
14.2.2 Linux自旋锁 260
14.3 系统调用时发生了什么 260
14.4 Linux/MIPS系统如何进行
地址翻译 262
14.4.1 为什么进行内存翻译 263
14.4.2 基本进程布局与保护 265
14.4.3 映射进程地址到真实内存 265
14.4.4 选择页式映射 266
14.4.5 我们真正需要的 266
14.4.6 MIPS设计的起源 268
14.4.7 记录被修改的页面(模拟
“脏”位) 270
14.4.8 内核如何服务一个TLB重填
异常 270
14.4.9 TLB的注意事项与维护 273
14.4.10 内存翻译与64位指针 273
第15章 Linux内核中的MIPS特有
问题 275
15.1 显式缓存管理 275
15.1.1 DMA设备访问 275
15.1.2 写入指令稍后执行 276
15.1.3 缓存/内存映射问题 276
15.1.4 缓存别名 277
15.2 CP0流水线冒险 277
15.3 多处理器系统与一致性缓存 278
15.4 对一个关键例程的极度优化
调整 280
第16章 Linux应用程序代码、PIC和库 282
16.1 链接单元如何进入程序 283
16.2 全局偏移表(GOT)组织 283
附录A MIPS多线程 286
附录B MIPS指令集的其他可选扩展 292
MIPS术语表 296
参考文献 324

教学资源推荐
作者: 袁静波 丁顺利 宋欣 王和兴 编著
作者: Arnold S. Berger
作者: (美)Peter Barry Intel公司  Patrick Crowley 华盛顿大学圣路易斯分校 著
参考读物推荐
作者: (美)Sun Microsystems, Inc
作者: Douglas Schmidt,Michaes Stal,Hans Rohnert,Frank Buschmann
作者: Mark Artiges等