现在的位置: 首页 > 综合 > 正文

《程序员的自我修养——链接、装载与库》

2013年07月07日 ⁄ 综合 ⁄ 共 1351字 ⁄ 字号 评论关闭

第一部分

第一章 温故而知新

1.1 从Hello World说起

1.2万变不离其宗

中央处理器 CPU
内存
I/O控制芯片
总线
SMP与多核

1.3站得高,望得远

1.4操作系统做什么

提供抽象的接口
管理硬件资源

1.4.1不要让CPU打盹

多任务系统 Multi-tasking
抢占式 Preemptive

1.4.2设备驱动

1.5内存不够怎么办

1.5.1关于隔离

虚拟地址空间 Virtual Address Space
物理地址空间 Physical Address Space

1.5.2分段(Segmentation)

把一段与程序所需要的内存空间大小的虚拟空间映射到某个地址空间

1.5.3分页(Paging)

分页的基本方法是把地址空间人为地等分成固定大小的页,每一页的大小由硬件决定,或硬件支持多种大小的页,由操作系统选择决定页的大小。
MMU

1.6众人拾柴火焰高

1.6.1线程基础

什么是线程 Thread
线程访问权限
线程调度与优先级
运行
就绪
等待
可抢占线程和不可抢占线程
Linux的多线程

1.6.2线程安全

竞争与原子操作
同步与锁
二元信号量 Binary Semaphore
互斥量 Mutex
临界区 Ciritical Section
读写锁 Read-Write Lock
条件变量 Condition Variable
可重入(Reentrant)与线程安全
可重入函数特点
不适用任何(局部)静态或全局的非const变量
不返回任何(局部)静态或全局的非const变量的指针
仅依赖于调用方提供的参数
不依赖任何单个资源的锁(mutex等)
不调用任何不可重入的函数
过度优化
volatile
阻止编译器为了提高速度将一个变量缓存到寄存器内而不写回
阻止CPU换序
不可移植的方法

1.6.3线程内部情况

三种线程模型
一对一模型
多对一模型
多对多模型

1.7本章小结


第二部分

第二章 编译和链接

2.1 被隐藏了的过程

2.1.1 预编译

2.1.2 编译

2.1.3 汇编

2.1.4 链接

2.2 编译器做了什么

2.2.1 词法分析

2.2.2 语法分析

2.2.3 语义分析

2.2.4 中间语言生成

2.2.5 目标代码生成与优化

2.3 连接器年龄比编译器长

2.4 模块拼装——静态链接

2.5 本章小结

第三章 目标文件里有什么

3.1 目标文件的格式

3.2 目标文件是什么样的

3.3 挖掘SimpleSection.o

3.3.1 代码段

3.3.2 数据段和只读数据段

3.3.3 BBS段

3.3.4 其他段

3.4 ELF文件爱你结构描述

3.4.1 文件头

3.4.2 段表

3.4.3 重定位表

3.4.4 字符串表

3.5 链接的接口——符号

3.5.1 ELF符号表结构

3.5.2 特殊符号

3.5.3 符号修饰与函数签名

3.5.4 extern "C"

3.5.5 弱符号与强符号

3.6 调试信息

3.7 本章小结

第四章 静态链接

4.1 空间与地址分配

4.1.1 按序叠加

4.1.2 相似段合并

4.1.3 符号地址的确定

4.2 符号解析与重定位

4.2.1 重定位

4.2.2 重定位表

4.2.3 符号解析

4.2.4 指令修正方式

4.3 COMMON块

4.4 C++相关问题

4.4.1 重复代码消除

4.4.2 全局构造与析构

4.4.3 C++与ABI

4.5 静态库链接

4.6 链接过程控制

4.6.1 链接控制脚本

4.6.2 最"小"的程序

4.6.3 使用ld链接脚本

4.6.4 ld链接脚本语法简介

4.7 BFD库

4.8 本章小结


第三部分


第四部分

抱歉!评论已关闭.