[TOC]
1. 前言
1.1 为什么要学计算机系统要素?
随着现代计算机技术的日趋复杂,计算机科学领域里面大多数基本思想和技术都被隐藏在众多抽象接口以及私有实现的层面之下.
很多学生识木不识林,疲于埋头学习程序设计,失去了对计算机系统整体的把握和理解.
所以,需要对计算机系统有个大局观
1.2 大局观有什么用?
可以展示硬件系统和软件系统如何经由隐藏的抽象,接口以及基于各种约定的实现所编织起来的网,从而紧紧地联系在一起.
1.3 本书的结构:
每一层级都是通过其底一层所提供的抽象服务和构建块来实现.
一本书TCP/IP Guide里面介绍网络的设计也是一层层不断抽象而上的.
2. 介绍:Hello,World Below
真正的发现之旅不在于去新的地方,而在于拥有一双新的眼睛.---Marcel Proust
2.1 能学到什么?
- 1.计算机如何工作
- 2.如何将复杂问题分解为易于管理的模块
- 3.如何开发大规模硬件和软件系统
2.2 怎么学?
通过实践,从零开始构建一个完整的,工作的计算机系统.
2.3 为什么要这样学?
唯一能够显著影响行为的学习就是自我发现或自我适应---真理汲取自经历体验.--- Carl Rogers
2.4 上面的世界
hello world这样的小程序是怎么才能在计算机中运行的呢?
对底层世界的深刻理解也是区分普通程序员和高级开发者(软硬都行)的标准.
2.5 抽象:
1 如何解决这么复杂的任务(逻辑门到完整的计算机)?
将整个项目划分为许多个模块(module),然后分次单独处理
2 什么是好的模块化设计?
可以单独处理每个模块,而完全不管系统的其他部分.
3 为什么可以这样设计?
人类独有的天赋:我们所拥有的建立和使用抽象概念(abstractions)的能力.
4 什么是抽象?
一般所谓抽象概念
是作为表达思想的方式,将事物本质性的东西从思维上独立出来,以求用概况的方式来把握事物.计算机科学里的抽象
定义得比较非常具体
认为它是关于"事物要做什么"的概念,而不用考虑"如何来做".
这种功能性定义必须包含足够的信息以便使用该事物能够提供的服务.事物在实现中的所有内容(包括技巧,内部信息,精妙之处等),都对要使用该事物的客户隐藏起来,因为这些与客户并没有关系.
硬件和软件开发者都会定义抽象(也称为接口,interfaces),然后进行实现或留给其他人来实现.
抽象通常是分层构建(一层构建在另一层之上),从而形成了越来越高层级的抽象能力.
2.6 下面的世界
2种描述形式
- top-down
展示高级抽象如何被简化或表示成较简单抽象. - bottom-up
展示底层抽象如何构建更复杂的抽象
本书采用bottom-up.从逻辑门到计算机.
2.7 概览本书结构:
1.高级语言的领地:
最高级的抽象就是程序设计艺术.
2.向下通往硬件领地之路:
任何程序在实际运行之前,首先必须被翻译成某种目标计算机平台的机器语言.
这个编译(compilation)过程十分复杂.于是继续被划分成若干个抽象层级.
这些抽象层包含三种翻译器:
- 编译器
- 虚拟机
- 汇编编译器