装载
装载到哪里?内存,进程上看,是映射到了虚拟进程空间.
装载谁? 程序运行的实体代码,数据,来自elf,共享库,OS等.
怎么装载?利用程序局部性
原理: 运行某段程序时,很可能也要运行最近的1个代码块,于是先提前装载到内存.
内存肯定不够用,不过通过页映射
,需要时(缺页异常),再从磁盘load到内存,做替换.
管理这个装载过程的,就是os的存储管理器(MMU).
具体过程:
1. 建立虚拟进程空间,
2. 读取elf文件头,建立好elf与虚拟空间映射关系,(为后续缺页装载准备).虚拟进程空间有个区域叫VMA, 对应映射的是elf的.text段
4. cpu pc跳转到入口,开始运行.
5. 发现空页,缺页异常,正式装载磁盘页到映射好的物理内存,虚拟进程空间也看的到
两个视图
链接的角度,elf的段按Section
划分,(链接试图), 从装载的角度,elf按Segment
(执行试图), 后者为了装载方便,不浪费内存,可能进行了段的合并优化等.