前言
最近在看《计算机系统要素-从零开始构建现代计算机》,这本书从与非门开始引导你一步步构建一个计算机,完成本书的所有项目后你将获得以下收获:
- 从与非门开始构造出一个 16 位的 Hack 计算机
- 在此计算机基础之上,开发出汇编编译器、堆栈式虚拟机
- 针对虚拟机设计出高级编程语言 Jack,同时开发出相应的编译器及语言标准库
之前看到一张梗图,说当代程序员往往沉迷于学习各种最新的技术与框架,而忽视计算机的基础原理。
出现这种情况的原因,我认为一方面是因为计算机基础原理的学习曲线较陡同时很难看到即时效果,另一方面也在于大多数的计算机基础原理书籍都是以枯燥的理论知识为主,缺少实践性的内容,不利于读者的自学。
而《计算机系统要素》这本书则不同,它以项目驱动的方式引导你一步步构建一个计算机,让你在实践中学习计算机的基础原理,这样的学习方式更加有趣且容易理解, 也更容易让读者在学习过程中获得正反馈。
本书介绍的计算机系统是实际可用的系统,可被实际地构建出来,并能够正常运作。只要读者跟随本书的脚步,逐步构建出这个计算机系统,就会对计算机系统有更透彻的理解,这与只阅读而不动手实践所达到的学习效果相比有天壞之别。因此,本书在内容的编排和选择上着重针对那些卷起袖子准备动手实践,从零开始构建计算机系统的读者。
内容简介
总体结构
本书总体路线图如上所示,采用自下而上的方式,从最基本的元素(原始逻辑门)开始,然后一直向上层进发,直到最后构建完整的计算机系统。在这个过程中,你将学习到计算机系统的各个层次,包括组合芯片,时序芯片,计算机体系结构,机器语言,汇编编译器,虚拟机,编译器,操作系统,高级编程语言等。
以下是各章节的简要总结:
- 布尔逻辑:介绍了布尔代数、门逻辑、硬件结构、硬件描述语言(HDL)以及硬件仿真。
- 布尔运算:详细讨论了加法器和算术逻辑单元(ALU)。
- 时序逻辑:探讨了D触发器、寄存器、存储和计数器。
- 机器语言:介绍了机器语言的规范,包括A-指令和C-指令,以及输入/输出处理。
- 计算机体系结构:涵盖了存储程序概念、冯·诺依曼结构、内存、CPU、寄存器和输入/输出。
- 汇编编译器:讨论了汇编到二进制的翻译规范,包括汇编编译器的实现。
- 虚拟机Ⅰ:堆栈运算:介绍了虚拟机范型和堆栈机模型,以及VM编程实例。
- 虚拟机Ⅱ:程序控制:详细说明了程序控制流命令和函数调用命令。
- 高级语言:通过几个范例介绍了高级语言的概念,包括过程化编程、抽象数据类型和链表实现。
- 编译器Ⅰ:语法分析:介绍了词法分析、语法和语法分析器的实现。
- 编译器Ⅱ:代码生成:讨论了数据翻译、命令翻译和编译过程。
- 操作系统:涵盖了操作系统的各个方面,如数学操作、内存管理、输入/输出管理等。
- 后记:提供了关于硬件实现、硬件改进、高级语言、优化和通信的额外信息。
计算机中的最基础单元
你可曾想过程序员写的代码为什么能够被计算机所执行?毕竟程序只是一堆存储在文本文件中的字符而已,计算机是无法直接理解这些字符的。
因此我们必须要做的第一件事情就是对该文本进行语法分析,揭示其语义,然后用某种计算机能理解的低级语言来重新表达程序。这个翻译过程(即编译,compilation)产生的结果就是生成另外一个包含机器代码的文本文件。
当然,机器语言也是一种抽象,是一组计算机能理解的二进制代码。为了将该抽象形式具体化,就必须由某种硬件体系(hardroare architecture)来实现。这个硬件体系又是由芯片组(chip set)—寄存器、内存单元、ALU 等——来实现的。其中每个硬件设备都是由许多基本逻辑门 (logic gates)集成构建出来的。而这些门又是由诸如 Nand 和 Nor这样的原始门(primitive gates)构建而成的。
当然,每个原始门又是由若干晶体管组成,但是这部分内容不属于计算机科学的内容,而是属于物理学的范畴。因此,我们在这里就不再深究下去了。
因此我们可以认为,原始门就是计算机中的最基础单元。
计算机中的多层结构
计算系统设计中蕴含的多层抽象结构可以用自顶向下(top-down)的形式来描述,以此来展示高级抽象如何被简化或表示成较简单抽象。同样的结构也可以用自下而上(bottom-up)的形式来描述,以此展示底层抽象如何构建更复杂的抽象。本书采用后一种方式进行阐述:从最基本的元素(原始逻辑门)开始,然后一直向上层进发,直到最后构建完整的计算机系统。
由于我们准备从山底开始逐渐向上攀登,因此我们可以先从反方向的角度来概览本书结构,概览主要有三个部分:
- 从最顶端开始,人们能够编写和运行高级程序(第9章和第12章)。
- 然后开始探索通向硬件领域的道路,去领略将高级程序翻译成低级语言过程中的盘山曲径(第6、7、8、10、11章)。
- 最后到达最底层,描述如何构建典型的硬件平台(第1至5章)。
高级语言的领地
程序员在编写代码来实现自己构想的过程中,有两个关键工具在程序员看来是理所当然就具备了的:1)所使用的高级语言;2)支持高级语言的丰富的服务程序库
例如,考虑语句 do output.printString(“Hello wor1d")
。这条代码调用了用于打印字符串的抽象服务,而该服务必须是在某个地方已经被实现了才行。继续深究不难发现,这个打印
字符串服务通常是由操作系统和标准语言程序库联合提供的。
那什么是标准语言程序库(standard language library)呢?操作系统(OS,Operating System)又是如何工作的呢?这些问题会在第12章予以讨论。第12 章首先介绍一些与 OS 服务相关的关键算法,然后利用这些算法来实现各种数学函数、字符串操作、内存分配任务和输入/输出(I/O)程序。最后得到的就是用Jack语言编写的简单操作系统。
同时第 9 章详细介绍了 Jack 语言及如何构建 Jack 应用程序,如果你有面向对象语言编程经验,可以在几个小时内快速掌握这门语言。
向下通往硬件之路
任何程序在实际运行之前,首先必须被翻译成某种目标计算机平台的机器语言。这个编译(compilation)过程十分复杂,于是被划分为若干个抽象层级,这些抽象层一般包含三种翻译器:一是编译器,二是虚拟机,三是汇编编译器。
我们将编译器 (compiler)的任务从概念上分为两个阶段:语法分析(syntax analysis)和代码生成(code generation)。首先在第一阶段,要对源文本进行分析,然后将其分组成有意义的语言结构,并将这些结构保存在称为“语法分析树(parse tree)”的数据结构中。这种进行语法分析的任务,统称为语法分析(syntax analysis),会在第10章中进行阐述。
这为第二阶段作好了准备。第11 章阐述语法分析树如何被递归处理,以便生成用中间语言编写的程序。
Jack 编译器生成的中间代码描述了在基于堆栈的虚拟机(VM)上的一系列通用的操作步骤。第7至8章介绍这种模型以及实现在其上的虚拟机。由于 VM 的输出是一个大的汇编程序,因此必须将其进一步翻译成二进制代码。编写汇编编译器是相对容易的任务,会在第6章中进行阐述。
硬件的领地
现在我们已经从机器语言到机器本身,软件在此处与硬件会合。Hack 也就在这里进入到我们眼前的图景当中。
第4章介绍了 Hack 平台的机器语言,而计算机设计本身则在第5章中讨论。在第 3 章中简单地讨论时序逻辑并构建计算机的寄存器(registers)和内存系统(memory systems)。在第2章中简单地介绍布尔运算,然后构建计算机的组合逻辑(最终完成算术逻辑单元即 ALU 芯片的构建)。在这些章节中涉及的所有芯片都是基于一组基本逻辑门而构成,我们在第1章介绍并构建这些基本逻辑门。
本书的计划就是按照实现的顺序来展开阐述。首先是基本逻辑门的构建(第1章),然后由下而上的构建组合芯片和时序芯片(第2至3章),从典型的计算机体系架构(第4至5章)和软件层级(第6至8章),一直讲到实现基于对象的语言(第9章)的编译器(第10至11章),最终实现一个简单的操作系统(第12章)。
配套资料
更多
如果你完成了本书的所有项目,你将获得一个 16 位的 Hack 计算机,一个汇编编译器,一个堆栈式虚拟机,一个高级编程语言 Jack,以及相应的编译器和语言标准库。
同时你仍然可以持续优化这个计算机系统,本书中就提出了几个优化方向:
- 本书所介绍的所有硬件模块的实现都是基于软件并用 HDL 模拟出来的,那么如果能让 Hack 计算机运行在真实的设备上岂不是更好?
- Jack 语言目前还有很多不太令人满意的地方,我们可以对其进行改进或者甚至是用新的语言来替代它。
- 我们也可以考虑让 Hack 计算机接入网络,甚至可以使用 Jack 语言来编写一个简单的 Web 浏览器。
这些都是非常有趣的方向,当然你也可以自己想象出更多的可能性。希望你能够在这个过程中获得乐趣,也希望你能够在这个过程中学到更多的知识。
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.dandroid.cn/archives/22011,转载请注明出处。
评论0