《深入理解计算机系统》读后感

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《深入理解计算机系统》读后感

第一次听到这本书还是我们的导师袁志斌老师介绍的。在这之前我是对它毫无概念可言。袁老师对这本书可谓是推崇备至,因此就介绍给我们全班,并希望说让我们能够静下心好好的去看它、了解它。于是我开始了阅读"深入"的征程。

之所以说是"征程"是因为这本说的内容确实是很难。至少是对于我来说。很多东西之前都没有接触过。除了那点少的可怜的C语言底子之外就剩下数字电路的东西了。其他的基本上是听都没听过。毕竟这本书要求先修的课程有很多,神马《计算机组成原理》,《汇编程序设计》。这些都没有学过。但是,就算是这样,凭着被袁老师鼓起的热情,硬着头皮买了它,开始了啃"深入"的日子。

在这里先简单的介绍一下"深入"的基本章节内容。

第一章A Tour of Computer System

对计算机系统总体的做了一个简单的介绍,

第二章Representing and Manipulating Information

主要说的是信息在计算机中的表示形式。包括整数和浮点数的表示形式。

第三章Machine-Level Representation of Program

汇编语言的复习。过程调用,尤其是过程调用(包括递归调用)中堆栈的使用情况是经常会考到的。

数据在内存中的"对齐"方式,也是经常出现在考题中的。比如定义一个结构体数组,打印出其中一个元素的地址,问这个地址相对数组起始地址有多少个字节的距离。

第四章Processor Architecture

计算机体系结构的内容。

处理器结构,各种逻辑门、功能单元,指令集,指令的执行,指令执行的流水线等。

第五章Optimizing Program Performance

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

CPU级别的优化,微指令的概念,功能单元上微指令的并行,程序分支的预测等。

第六章The Memory Hierarchy

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

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

6.2-6.5介绍了存储设备的组织形式,着重介绍了Cache及其工作方式。

6.6-6.7介绍了程序如何和cache打交道,不同的循环嵌套顺序、遍历方向等对cache命中的影响。

第七章Linking

顾名思义,详细讲解了程序的链接过程,主要分为静态链接和动态链接,以及链接过程中使用到的技术。

第八章Exceptional Control Flow

顾名思义,本章主要讲解异常控制,不过这里的"异常"并不是Java或者C++里的狭义的异常,而是一个广义的"Exceptions"的概念,包括中断(Interrupt,硬件层面,主要是I/O中断),陷阱(Trap,主动产生的异常,主要用于用户程序和系统内核间的交互,如系统调用),错误(Falut,如除0错误;页错误:在虚拟内存中,所请求页面并不在内存中,需要从硬盘读取等。错误可能恢复),中止(Abort,致命错误,无法恢复,如硬件问题等)。在介绍异常处理的同时,引入了进程的概念,对进程控制也进行了详细介绍,以及进程级别的Exception:信号(signal),这个级别的异常处理由操作系统完成,通常叫做上下文切换(context switch)。

第九章Measuring Program Execution Time

本章介绍了如何尽可能准确的测量程序执行的时间。

第十章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编程中容易犯的内存引用错误。

第十一章System-Level I/O

介绍类Unix系统下的I/O读写,主要介绍系统层面的I/O接口。由于我们日常编程所用的I/O接口都是各种高级语言提供的经过封装的标准接口,故而如果不进行嵌入式编程的话这部分知识不是必须的,我跳过没读。

第十二章Network Progranmming

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

第十三章Concurrent Programming

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

进程级别的并发,各子进程拥有不同的虚拟地址空间,需要

IPC(InterProcess Communication)机制共享数据,进程之间切换开销大。

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

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

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

上面这些是我粗略的通读一遍所了解的。限于各种原因,如专业课程,时间安排不来等等,我只能精读过了前面三章,所以与其说是读后感倒不如说是读书笔记。下面便是我的学习所得。

1)对于一个无符号数字x,截断它到k位的结果就相当于计算x mod 2^k.

相关文档
最新文档