具体描述
本书通过展现简单但功能强大的计算机系统之构建过程,为读者呈现了一幅完整、严格的计算机应用科学大图景。本书作者认为,理解计算机工作原理的最好方法就是亲自动手,从零开始构建计算机系统。
通过12个章节和项目来引领读者从头开始,本书逐步地构建一个基本的硬件平台和现代软件阶层体系。在这个过程中,读者能够获得关于硬件体系结构、操作系统、编程语言、编译器、数据结构、算法以及软件工程的详实知识。通过这种逐步构造的方法,本书揭示了计算机科学知识中的重要成分,并展示其它课程中所介绍的理论和应用技术如何融入这幅全局大图景当中去。全书基于“先抽象再实现”的阐述模式,每一章都介绍一个关键的硬件或软件抽象,一种实现方式以及一个实际的项目。完成这些项目所必要的计算机科学知识在本书中都有涵盖,只要求读者具备程序设计经验。本书配套的支持网站提供了书中描述的用于构建所有硬件和软件系统所必需的工具和资料,以及用于12个项目的200个测试程序。
全书内容广泛、涉猎全面,适合计算机及相关专业本科生、研究生、技术开发人员、教师以及技术爱好者参考和学习。
作者简介
目录信息
介绍:Hello, World Below
第1章 布尔逻辑
1.1 背景知识
1.1.1 布尔代数
1.1.2 门逻辑
1.1.3 实际硬件结构
1.1.4 硬件描述语言(HDL)
1.1.5 硬件仿真
1.2 规范详述
1.2.1 Nand门
1.2.2 基本逻辑门
1.2.3 多位基本门
1.2.4 多通道逻辑门
1.3 实现
1.4 观点
1.5 项目
第2章 布尔运算
2.1 背景知识
2.2 规范详述
2.2.1 加法器
2.2.2 算术逻辑单元(ALU)
2.3 实现
2.4 观点
2.5 项目
第3章 时序逻辑
3.1 背景知识
3.2 规范详述
3.2.1 D触发器
3.2.2 寄存器
3.2.3 存储
3.2.4 计数器
3.3 实现
3.4 观点
3.5 项目
第4章 机器语言
4.1 背景知识
4.1.1 机器
4.1.2 语言
4.1.3 命令
4.2 Hack机器语言规范详述
4.2.1 概述
4.2.2 A-指令
4.2.3 C-指令
4.2.4 符号
4.2.5 输入/输出处理
4.2.6 语法规约和文件格式
4.3 观点
4.4 项目
第5章 计算机体系结构
5.1 背景知识
5.1.1 存储程序概念
5.1.2 冯?诺依曼结构
5.1.3 内存
5.1.4 中央处理器
5.1.5 寄存器
5.1.6 输入和输出
5.2 Hack硬件平台规范详述
5.2.1 概述
5.2.2 中央处理器(CPU)
5.2.3 指令内存
5.2.4 数据内存
5.2.5 计算机
5.3 实现
5.3.1 中央处理器
5.3.2 内存
5.3.3 计算机
5.4 观点
5.5 项目
第6章 汇编编译器
第7章 虚拟机Ⅰ:堆栈运算
第8章 虚拟机Ⅱ:程序控制
第9章 高级语言
第10章 编译器Ⅰ:语法分析
第11章 编译器Ⅱ:代码生成
第12章 操作系统
第13章 后记:发掘更多乐趣
附录A: 硬件描述语言(HDL)
附录B: 测试脚本语言
索引
· · · · · · (收起)
读后感
官方网站,上面有 PPT 和软件:http://www.nand2tetris.org/ Coursera 上的公开课 第一部分:https://www.coursera.org/learn/build-a-computer 第二部分:https://www.coursera.org/learn/nand2tetris2 另外希望大家在看的过程中顺便贡献中文字幕。
http://blog.csdn.net/chief1985/archive/2008/04/20/2309634.aspx
冲着"从零开始"去看,发现书很薄,有些疑惑.读毕第三章已经不想看了,讲的比较浅.然后又搞了个Jack语言,比较讨厌这口写法,无心再去理会语法,快速翻完. 要真想学,还是去看<深入理解>比较合适,比这个过瘾.这个相比来说只能算个初级科普读物,啥都提到,啥都一小段完事.
【缘起】 一直想了解现代计算机是如何构建起来的,偶然间看到 Shimon Schocken 在 TED 的一期演讲,介绍其为学生开发了一套逐步构建现代计算机的课程,该课程让大家了解现代计算机如何从基本门电路开始慢慢被构建。 【体会】 正如本书作者所言,此书强调实践,一味的端着书看是...
冲着"从零开始"去看,发现书很薄,有些疑惑.读毕第三章已经不想看了,讲的比较浅.然后又搞了个Jack语言,比较讨厌这口写法,无心再去理会语法,快速翻完. 要真想学,还是去看<深入理解>比较合适,比这个过瘾.这个相比来说只能算个初级科普读物,啥都提到,啥都一小段完事.
用户评价
这本《计算机系统要素》给我带来的,不仅仅是知识的增量,更是一种思维模式的重塑。我是一名文科生,此前我对计算机的理解仅仅停留在“使用者”层面,认为它只是一个工具。然而,当我开始阅读这本书时,我逐渐意识到,这个工具背后是如此庞大而精密的体系。我曾花了很多时间去理解CPU是如何执行指令的,那些流水线、乱序执行等等概念,在我看来简直是艺术品。它让我明白,我们所见的软件界面,只是冰山一角,而真正的驱动力,则隐藏在硬件和底层软件的复杂交互之中。我尤其喜欢它在讲解编译和链接过程时,那种“由代码到可执行文件”的转化路径。我尝试着去想象,每一行代码是如何被翻译成机器能够理解的语言,又是如何被组织起来形成一个能够运行的程序。这种对事物本质的探究,让我对计算机科学产生了前所未有的兴趣。虽然我可能不会成为一名专业的程序员,但这本书为我提供了一个理解现代科技的全新视角,让我能够更深刻地理解技术进步的本质。
我之前对计算机的认知,停留在“会用”的层面,对于它“为什么”能这样工作,其实是懵懵懂懂的。接触《计算机系统要素》这本书,对我来说就像打开了一个全新的世界。它用一种非常系统和深入的方式,解释了计算机是如何一步一步构建起来的。我记得我曾经花了很多时间去理解编译器的作用,那些将人类可读的代码转化为机器可执行指令的过程,让我看到了计算机语言的奥秘。这种对代码转化过程的探究,让我对程序的运行有了更清晰的认识。更让我着迷的是,它在讲解程序执行模型时,那种进程、线程、虚拟地址空间的划分,让我看到了操作系统是如何管理和协调大量并发任务的。这对我理解多任务处理和系统资源的分配有了全新的视角。这本书让我明白,我们所看到的每一个软件,背后都凝聚着无数的智慧和精巧的设计。
作为一名对新事物充满好奇的人,我对任何能够解释“为什么”的书籍都怀有特殊的兴趣,而《计算机系统要素》恰好满足了这一点。在没有阅读这本书之前,我总觉得计算机的运行速度、程序的启动时间,都是一些“理所当然”的事情。但这本书让我看到了这些“理所当然”背后所付出的精巧设计和优化。我记得我在学习进程和线程的概念时,我曾尝试将它们与现实生活中人们如何并行处理任务进行类比,从而理解操作系统是如何调度和管理这些“任务”的。这种将抽象的计算机概念与生活经验相联系的方式,让我的学习过程变得更加生动有趣。更让我着迷的是,它在讲解I/O系统时,那种不同设备之间的数据传输速度和处理方式的差异,让我看到了计算机硬件的多样性和复杂性。这本书不仅仅是一本技术书籍,更是一次对计算机世界本质的探索之旅,它让我看到了代码之外的无限可能。
我的职业背景与计算机的底层原理相去甚远,但偶然的机会我接触到了《计算机系统要素》,并被它深深吸引。我最初的认知中,计算机就是一个“盒子”,输入信息,输出结果,过程不重要。然而,这本书彻底改变了我的看法。它用一种非常系统化的方式,揭示了计算机工作的“内部运作”。我记得在学习存储器管理时,我尝试将书中的虚拟内存概念与我日常管理电脑文件时遇到的“空间不足”问题进行类比,试图理解操作系统是如何高效地利用有限的物理内存的。这种将抽象概念具体化的过程,极大地提升了我学习的效率和乐趣。更让我印象深刻的是,作者在讲解网络通信时,那种层层封装和解封装的逻辑,让我看到了数据如何在不同的网络设备之间传输,并最终抵达目的地。这种对系统整体运作的理解,让我对互联网的运作方式有了全新的认识,也让我看到了技术背后所付出的巨大努力。
我必须承认,一开始我购买这本《计算机系统要素》时,是带着一些“跟风”的心态,身边不少同学都提到这本书的重要性,说它是理解计算机世界的必读书目。然而,作为一名非计算机专业的学生,我的初衷并非是深入研究每一个细节,而是希望能够对计算机有一个更宏观、更扎实的认识,以便在我的专业领域中更好地运用相关技术。这本书的体量确实不小,我花了相当长的时间来消化其中的内容。最让我印象深刻的是,它并没有局限于纯理论的讲解,而是通过大量的例子和实际场景来阐释抽象的概念。例如,当它讲解指令集架构时,我脑海中浮现出的是各种硬件设备,包括我日常使用的电脑、手机,甚至是一些嵌入式设备,它们都在遵循着同样的底层指令。这种关联性让我觉得学习过程不再枯燥,而是与我现实生活息息相关的。我尤其喜欢它在讲解性能优化时,所提供的那种系统性的分析方法,它让我意识到,提升效率并非一蹴而就,而是需要从硬件、软件到算法等多个层面进行考量。虽然我无法做到像计算机专业的学生那样熟练地运用书中的知识去解决实际问题,但我确实从中获得了宝贵的洞察力,让我看待计算机的角度发生了巨大的转变。
我是一名艺术家,对于计算机的理解更多的是它在创意领域的应用。所以,当我开始阅读《计算机系统要素》时,我抱着一种“了解工具的本质”的心态。这本书的结构设计非常巧妙,它并没有将所有内容堆砌在一起,而是通过清晰的章节划分,将一个庞大的计算机系统分解成一个个可以被理解的模块。我记得在学习存储器层次结构时,我曾尝试将不同存储器的数据访问速度,与我在工作室里整理颜料和画笔的效率进行类比,从而理解为什么需要不同速度的存储器。这种将抽象的计算机概念与我的创作实践相结合的方式,极大地加深了我对知识的理解。更让我感到惊喜的是,它在讲解输入输出系统时,那种不同设备之间数据交互的逻辑,让我看到了计算机如何与外部世界进行连接。这让我对我们所使用的各种数字创意工具有了更深的认识。
坦白说,我并非一个天生的“技术宅”,我对计算机的兴趣更多源于对数字世界的好奇,以及对信息传递过程的探究。当我第一次接触《计算机系统要素》时,我最大的担忧是这本书是否会过于专业化,以至于我这种“门外汉”难以理解。然而,作者的写作风格出乎意料地清晰易懂。它并没有使用大量晦涩难懂的术语,即使有,也会在后续的篇章中进行详细的解释。我记得在学习存储器层次结构时,我尝试将书中描述的缓存、主存、磁盘等概念,与我日常使用电脑时感受到的加载速度进行类比。当程序需要访问数据时,如果数据在高速缓存中,加载就会非常快;如果不在,就需要从相对慢速的主存甚至磁盘中读取,这个过程就会显著延迟。这种将理论与实际体验相结合的方式,极大地加深了我对知识的理解。更重要的是,这本书让我认识到,计算机的每一个操作,从简单的点击鼠标到复杂的图形渲染,背后都蕴含着精密的逻辑和高效的设计。它让我对现代计算的强大能力有了更深层次的敬畏。
这本书简直是计算机科学领域的“圣经”,但我的个人经历却与之产生了奇妙的化学反应。作为一名初学者,我并非一开始就抱着成为一名系统工程师的远大目标,更多的是对计算机底层运作的好奇心驱使我翻开了它。起初,那些晦涩难懂的术语和复杂的逻辑图让我望而却步,仿佛置身于一个陌生的领域,每一步都走得小心翼翼。然而,随着阅读的深入,我开始领略到作者是如何将一个庞大而精密的系统,拆解成一个个可理解的模块,并层层递进地阐述其原理。那种“拨开云雾见月明”的感觉,是在我一次又一次的尝试和困惑中逐渐建立起来的。我记得有一次,我花了整整一个晚上试图理解缓存的工作机制,从主存到寄存器,数据的流动轨迹在我脑海中不断重演。那种成就感,即使在今天回想起来,依然令人激动。这本书不仅仅是知识的传递,更是一种思维方式的塑造,它教会了我如何去分析问题,如何去追根溯源,如何去欣赏代码背后那精巧的设计。虽然我并未能完全掌握书中所述的所有细节,但它无疑为我打开了一扇通往计算机世界的大门,让我看到了无限的可能性。它让我明白,计算机并非只是一个黑箱,而是由无数精妙的组成部分协同工作而成的宏伟建筑。
坦白讲,我的技术背景并不深厚,更多的是一种“使用者”的视角。拿起《计算机系统要素》这本书,最初是想了解一下那些我们日常使用的软件背后到底是什么在支撑。这本书的讲解方式让我印象深刻,它并没有上来就抛出大量的概念,而是从最基础的指令集开始,一层一层地构建起整个计算机系统的图景。我记得我曾经花了好几个小时来理解CPU的流水线工作原理,尝试去想象指令是如何在不同的阶段被处理的,这种对效率的极致追求让我感到非常震撼。它让我明白,我们所认为的“卡顿”或者“响应慢”,背后可能隐藏着很多优化空间。我尤其喜欢它在讲解并发编程时,所提供的各种同步机制,它让我看到,在多线程环境下,如何确保数据的正确性和程序的稳定性。这对我理解多任务处理和资源共享有了全新的认识。
我的背景相对比较传统,对计算机的接触更多是来自于日常的办公软件和互联网应用。因此,当我开始阅读《计算机系统要素》时,我内心其实是有些忐忑的,担心自己无法跟上书中的节奏。然而,这本书的魅力在于它能够将极其复杂的概念,用一种循序渐进、清晰易懂的方式呈现出来。我记得在学习虚拟存储器时,我曾尝试将书中关于页面置换算法的描述,与我整理文件时如何高效地存放和查找信息进行对比,从而理解操作系统是如何在有限的内存空间中高效地管理数据的。这种将理论与实际生活中的“管理”行为进行类比,让我对书中的内容有了更深的体会。更令我惊喜的是,它在讲解汇编语言时,那种最接近机器的表达方式,让我看到了程序执行的最底层逻辑。这让我对计算机的工作方式有了前所未有的清晰认知,也让我对编写高效程序有了更深的理解。
是一本经典之作。只是要完全理解也不是一件容易的事情
原书极好,中文版却有些错误,不得不扣一星。比如图4.3就错了关键一处,把图右的a=1写成了a=0。
原书极好,中文版却有些错误,不得不扣一星。比如图4.3就错了关键一处,把图右的a=1写成了a=0。
虽然很简约,但确实是实现了一个完整的计算机系统!
好玩的书!