过年期间一直在啃一本书,学习计算机组成原理。

这是一本很棒的书,是一个基于项目的学习过程。可以让人理解的很深刻。

coursera上有这本书前半部分的教程,是由书的作者团队们开的课,个人认为很棒,可惜就是后半部分的教程还没出。

不过他们的制作团队说,16年春季就会出后半部分的教程了。

课程链接是这样的:https://www.coursera.org/learn/build-a-computer

这本书有自己的官方网址,教程和软件提供很完善,Q&A也很Nice,基本上要问什么问题都能得到回答:http://www.nand2tetris.org/


当然这本书的缺点似乎是讲的内容实在太多,所以很多细节并没有处理到很完善,省略了很多内容。

但这并不是说这本书就是一本不完整的书。事实上,从第一章到最后一章,这个项目的完整性是超出我的想象的。

学习的人将从完全不理解计算系统的级别开始,搭建起一台计算机,然后在这台计算机上搭建一款简单的编译器,实现一个操作系统,然后完成在上面的程序的编写。

整本书的跨度是从数字电路到操作系统。当然,这也就不可避免地让它不能在很多问题上太过纠缠,所以,这本书重实现和了解,轻优化和深入。

作为我一个EE学生的计算机结构入门,实在是太美好不过了。

它自底向上的构建方式让学习曲线平滑到不能更平滑。


具体总结一下这本书的内容,这本书围绕着一个框架来说明:

把整个计算机系统分成两个部分,硬件层和软件层。

自顶向下的观点是这样的,最高级的是人的想法,为了实现人的想法我们需要编程描述语言和操作系统,操作系统由编程语言来写,而要使编程语言能够工作,需要有编译器,编译器的实现是有虚拟机技术的,把高级语言翻译成虚拟机上的中间代码,然后虚拟机将中间代码翻译成相应硬件平台的汇编代码,而汇编代码是等价翻译成机器语言才能使用的(用汇编器翻译)至于机器语言是怎么使用和实现的,和相应的硬件平台是有关系的,计算硬件平台的实现依靠的是数字芯片,数字芯片是一堆数字逻辑门的封装,而数字逻辑门的实现,电子学上的实现是EE研究的东西,至于为什么能实现,这是物理学的领域了。到这里就不接着向下研究了。而整个结构是这样完整的。

当然学习的过程是自底向上的,从唯一逻辑门与非门(Nand)开始搭出各种不同的逻辑门,组合成ALU,CPU,直至最后组成一台完整的被称为Hack的电脑,然后是使用它的机器语言编程,用一个汇编器来将汇编语言翻译成机器语言。然后通过设计一款编译器来实现一款基于类的名叫Jack的语言,实现一个有一些函数接口的操作系统。

这是一个浩大的工程,然而却被很好的整合在了这本书里

这本书是我这个学年至今读到最好的书。

今天这篇随笔是一个总结和推荐。大家有兴趣有空的可以看看这本书,然后我们可以一起探讨。

我会陆续发这本书的具体内容的读书笔记。

2016/2/13 《计算机系统要素》(The Elements of Computing Systems)读书笔记(1)的更多相关文章

  1. the elements of computing systems 的读书笔记2

    懒癌发作,本来计划是两到三天就一个unit的,没想到一直拖到今天才完成第二部分(6-8章). 第6章,介绍了hack汇编到二进制,也就是用翻译到01来表示.从课后习题来看,这一章目的就是设计一个程序( ...

  2. the elements of computing systems 的读书笔记1

    想转职程序猿,还真不是说懂一门语言就够的了,想要继续进步,必须懂其相关实现原理,比如这些底层的构造.最近看的就是这一本计算机入门级的书,但是对我这个纯自学的人来说真是能学到很多. 这本书从最基本的Na ...

  3. 20150206读书笔记<深入理解计算机系统>

    ●第一章 C是系统级编程的首选.C++显示支持抽象,属于应用级程序设计语言. 简单例子: 一个典型系统的硬件组成: 存储器的层次结构: 注:存储器层次结构的设计思想是,该层存储器作为下一层存储器的高速 ...

  4. 强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods)

    强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods) 学习笔记: Reinforcement Learning: An Introduction, Richa ...

  5. 机器学习实战 - 读书笔记(13) - 利用PCA来简化数据

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第13章 - 利用PCA来简化数据. 这里介绍,机器学习中的降维技术,可简化样品数据. ...

  6. 《深入理解计算机系统》 Chapter 7 读书笔记

    <深入理解计算机系统>Chapter 7 读书笔记 链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(货被拷贝)到存储器并执行. 链接的时机 编译时,也就是 ...

  7. 《Android开发艺术探索》读书笔记 (13) 第13章 综合技术、第14章 JNI和NDK编程、第15章 Android性能优化

    第13章 综合技术 13.1 使用CrashHandler来获取应用的Crash信息 (1)应用发生Crash在所难免,但是如何采集crash信息以供后续开发处理这类问题呢?利用Thread类的set ...

  8. <深入理解计算机系统>第七章读书笔记

    第七章读书笔记 链接 链接:将各种代码和数据部分收集起来并组合成为一个单一文件的过程.(这个文件可被加载或拷贝到存储器并执行) 链接可以执行于编译,加载或运行时. 静态链接: 两个主要任务: 1 符号 ...

  9. 读书笔记:《人有人的用处》------N.维纳. (2016.12.28)

    读书笔记:<人有人的用处>------N.维纳 ·某些系统可以依其总能量而和其他系统区别开来. ·在某些情况下,一个系统如果保持足够长时间的运转,那它就会遍历一切与其能量相容的位置和动量的 ...

随机推荐

  1. 牛客网国庆集训派对Day4题目 2018年

    链接:https://www.nowcoder.com/acm/contest/204/A来源:牛客网 深度学习 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他 ...

  2. Firefox插件开发学习总结

    2018.06.14 我们小组最初只准备开发运行在google上的知乎插件,但我们经过调研发现还有一大部分用户是使用的火狐浏览器,所以我们也准备制作火狐插件.以下是我学习了部分火狐插件制作知识后的总结 ...

  3. Gradle入门(3):构建第一个Java项目

    Gradle插件通过引入特定领域的约定和任务来构建你的项目.Java插件是Gradle自身装载的一个插件.Java插件提供的基本功能远比源代码编译和打包多.它为你的项目建立了一个标准的项目布局,并确保 ...

  4. 解决在Mac上用pyenv安装python3失败的问题

    背景 前段时间在本地Mac系统上要跑一个python3写的压测脚本. Mac默认安装的是python2, 而且很多软件依赖的也是python2. 为了不影响现有系统其它软件, 当时安装了pyenv来实 ...

  5. vue 如何使用scss (转载)

    创建一个基于 webpack 模板的新项目 全局安装 vue-cli $ npm install --global vue-cli 创建一个基于 webpack 模板的新项目 $ vue init w ...

  6. Linux下的网卡Bonding

    1. 网卡Bonding一共有0-6七种mode,具体区别请自行搜索: 2. 建议通过nmtui命令在交互模式下配置,这样不会落下重要的字段,也不用去记忆到底有哪些字段: 3. 我的实验环境是VMWa ...

  7. APP接口

    <?phpClass Response{ /*** 返回json数据* @param $code 状态码* @param $message 描述信息* @param $data 数据* @par ...

  8. 每日一问(如何在List中加入、设置、获取和删除其中的元素?)

    作为集合接口的一部分,对List接口所做的操作,最常见的就是增删查改了.这里总结下JAVA 中List接口及实现该接口的类实现这些操作的方法. 一.增加新的元素的方法 在Collection接口中定义 ...

  9. BZOJ 1013 | 一份写了一堆注释的高斯消元题解

    题意 给出\(n\)维直角坐标系中\(n + 1\)个点的坐标,它们都在一个\(n\)维球面上,求球心坐标. 题解 设球面上某两个点坐标为\((a_1, a_2, ... a_n)\)和\((b_1, ...

  10. Alpha 冲刺 —— 十分之十

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 测试整体软件 展示GitHub当 ...