分页
线程
处于运行中线程拥有一段可以执行的时间,这段时间称为时间片(Time Slice),当时间片用尽的时候,该进程将进入就
绪状态。如果在时间片用尽之前进程就开始等待某事件,那么它将进入等待状态。每当一个线程离开运行状态时,调度系统就
会选择一个其他的就绪线程继续执行。在一个处于等待状态的线程所等待的事件发生之后,该线程将进入就绪状态。这3个状
态的转移如图1-9所示。
线程安全
多线程程序处于一个多变的环境当中,可访问的全局变量和堆数据随时都可能被其他的线程改变。因此多线程程序在并发时数据的一致性变得非常重要。
命令
- 预编译
- 编译
或者
- 汇编
或者
目标文件的格式
gcc binutils
gcc:特指GCC中的C语言编译器
Binutils工具集
挖掘SimpleSection.o
-
编译生成.o
-
binutils的工具objdump来查看object内部的结构
-
size 命令
代码段
数据段
BSS段
符号表
其他段
.rodata1 – Read only Data,这种段里存放的是只读数据,比如字符串常量、全局 const 变量。跟".rodata"一样
.comment – 存放的是编译器版本信息,比如字符串:“GCC: (GNU) 4.2.0”
.debug – 调试信息
.dynamic – 动态链接信息
.hash – 符号hash表
.line – 调试时的行号表,即源代码行号与编译后指令的对应表
.note – 额外的编译器信息。比如程序的公司名、发布版本号等
.strtab – String Table.字符串表,用于存储ELF文件中用到的各种字符串
.symtab – Symbol Table.符号表
.shstrtab – Section String Table.段名表
.plt .got – 动态链接的跳转表和全局入口表
.init .fini – 程序初始化与终结代码段。见"C++全局构造与析构"一节
ELF文件结构描述
文件头
段表
重定位表
字符串表
链接的接口——符号
特殊符号
强符号和弱符号
空间与地址分配
符号解析和重定位
重定位表
静态库
可执行文件的装载与进程
装载的方式
进程的建立
为什么要动态链接
简单的动态链接例子