GithubHelp home page GithubHelp logo

foxsen / archbase Goto Github PK

View Code? Open in Web Editor NEW
2.9K 43.0 275.0 190.21 MB

教科书《计算机体系结构基础》(胡伟武等,第三版)的开源版本

License: Other

Makefile 3.90% TeX 68.56% CSS 0.58% C 15.49% Assembly 9.20% Dockerfile 2.26%

archbase's Introduction

计算机体系结构基础

这是龙芯团队胡伟武老师等人编写的《计算机体系结构基础》(第三版)的开源版本。本书纸质版本由机械工业出版社发行,可以通过各种常规渠道购买。

内容提要

本书由从事微处理器设计的一线科研人员编写而成。作者从微处理器设计的角度出发,充分考虑计算机体系结构的学科完整性,强调体系结构、基础软件、电路和器件的融会贯通。全书共分12章,包括指令系统结构、计算机硬件结构、CPU微结构、并行处理结构、计算机性能分析等主要内容,重点放在作为软硬件界面的指令系统结构,以及包含CPU、GPU、南北桥协同的计算机硬件结构。本书可作为高等学校“计算机体系结构”课程的本科生教材,同时也适合相关专业研究生或计算机技术人员参考阅读。

关于本书内容更多的介绍可以参考推荐序自序第三版序前言等相关章节。

关于本书的开源维护

在第三版的改版过程中,作者们引入了一个创新尝试,试图将本书打造为一本活的教科书。具体来说,我们采用以文本为基础的rmarkdown格式编辑书本内容(采用bookdown工具包),用git对其进行版本管理,并在互联网进行开源维护。在相应的网站上,还会提供出版社提供的与纸质版本一致的电子版本,以及相关的参考课件PPT和其他补充资源。我们认为这么做有几个好处:

  • 文字、图片和参考课件等素材的开放更方便教学使用。通过开源本书,我们期望能够它得到更广泛的采用,得到更多的批评指正意见,使得它能够更快成熟。
  • 方便的版本管理系统有助于及时吸收对本书的勘误和改进。一方面,读者可以通过项目的问题管理系统或者其他渠道反馈问题,被接纳后会立即反映到在线的版本中,不必等待下一次改版印刷周期。另一方面,作者们也可以将之前对由于时间仓促未来得及完善的内容进行补充完善,或者根据产业的发展需求对内容进行适当调整。
  • 新的格式能够提供更丰富的表现形式。在rmarkdown文本的基础上,系统可以自动生成HTML、word和PDF等各种格式的发布版本,扩大适用范围。后续还可以利用其中某些格式来实现传统纸质书本无法做到的实时交互等功能。 当然,限于rmarkdown/bookdown目前的表现能力以及作者们对其的应用水平,在线版本生成的发布版本排版细节质量上很可能比不上出版社提供的、与纸质版本一致的原始电子文件,阅读体验上也不能替代纸质版本。有条件的读者仍然可以选择由机械工业出版社出版发行的纸质版本。

由于工具的限制,在线版本和纸质版本的版面效果并非完全一致。目前图表的编号也不一定一一对应,部分纸质书的表可能用图来代替。后续随着一些修订内容的添加,在线版本的文字和纸质版本也会有所差别。

本书内容的开源离不开出版社、龙芯中科技术股份有限公司和作者们的支持,在此表示感谢。出版社提供了精心排版后的电子版本和相应资源文件,并同意开放这些资源。龙芯中科技术股份有限公司提供了在线版本的一份web服务器资源以及部分经费支持。作者们接受了可能的出版收益损失。

本书开源版本也得到了**科学院大学研究生程轶涵、穆热迪力、王铭剑、徐淮、叶锦鹏(按姓氏拼音顺序)等同学的大力支持,他们协助完成了bookdown格式部分源代码的编辑和校对,在此表示感谢!

本书相关信息

本书的官方信息网页参见本书信息

本项目的github actions已经配置为自动生成HTML/PDF/DOCX三种输出格式并部署到github pages。三种格式的链接分别如下:

  • HTML. 在线HTML版本。
  • PDF. PDF版下载链接。
  • DOCX. Word版下载链接,其中目录部分需要手工选择下“更新域”才能显示。

机械工业出版社提供的纸质书精排电子版可以从这里获得: 纸质书电子版

docker环境

虽然github actions已经能够全自动地完成代码编译和部署,不过似乎它的环境不太容易在本地复现。为了方便大家复现我们的工作环境,写了一个简单的Dockerfile(参见docker/Dockerfile),它安装了能够完整编译本项目代码的相关软件工具。

使用方法:

  • 安装docker环境。
  • cd docker && sudo docker build -t bookdown .
  • docker run -it bookdown /bin/bash,然后在docker环境中可以更新代码,编译代码。例如: cd /opt/archbase; git pull; make

有兴趣的读者可以参考这个环境来编写自己的书籍或者其他文档,然后大家可以切磋具体的使用方法和技巧。 我们也都是bookdown新手,估计有很多用法有改进的空间,期待得到大家的反馈。

龙芯体系结构相关参考资源

本书的实例和原理介绍以龙芯体系结构为主。关于龙芯体系结构的信息,可以参考这里。那里的内容包括:

  1. 龙芯架构的相关文档,如指令集手册、ABI文档、龙芯3A5000处理器手册、龙芯7A1000桥片手册等。
  2. 一些龙芯架构的关键基础软件,如工具链QEMU模拟器内核等。很多软件正在upstream的过程中,相信不久后大部分软件可以直接从社区上游获得。

暂时没有龙芯机器的同学,可以在X86上用交叉编译工具链编译loongarch应用,用qemu模拟运行loongarch程序。后续争取提供一些龙芯云端的开发者账号让大家能在真机上做实验。

意见反馈

提供开源版本的一个主要目的是为了更好地收集反馈意见。如果您对本书有任何意见或者建议,欢迎与我们联系。您可以利用github的各种交互功能与我们联系:提交issue、pull request或者私信作者等。

TODO

后续还有很多需要完善的工作,包括:

  • 完善教材内容。例如为正文涉及的一些知识提供更多的参考阅读指引,为部分习题添加必要的上下文交代,修正不够严谨的表述等等。
  • 整理和上传相关资料,如纸质版对应的pdf版本、参考课件、习题涉及的一些外部资源和运行环境等。
  • 持续完善开源版本的格式和自动生成环境。目前通过github action,对源代码的任何修改推送之后将触发HTML/PDF/DOCX版本的自动编译和部署。我们发现缺省的bookdown环境以及我们用到的一些包还存在一定的不足,导致生成的内容还有些异常,包括部分图表超宽、表格内的换行或者tab键处理不如预期等。其中一些问题已经被整理和集成到部署环境中。其他的遗留问题也会通过修正相关软件包或者更换正文的表达方式来逐步解决。

License

本书采用Creative Commons Attribution-NonCommercial 4.0 International Public License开源,具体条款可参考LICENSE文件。

archbase's People

Contributors

arrayest avatar cheungxi avatar everyx avatar foxsen avatar jolllly-bot avatar ucasfl avatar zbtzbtzbt avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

archbase's Issues

图9.11 PC时钟周期问题

image

如上图,在第六个时钟周期的时候,此时刚好等完I0指令写回寄存器,I1指令解除阻塞,R1端正式译码从寄存器堆中把数据读出来,然后I2取出地址。

问题在于,在第七个时钟周期的时候,I2和I3也存在RAW的依赖,所以I2指令也要阻塞。可此时I2的PC已经取出,第七个时钟周期按教材讲授以及图9.10均可发现第七个时钟周期,I3在执行PC指令,而9.11却显示第七个时钟周期是I2在执行PC,请问是不是图画错了?

10.1.1节存在笔误

现代处理器采用多种微结构设计技术挖掘指令级并行性,包括指令流水线、多发射、动态调度、寄存器重命名、转移猜测等技术。指令流水线重叠执行多条不相关的指令;多发射技术允许一个时钟周期执行多条指令,类似于“多车道”;动态调度允许后续指令越过前面被阻塞的指令继续被调度执行,相当于允许“超车”;寄存器重命名主要解决RAW和WAW的假相关问题;转移猜测技术可以猜测分支指令的方向和目标,在分支指令还未执行完之前获取更多可执行指令,以减少控制相关造成的指令流水线阻塞。这方面的技术已经比较成熟。

这一段中可能存在笔误,寄存器重命名主要解决 WAR 和WAW的假相关问题,原文中写成了”寄存器重命名主要解决 RAW 和WAW的假相关问题“

1.3 节 计算机体系结构的发展 PDF版中渲染存在错误

  1. 工艺和计算机结构 中:
    “更多” 指的是集成电路生产工艺在相同面积下提供了更多的晶体管来满足计算机体系结构
    发展的需求。“更快” 指的是晶体管的开关速度不断提高,提高了计算机频率。“更省电” 指的是随
    着工艺进步,工作电压降低,晶体管和连线的负载电容也降低,而功耗跟电压的平方成正比,跟
    电容大小成正比。在0.13�m 工艺之前,工艺每发展一代,电压就成比例下降,例如0.35�m 工艺
    的工作电压是3.3V,0.25�m 工艺的工作电压是2.5V,0.18�m 工艺的工作电压是1.8V,0.13�m 工
    艺的工作电压是1.2V。此外,随着线宽的缩小,晶体管和连线电容也相应变小。

其中所有关于微米的符号μ都没能显示出来。PDF中直接显示为0.13m。

后面还有一处:在0.13�m 工艺之前,电压随线宽而线性下降。

请问在哪里可以找到配套的实验呢?

《计算机体系结构基础》非常赞!美中不足的就是自学者没有实验可以做,而没实验可以做的话,看完书只能留下浅浅的印象。
在自序中有提到将推出计算机体系结构实验平台和实验教材,请问是否有一个相对明确的时间点呢?
或者,如果想做相应的实验,是不是应该单独发邮件联系相关的负责人?

建议: 基于龙芯的工作流

建议Dockerfile, ci, cd 都能基于龙芯处理器(mips / la)

我在mips 上安装tinytex 失败

所以直接用的apt源里的 texlive-full

但是make pdf 时提示 bookdown.tex
667行 \textbackslash{}providecommand\{\textbackslash{}docline\}{[}3{]}\{\noalign{\global\setlength{\arrayrulewidth}{#1}}\arrayrulecolor[HTML]{#2}\cline{#3}\} ! Misplaced \noalign

但是编译bookdown的demo工程, bookdown-demo 是可以无错通过的。

关于第九章的插图 9.26

\@ref(fig:chapter9-LS3A2000)是龙芯3A2000处理器的流水线示意图。

机械工业出版社提供的纸质书精排电子版上是 3A3000 的架构图,且图中右侧标识里也说明了是 3A3000 的架构图,个人认为这里笔误了。

【提案】PDF文档目录补充

foxsen您好,机械工业提供的 精装电子版pdf 没有书签目录(只有【文前】、【正文】两项),具体见

本页-精装电子版-无书签

本页-精装电子版-无书签

以及官网上面的,也没有书签,具体见

官网-精装电子版-无书签

官网-精装电子版-无书签

目前我想做的,就是给这个 精装电子版 加下目录书签,并且把 有目录书签的版本更新到上述两个链接上

以及,这个我处理完之后,需要跟谁联系更新呢。


1.2.1 导出html的格式有误

原文为:冒泡排序算法的运算复杂度为O(N*N),快速排序算法的运算复杂度为O(N*log2(N))

在html版本中,两个 * 中间的文本被解释为了斜体,而且*号也没有显示出来,建议加个转义或者直接嵌latex $O(N^2)$

4.1.4 栈帧布局 中出错

例如图4.11中的normal函数,用gcc -O2 -S编译的结果如图4.12所示。normal函数调用了一个有9个整数参数的外部函数,这样它必须有栈帧来为调用的子函数准备参数。可以看到,编译器生成了一个32字节的栈帧,把最后一个浮点参数9保存到偏移0,把返回地址$ra保存到偏移24。

其中不论是图 4.11: normal函数代码,还是图 4.12: normal函数的gcc -O2编译结果,都只有整形参数。
没有“浮点”参数。

表2.16中的do-while示例有点难以理解

个人感觉这个例子中t2,t3寄存器的使用让我难以理解,而且似乎用不着那么多寄存器
我实现了一个版本,或许会更清晰一些 :)

//   a: $a0
// sum: $t0
//   i: $t1
test_dowhile:
 or $t0,$r0,$r0
 or $t1,$r0,$r0

.L1:
 add $t0,$t0,$t1
 add $t1,$t1,1
 blt $t1,$a0,.L1

 or $a0,$t1,$r0
 jr $ra


如果理解有误还望指教 :)

help me

i am writting about y I need help I have no idea on what to do in git hub.ca pleas help me I woid hrllo gelooowdgell thanks smile hi

关于LoongArch LP64的汇编代码如何编译出来?手头无该类设备的方法?

在第4章 软硬件协同的部分,关于c语言代码对应出的汇编代码 4.1.4本书85页。
我尝试了使用 https://godbolt.org/ 发现这个比较流行的网站还没有支持LoongArch 相关的编译工具链。
相反的,这个网站已经支持了许多种编译工具链,包括x86 ,arm, RIsc-v相关的。
可能龙芯可以和这个网站团队合作一下,把LoongArch支持搞起来。

另外,手头没有实体采用LoongArch 的计算机,有无通过qemu模拟器的方法使用相关编译工具链。

图 4.5: C程序的典型虚拟内存布局 配图有误

这个图和虚拟内存布局文不对题。这个图讲的显然是用户栈的一个函数栈帧布局,只是虚拟内存布局的其中之一。
与下面的:

C程序的典型虚拟内存布局包括如下几部分:

应用程序的代码、初始化数据和未初始化数据
堆
函数库的代码、初始化数据和未初始化数据
栈

并不相符,只是其中讲述的内容之一“栈”。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.