前言
过去,凡是计算机专业任由他都对计算机的原理和工作方式了如指掌。计算机体系中的渐渐、软件、编译器以及操作系统之间的交互既简单又透明,因此要把握计算机系统大局观并非难事。然而随着现代计算机技术的日趋复杂,着中国明晰性不复存在:计算机科学领域里面大多数基本思想和技术都倍隐藏在众多抽象接口以及私有实现层面之下。
之所以要写本书,正式因为本书作者有关于:很多学习计算机科学的学生实木而不知林,疲于馒头学习程序设计、各种理论以及工程知识,却失去了对计算机系统整体的把握和理解,未曾停下来欣赏计算机系统大局观的美景。这个大局观为我们展示的是:硬件系统和软件系统如何经由隐藏的抽象、接口以及各种约定的实现所编织起来的网,从而紧紧地关联在一起。
本书作者相信,理解计算机工作原理的最好方法就是亲自动手,从零开始构建计算机系统。由此我们提出了如下的概念:描述一种简单但功能较强的计算机系统,让学生从最基本的逻辑门开始构建其硬件平台和软件层级。
范围
本书通过一系列的硬件和软件实践项目,向读者展示计算机科学只是中的大部分核心内容。这些实践项目将会为您展示计算机科学中的理论只是和应用技术是如何应用于工程实践中的,本书涵盖如下主题:
- 硬件:
- 逻辑门;
- 布尔运算
- multiplexor;
- 触发器;
- 寄存器
- RAM单元
- 计数器
- 硬件描述语言
- 芯片仿真及测试
- 体系架构
- ALU/CPU的设计与实现
- 机器代码
- 汇编语言程序设计
- 取址模式
- I/O内存映像
- 操作系统
- 内存管理
- 数学计算程序库
- 基本I/O驱动程序
- 屏幕管理
- 文件I/O
- 对高级语言的支持
- 程序设计语言
- 基于对象的设计和编程模式;
- 抽象数据类型
- 作用域
- 语法和语义;
- 引用机制
- 编译器
- 词法分析;
- 自顶向下的语法分析
- 符号表
- 基于堆栈的虚拟机
- 代码生成
- 数组和对象的实现
- 数据结构和算法
- 堆栈
- 哈希表
- 链表
- 递归
- 算数算法
- 几何算法
- 运行效率
- 软件工程
- 模块化设计
- 接口/实现范式
- API设计和文档
- 主动式测试
- 广义的程序设计概念
- 质量保证体系
介绍这些主题的目的只有一个:从零开始构建现代计算机系统。这同事也是我们选择讨论主题时所遵循的原则,即本书集中讨论构建具有完整功能的计算机系统所需要的最小集合。因此,该最小集合中包含了很多应用计算机科学中的基本思想。
本书结构
在开始的简介内容里,我们提出了构建的方法并预览了本书所讨论的主要硬件/软件抽象。这为第1至12章奠定了基础。从第1到12章,每章都要讨论三个内容:
- 一种关键的硬件抽象和软件抽象
- 该抽象的实现原理
- 一个实际项目,用来构建并测试所构建的系统。
前5章主要讨论简单的现代计算机硬件平台的构建。第6至12章描述一个典型的多层软件阶层体系的设计与实现,包括构建一门基于对象的程序设计语言和一个简单的操作系统。

本书遵循“先抽象再实现”的方式,每一章开头先有背景知识部分,用来描述相关概念和通用的硬件或软件系统。接下来的规范详述部分提供了对系统抽象的明确描述,即它能提供何种服务。再接下来的实现部分继续讨论如何来实现抽象。之后的观点部分强调每章当中没有考虑却值得注意的一些问题。每章的最后都是项目部分,提供了逐步进行构建的说明、测试程序和用于实践进行构建并进行单元测试的软件工具。
项目
本书介绍的计算机系统时实际可用的系统可被实际地构建出来,并能够正常运作。只要渡河跟随本书的脚步,逐步构建出这个计算机系统,就会对计算机系统有更透彻的理解。因此,本书再内容的编排和选择上着重针对那些卷起袖子准备动手实践,从零开始构建计算机系统的读取。
每一张都完整阐述了一个单独的硬件或软件开发项目。用来构建计算机系统硬件平台的前四个下古墓,时利用一个简单的硬件描述语言来实现的,并可再与本书配套的硬件仿真器上进行模拟测试。后续第5至9章的5个项目可以采用任何现代编程语言来编写。最后第10至12章的三个项目名则采用之前项目中实现的汇编语言和高级语言来编写。
再讲授这门课的时候,我们hi做两个大让步:
- 首先,出发时一些关键的情况,否则我们不去考虑优化问题,这个重要课题还是六个相应的专业课程来涵盖
- 其次,再开始翻译器软件包的时候,我们提供了无错误的测试文件,以便让学生再翻译器的输入没有错误的前提下对自己构建的模块进行测试。