程序员的自我修养-略读
第一部分 操作系统架构
第一章
操作系统对于进程和线程的内存分配和处理。
进程地址空间:操作系统给每个进程的假定的内存空间,32位系统一般为4G,操作系统使用struct结构体管理进程地址空间,然后将实际内存与进程地址空间进行映射,实现内存管理与进程管理的分离。
线程:拥有独立的寄存器,堆栈,以及PC指针(指向下一条指令)。共享进程的内存空间,代码段,数据段,堆以及打开文件和信号。
线程安全:可重入和不可重入函数。
线程模型:用户的线程对应kernel pthread,一对一,多对一,多对多。kernel pthread 阻塞是真正的阻塞。
第二部分 静态链接
第二章编译和链接
预编译->编译->汇编->链接。
编译器需要做
词法分析:检测程序标识符,符号等等是否定义和有效。
语法分析,利用语法树分析,使用工具改变语法规则。
语义分析:分为静态语义和动态语义。
中间代码生成:然后对中间代码优化成目标代码。
链接器需要做:
地址和空间分配,
符号决议
重定位:静态链接将多个可执行文件链接时重新定位内存地址。