程序员的自我修养-读书笔记(1)
1. 温故而知新
1.2万变不离其中
三个核心部件:CPU,内存,I/O控制芯片
北桥芯片(PCI 桥):协调CPU,内存,高速图形设备。PCI总线之后又有AGP, PCI express
南桥芯片(ISA 桥):协调USB,键盘,鼠标
1.4 不要让CPU打盹
分时系统:W95, mac os x之前的系统
多任务:unix,linux,win NT
2) Windows中,图形硬件抽象成了GDI, 多媒体设备抽象为DirectX, 磁盘为文件
3)硬盘的基本存储单位为扇区,比如,一个硬盘2个盘片,就是4个盘面,每个盘面多个磁道(同心圆),每个磁道多个扇区。
4)VA到物理地址PA之间的映射靠硬件MMU实现
1.6 众人拾柴火焰高
1) 线程组成:线程ID,PC,寄存器,堆栈
2)当线程数<=CPU数,线程才是真正地并发
3)线程核心三状态:运行,就绪,等待
4)windows有明显的线程进程概念,而linux只有task(单线程的进程)
5)线程同步:
信号量(二元和多元):可以A线程获取,B线程释放
互斥量:同一个线程获取和释放
临界区:只能本线程使用
读写锁:上面三种效率低(如频繁读取,偶尔写入),采用共享或独占方式
6)过度优化可能导致多线程不能同步(如在寄存器中不写回内存,CPU调整代码执行顺序)
volatile 不优化,可以阻止寄存器不写回
2.5 静态链接
1)库就是目标文件的包,如运行时库
2)各个模块独自编译,并不知道其他模块的地址,所以需要链接来重新统一分配地址。叫重定位。