CSAPP学习笔记(一)

Posted by HK on January 22, 2019

第一章通过一个C语言的hello小程序,对计算机系统的进行一个轮廓性的描述,并在其中穿插本书各个章节的的主要讲述内容。

第一章 计算机系统漫游

计算机系统由硬件和系统软件组成。

信息就是位+上下文

源程序:由值0和1组成的位序列

位又称为比特。8位被组织成一组,称为字节。每个字节表示程序中的某些文本字符。

系统中所有的信息——包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上的传送数据,都是由一串比特表示的。

区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。

~相同的数据,处于不同的环境,就会表达出不同的含义,这里的环境即是上下文。~

编译系统(compilation system)

img

hello.c翻译成可执行的目标文件hello分为四个阶段完成

  1. 预处理阶段:cpp根据以字符#开头的命令,修改源程序。
  2. 编译阶段
  3. 汇编阶段
  4. 链接阶段

即 高级语言—>汇编语言—>二进制

系统的硬件组成

img

  1. 总线:携带信息字节并负责在各个部件间传递的贯穿整个系统的一组电子管道。通常总线被设计成传送定长的字节块(字word)。
  2. I/O设备:系统与外部世界的联系通道。每个I/O设备都通过一个控制器或适配器与I/O总线相连。
  3. 主存:临时储存设备,在处理器质性程序时,用来存放程序和程序处理的数据。内存由一组动态随机存储器(DRAM)芯片组成。
  4. 处理器:中央处理单元(CPU)解释或执行存储在主存中指令的引擎。处理器的核心是是一个大小为一个字的存储设备(或寄存器),称为程序计数器(PC)。在任何时候,PC都指向主存中的某条机器语言指令(即含有该条指令的地址)

字中的字节数(即字长)是一个基本的系统参数,各个系统不同。一般机器字长为 4个字节(32位)或8个字节(64位)。

控制器与适配器之间的区别主要在于它们的封装方式。 控制器是I/O设备本身或者系统的主印制电路板(主板)上的芯片组。适配器是一块插在主板插槽上的卡。但两者功能均为在I/O总线和I/O设备之间传递消息。

处理器从程序计数器指向的内存处读取指令,解释指令中的位,执行该指令指示的简单操作,然后更新PC,使其指向下一条指令,而这条指令并不一定和在内存中刚刚执行的指令相邻。

简单操作的例子:

  1. 加载:从主存复制一个字节或一个字到寄存器,以覆盖寄存器原来的内容。
  2. 存储:从寄存器复制一个字节或一个字到主存的某个位置,以覆盖这个位置上原来的内容。
  3. 操作:把两个寄存器的内容复制到ALU,ALU对这两个字做算术运算,并将结果存放到一个寄存器中,以覆盖该寄存器中原来的内容。
  4. 跳转:从指令本身中抽取一个字,并将这个字复制到PC中,以覆盖PC中原来的值。

简单操作围绕着主存、寄存器文件(register file)和算术/逻辑单元(ALU)进行。

寄存器文件:由一些单个字长的寄存器组成的存储设备,每个寄存器都有唯一的名字。

ALU:计算新的数据和地址值。

处理器的指令架构和处理器的微体系结构

  1. 指令集架构描述的是每条机器代码指令的效果。
  2. 微体系结构描述的是处理器实际实现方式。

高速缓存

由于CPU的处理速度越来越快(通过在单一芯片上集成多个CPU),存储设备跟不上CPU的处理速度,从而降低了系统的性能。通过缓存技术达到提高部分性能的效果(缓存的策略及缓存所使用的硬件对性能有一定的影响)。

img

操作系统管理硬件

-文件:是对I/O设备的抽象表示 -虚拟内存:是对主存和磁盘I/O设备的抽象表示 -进程:是对处理器、主存和I/O设备的抽象表示 -线程:归属于进程,一个进程拥有多个线程。因为进程之间切换所需要的时间和资源开销(保存现场和恢复现场等)较大,所以提出了线程的概念,线程之间共享所属进程拥有的全部资源