CSAPP 学习笔记 Chapter one

写在读书前

本学期之前就听过这本书的大名,一直没有机会好好读一读。正好到了大三下,课程稍微少了一些,能够留时间出来专门来读书。翻了一些别人推荐的书单,有算法的,计算机系统的,还有各个具体CS子方向的。到目前为止,操作系统、汇编、计算机组成原理等专业大课都已经学完,虽然对这些方面都有了较为系统的认知,但是对之间许多知识了解得还不够透彻,掌握不牢。加之到目前为止也有一定的代码量了,在很多问题实现时,也需要理解底层的一些知识。基于这样的一些原因,选择了CSAPP,综合了这几个学科,再认真地过一遍,不说融会贯通,至少把知识掌握得更加牢固,减少以后实践的潜在盲点。

打算这学期把这本书读完,做笔记也同时是一种自我监督。


Chapter one

本章主要是一些概述性内容,但不乏很多精辟的总结。

1.1

  1. “源程序实际上就是由值0和1组成的位(bit)序列”
    不止是源程序,所有x都是系统中的信息——包括磁盘文件、程序、用户数据、网络数据都是二进制序列,计算机能处理的也就是比特流。
  2. “区别不同数据对象唯一方法是我们读到这些数据对象时的上下文,一个同样的字节序列,在不同的上下文中,可能表示一个整数、浮点数、字符串或者机器指令”
    计算机其实只能识别二进制0/1,并不知道比特流的真正含义,每个序列是什么意思都是人为规定的,设计人员规定好了每个比特序列的意思后,在设计底层硬件结构时进行表示转换,对上层提供统一的接口。

1.2

  1. “对于一个C语言程序,每条C语言语句都要被其他程序转化为一些列的低级机器语言指令,将它们再按一种称为可执行目标程序的格式打包存放”
    这个翻译过程可以分为4个阶段:
    • 预处理:将头文件插入到程序中,得到另一个C程序
    • 编译:将C程序翻译成汇编语言程序
    • 汇编:将汇编语言程序翻译成机器语言指令,打包成可重定位目标程序的格式,保存到.o文件中
    • 链接:将程序中调用的其他模块(如printf函数)的.o文件与该文件合并,得到可执行目标文件,可以被系统执行,加载到内存中

1.4

  1. “在unix系统上运行可执行文件,我们将文件名输入到称为外壳(shell)的应用程序中,它实际上是一个命令行解释器,输出一个提示符,等待输入一行命令,根据命令内容进行相应操作”
    shell其实就是一个应用程序
  2. “控制器是置于I/O设备本身的或者系统的主板上的芯片组,而适配器则是一块插在主板插槽上的卡”
  3. “主存是由一组动态随机存取存储器(DRAM)芯片组成的,逻辑上说就是一个线性的字节数组,数组索引就是地址”
  4. “程序执行时,数据经过I/O桥到达CPU再到达主存,DMA可以省去经过CPU的这个过程,程序加载到主存后,逐条指令加载到CPU寄存器中,再送到相应位置(显示屏等)”

1.5

  1. “系统花费了大量时间把信息从一个地方挪到另一个地方,这些复制就是开销,系统设计者的目标就是减少这样的开销”
  2. “利用缓存的局部性原理可以减少开销”
    局部性原理就是当前执行指令的周围的执行很可能将要执行

1.6

  1. “在CPU和主存间插入一个更小更快的存储设备能大大较少开销,多种不同类型的存储设备有机结合形成了存储体系”
    某一层的存储器作为低一级的高速缓存,CPU->Cache->主存->硬盘->网络服务器的存储器

1.7

  1. “操作系统的抽象概念:文件是对I/O设备的抽象表示,虚拟存储器是对主存和磁盘I/O的抽象表示,进程是对处理器、主存和I/O设备的抽象表示”
    将这个概念抽象出来,隔绝了底层硬件,为上层用户提供统一接口
  2. “并发执行,是指一个进程的指令和另一个进程指令交错执行,这种交错执行机制就是上下文切换”
    并发可以理解为一个单核CPU运行多个程序,而并行可以理解为一个多核CPU的每个核上运行单个程序
  3. “虚拟存储器的基本思想,把一个进程的虚拟存储器的内容存储到磁盘上,用主存作为磁盘的高速缓存”
  4. “文件就是字节序列”

1.8

  1. “从单一计算机系统看,网络相当于一个I/O设备,系统将数据从主存放到网络适配器中,发送到网络中,接受过程类似”

1.9

  1. “流水线中,将一条指令划分为不同步骤,硬件组织成一些列阶段,每个阶段执行一个步骤,这些阶段可以并行操作,处理一条指令的不同部分”

你可能感兴趣的:(笔记,CSAPP)