CSAPP瞎几把笔记

1 计算机系统漫游

  1. 一个程序的编译

    1
    gcc hello.c -o hello
    • hello.c 预处理 hello.i 编译 hello.s 汇编 hello.o 链接 可执行文件
  2. 如何运行?

    • 打开shell(命令解释),对第一词语不是内置命令,则认为其为可执行文件并加载
    • CPU处理器
      • PC 程序计数器,大小为一个字(32-bit: 4bytes;64-bit: 8bytes)CPU会执行PC所指向的命令
      • 寄存器文件(Register file)包含若干个寄存器,单字长
      • ALU 计算功能
    • 内存 从0开始的大数组,由随即动态存储器的芯片构成
    • Bus总线 传送字
    • 控制器 适配器 在IO主线和IO设备之间传送数据
    • 其他设备 磁盘、IO设备等等
    • Cache 高级缓存,为了弥补磁盘内存寄存器读取速度越来越慢造成的时间开销
  3. 操作系统的进程

    • 上下文
    • 线程 进程包括多个进程
    • 进程的虚拟地址空间,从下到上
      • 代码数据区,从文件直接读写在这个区域 例如全局变量
      • 堆 例如malloc分配,可以动态的扩展
      • 共享库 例如printf函数的库
      • 栈 函数,不过是从高到低
      • 内核保留的区域 程序不可见的
    • linux设计思维:一切皆文件
  4. 网络

    • 例如客户端与服务端的交互 shell输入指令 -> 通过ssh发送请求到服务端 -> 服务端处理程序 -> 把处理结果发送回shell -> shell显示结果
  5. 程序的处理

    • 阿姆达尔定律

      S=ToldTnew=11α+αk S = \frac{T_{old}}{T_{new}}=\frac{1}{1-\alpha+\frac{\alpha}{k}}

      描述加速某一部分对于整个进程加速效果,其中 α\alpha 为可加速部分占比, kk 为加速效率,容易推导

    • 多核处理器 单颗芯片继承多个CPU

    • 超线程并发 更好的处理资源

    • 指令级并行 同时处理多条指令,大多处理器保持每个周期执行2-4个指令(即流水线技术)

    • 单指令多数据 指令加速 SIMD等等