深刻理解计算机系统-评价

深刻理解计算机操做系统

引子:程序员

在我刚刚进入中科院计算所读研的时候,同宿舍的师兄便向我推荐了一本《深刻理解计算机系统》,这本书从一个程序员的视角详细剖析了整个计算机系统,涵盖了组成原理、汇编语言、体系结构、操做系统、网络等计算机基础知识。面试

因为时间所限,我并无马上阅读,而是将其列入了找工做前的复习书单。2010年8月,我用了一个月的时间读完了这本书的原版《Computer System:A programmer's perspective》。后来的事实证实,读完这本书对我找工做的历程帮助很大。算法

正文:
编程

在阅读的过程当中,我对该书的各个章节作了一些标注,以备未来从新翻阅的时候参考。这些标注主要从两个角度进行,一是对我找工做应试(包括笔试和面试)有没有用,二是对我自身的技术提升有没有用,因此分为应试和修炼两个指标,参照流行的打分标准将其分为从★到★★★★★五个等级。
安全

在找工做顺利结束以后,我又回顾了一下以前的标注,结合本身的笔试、面试经历,从新修订了一下。其中应试指标的评分主要是以个人求职目标(互联网行业偏算法的软件工程师)为参照,和其余职位的要求会有些出入。网络

第一章 计算机系统漫游 A Tour of Computer System
多线程

本章对计算机系统作了一个整体的介绍,用简单明了的语言归纳了一些后续章节将要重点展开的概念。
并发

应试 ★★:在笔试中可能会碰到一些总体上的概念题。
app

修炼 ★:属于计算机最基本的概念。socket

第二章 信息的表示和处理 Representing and Manipulating Information

本章介绍了信息在计算机中的表示形式,重点讲述整数和浮点数的表示形式。

应试 ★:应试中不多会考到。

修炼 ★★★:有不少人可能写了多年的代码都不知道浮点数是如何用那4(8)个字节存储的,不知道其实表达式(x-y<0)并不能替代(x< p="">

第三章 程序的机器级表示 Machine-Level Representation of Program
本章其实就是汇编语言课程的复习。

应试:重要程度依赖于求职目标,若是是和我同样偏算法的工程师,汇编语言是不会考到的。

修炼 ★★★★★:理解汇编语言和寄存器结构是后面不少内容的基础。

第四章 处理器体系结构 Processor Architecture

本章其实就是计算机体系结构课程的内容。主要介绍的内容有处理器结构,各类逻辑门、功能单元,指令集;指令的执行,指令执行的流水线等。

应试 ★: 对于软件相关职位来讲,不多会考到这么底层的东西的。

修炼 ★★★: 对于从事软件层面的技术人员来讲,不用深刻,可是也应该理解,知道是怎么回事。

第五章 优化程序性能 Optimizing Program Performance

本章讲述如何优化程序的执行效率,包括代码的优化,编译器的优化,以及CPU级别的优化。

5.1-5.6节 主要介绍了几种能有效提升代码性能的方法。

应试 ★★★★: 常常会有一些让你寻找程序瑕疵的问题,若是你能看出代码在哪些细节上能够优化,一定能加分很多。

修炼 ★★★★★: 你固然须要知道编译器在什么层面上能自动帮你优化代码,在编译器没法优化时你本身又如何在小细节上进行优化。

5.7节之后 主要介绍了CPU级别的优化,微指令的概念,功能单元上微指令的并行,程序分支的预测等。

应试 ★: 对于软件相关职位来讲,基本不会考这些东西的。

修炼 ★★★: 不用深刻,可是应该知道并可以理解。

第六章 存储器层次结构 The Memory Hierarchy

本章详细介绍了计算机系统中的存储结构。

6.1 介绍了不一样种类的存储设备以及对应的存取数据的方式。

应试和修炼 ★: 不多会考到,了解一下便可。

6.2-6.7 介绍了存储设备的组织形式,着重介绍了Cache及其工做方式,程序是如何和cache打交道的,不一样的循环嵌套顺序、遍历方向等对cache命中的影响。

应试 ★★★★: 在面试中,常常会考到跟cache相关的题目;修改循环嵌套顺序以提升cache命中率也是一些程序改错题的高级玩法。

修炼 ★★★★: 存储结构和cache是计算机中很基础也很重要的概念。

第七章 连接 Linking

顾名思义,本章详细讲解了程序的连接过程,主要分为静态连接和动态连接,以及连接过程当中使用到的技术如符号解析、重定位等。

应试 ★★:知道一些基本概念便可。

修炼 ★★★★★:一个软件工程师应该懂得本身写出来的程序是怎么成为一个可执行文件的,有的时候,你极可能会被一个连接错误折磨好几天。

第八章 异常控制流 Exceptional Control Flow

顾名思义,本章主要讲解异常控制,不过这里的“异常”并非Java或者C++里狭义的异常,而是一个广义的“Exceptions”的概念,包括中断(Interrupt),陷阱(Trap),错误(Falut),停止(Abort)等。本章同时引入了进程的概念,介绍了进程级别的 Exception:信号(signal)以及操做系统处理这个异常的手段--上下文切换(context switch)。

应试 ★★: 主要掌握进程的概念便可。

修炼 ★★★: 知道异常控制流是怎么回事,用户程序和系统交互(如系统调用)的原理和方式便可,不用太深刻。

第九章 虚拟存储器 Virtual Memory

很是重要的一章,虚拟存储机制是计算机实现多任务的一项重要技术。计算机正是经过时间片技术使得每一个进程在执行时仿佛独占CPU,进而又经过虚拟存储机制使得每个进程在执行时仿佛独占内存。

10.1介绍了虚拟地址和物理地址,CPU进行寻址操做产生的是虚拟地址,经过存储管理单元(memory management unit)转换为实际的物理内存地址。

10.3~10.5讲述了虚拟存储机制的优势:使得内存能够做为硬盘的cache;可以更方便的管理内存;能更好的提供内存保护机制。

10.6 介绍了虚拟地址如何转换为物理地址。

10.7 很精彩的一节,经过Intel Pentium和Linux的实例讲述了整个存储管理机制。记得之前上操做系统课的时候,各类理论、机制学了一大堆,但就是不知道实际的操做系统到底用的哪套方法,而本节内容正是经过实例让你对刚学的理论机制有一个直观的了解。

10.8~10.10 讲述了存储映射(Memory Mapping)、动态内存分配和垃圾回收机制。

10.11 很实用的一节,列举了一些C编程中容易犯的内存引用错误。

应试 ★★★★★: 本章内容是操做系统课程的重点内容,若是考操做系统,几乎确定会考到;10.11节的知识也能帮你应对一些程序挑错题。

修炼 ★★★★★: 操做系统中重要的基础内容,即便你只使用Java这样的高级编程语言,至少也应该弄懂垃圾回收机制吧。

第十章 系统级I/O System-Level I/O

介绍类Unix系统下的I/O读写,主要介绍系统层面的I/O接口。因为咱们平常编程所用的I/O接口都是各类高级语言提供的通过封装的标准接口,故而若是不进行底层开发的话这部分知识不是必须的,我便跳过没读。

第十一章 网络编程 Network Progranmming

本章简单介绍了网络模型,TCP/IP协议,类Unix系统的socket接口等。

应试和修炼 ★★: 由于篇幅限制,本章只作了简单讲解,要掌握网络编程知识还须要参考专门的网络技术书籍。

第十二章 并发编程 Concurrent Programming

本章简单介绍了并发程序设计的内容,主要包括:

1.进程级别的并发,各子进程拥有不一样的虚拟地址空间,须要IPC(InterProcess Communication)机制共享数据,切换开销大。

2.I/O复用,事件驱动,单进程运行,共享虚拟地址空间,并发效果不理想。

3.线程,介于上述两种中间,各子线程共享进程的虚拟地址空间,切换开销较小。

另外介绍了并发编程中访问共享变量的信号量机制,并给出了4类容易引发线程不安全的函数。

应试 ★★: 除应聘相关职位外,并发编程考的比较少,不过须要清楚锁机制和信号量机制等。

修炼 ★★★: 多线程程序在现今的开发中仍是很常见的,可是本章介绍的比较简单,须要参考另外专门的书籍。

总的来讲,我以为这本书很适合在找工做以前读一读,由于从网上流传的各类笔试和面试题中,咱们就能看出各大IT公司在招聘工程师的时候是很看重基础知识的,而对于像我这样上了三年研究

生的同窗来讲,不少知识因为长时间没用早就忘了,因此需再要再复习一下。可是咱们可能没有时间按照课程一门一门地去复习,即便一门一门去看了,也不必定能把知识都联系起来,而这本书正好提供了这样一个视角,从程序员的角度把计算机专业最重要的基础知识都串了起来,造成了一个完整的计算机系统的概念。

转自:http://book.51cto.com/art/201103/249824.htm

相关文章
相关标签/搜索