CSAPP 1. 计算机系统漫游

yyi
yyi
2023-08-02 / 0 评论 / 131 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年08月08日,已超过250天没有更新,若内容或图片失效,请留言反馈。

计算机系统漫游

本章跟随一个 hello, world 程序,介绍它的生命周期中出现的相关概念。

1 从源程序开始

文本文件:只由ASCII字符(现在也包括Unicode字符)组成的文件。

  • 文本文件实质上是一个由{0, 1}两个值组成的位(bit)序列
  • 8个bit被组织为一组,称为字节

源程序:程序员通过编辑器创建并保存的文本文件。

计算机系统中的一切信息,包括磁盘上的、内存上的、网络上的,都是由一串比特表示的。区分不同数据的唯一方法是我们读取到这些数据时的上下文。根据不同的上下文,一个同样的字节序列可能表示整数、浮点数、字符串或指令等。

2 到目标文件

源文件需要经过编译系统(包括{预处理器,编译器,汇编器,链接器})转化为一系列机器指令,进而运行

  • 预处理负责处理以 # 开头的编译器命令,如展开 include 并直接插入到原文件
  • 编译阶段负责把上一阶段生成的文件翻译为汇编程序,它是语言无关、机器相关的。它仍是一个文本文件。
  • 汇编器负责把汇编程序翻译为二进制的目标程序。
  • 链接器负责把调用的库函数*插入到目标程序中,以供目标程序调用。

*:实际上并不只是这样,其他文件的全局符号(包括函数、变量)也会被处理。根据链接方式的不同,可能也不是在这一步插入。这部分后面应该会有更详细的解释。

3 为什么要了解编译系统

  • 了解机器语言级别,我们的高级代码是如何运转的,进一步的,可以寻觅提升性能的方法。
  • 了解链接出现的错误
  • 避免漏洞

4 典型的硬件系统

一个典型的硬件系统主要由如下几部分构成

  1. 总线(Bus):负责在各个部件间传递定长的信息,该定长一般称为字
  2. IO设备:如硬盘、鼠标等,作为用户输入输出,通过适配器或控制器与总线相连。
  3. 主存:存放运行时程序和程序数据。逻辑上是一个线性的字节数组,其索引称为地址。
  4. 处理器:执行主存中存放的指令的部件。处理器中有一系列大小为一个字的存储设备(寄存器)。包括通用寄存器和一系列只能执行特定功能的寄存器

5 高速缓存

程序与数据最初存放在磁盘上,在加载时被复制到主存。

寄存器文件速度快、可存放内容少、造价高

主存速度相对慢、可存放内容相对多、造价相对低

高速缓存:作为暂时的集结区域,存放处理器近期可能需要的信息,速度比主存快很多

  • 高速缓存分级,L1容量可以达到数万字节,速度接近寄存器
  • L2容量在数十万到百万字节,比L1慢5倍
  • 高速缓存由SRAM精彩随机访问存储器实现

6 存储器层次结构

存储器分层,高层做低层的高速缓存,期望达到接近高层的容量、低层的访问速度

一个典型的层次结构从低到高可能包括:寄存器、L1-L3、主存、磁盘、远程存储(分布式文件系统、Web)

7 操作系统管理硬件

操作系统主要提供两个基本功能

  • 防止硬件被程序滥用
  • 为程序提供简单一致的机制控制复杂且不同的硬件设备,主要机制包括

    • 进程
    • 虚拟内存
    • 文件

7.1 进程

进程:OS对正在运行的程序的一种抽象,系统可以同时运行多个进程,每个进程认为自己独占硬件。

并发运行:不同进程的指令是交错执行的,OS通过上下文切换实现这种机制

上下文:进程运行所需的状态信息,主要包括

  • 程序计数器PC和寄存器的值
  • 主存的内容

7.2 线程

一个进程可以由多个称为线程的执行单元组成,共享代码和数据

7.3 虚拟内存

虚拟内存使得进程认为自己独占的使用主存,每个进程看到的内存都一致,称为虚拟地址空间。

Linux下虚拟地址空间从低地址到高地址主要由这些内容组成:

  • rodata和text:只读数据和代码
  • data、bss:可读写的数据
  • heap:堆,向上增长
  • 共享库的映射
  • stack:由用户空间的最高地址向下增长
  • kernel:内核的虚拟内存

7.4 文件

文件就是字节序列,在Linux(Unix)中,设备与网络都可以看作是文件。

8 网络通信

计算机系统通过网络和其他系统连接到一起,以实现信息的复制。

9 总结

系统:硬件和软件系统交织的结合体

9.1 Amdalh定律

定律:对系统的某个部分加速时,对系统性能影响取决于该部分重要性和加速程度。

$$ 执行某程序时间T_{old},某部分执行时间与其之比为\alpha,该部分性能提升比例为k $$

$$ 加速比S=\frac{1}{(1-\alpha)+\alpha/k} $$

9.2 并发和并行

并发:一个同时具有多个活动的系统

并行:用并发使得一个系统运行的更快

从高到低主要三个层次

  1. 线程级并发:同时执行多个线程:超线程/多线程技术
  2. 指令级并行:同时执行多条指令:pipeline
  3. 单指令、多数据并行:单条指令同时处理多条数据:SIMD

9.3 抽象

文件是对IO设备的抽象

虚拟内存是对存储器的抽象

进程是对正在运行的程序的抽象。

0

评论 (0)

取消