Skip to content

1 计算机系统漫游

  1. 一个程序的编译

bash gcc hello.c -o hello

  • hello.c 预处理 hello.i 编译 hello.s 汇编 hello.o 链接 可执行文件

  • 如何运行?

  • 打开shell(命令解释),对第一词语不是内置命令,则认为其为可执行文件并加载

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

  • 操作系统的进程

  • 上下文

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

  • 网络

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

  • 程序的处理

  • 阿姆达尔定律 $$ S = \frac{T_{old}}{T_{new}}=\frac{1}{1-\alpha+\frac{\alpha}{k}} $$ 描述加速某一部分对于整个进程加速效果,其中 $\alpha$ 为可加速部分占比, $k$ 为加速效率,容易推导

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

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

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

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