
CSAPP瞎几把笔记
Tanpinsary1 计算机系统漫游
-
一个程序的编译
1
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显示结果
-
程序的处理
-
阿姆达尔定律
描述加速某一部分对于整个进程加速效果,其中 为可加速部分占比, 为加速效率,容易推导
-
多核处理器 单颗芯片继承多个CPU
-
超线程并发 更好的处理资源
-
指令级并行 同时处理多条指令,大多处理器保持每个周期执行2-4个指令(即流水线技术)
-
单指令多数据 指令加速 SIMD等等
-