11. 动态链接和加载

可执行文件 (和 Core Dump) 都是描述进程状态的数据结构。对于 ELF 文件来说,其中最重要的部分是一些 PT_LOAD 的数据段,正确在进程地址空间中 (用 mmap) 映射它们,就能实现程序的加载——就像我们在 Funny Little Executable 里做的那样。

本讲内容:当开发者希望把库函数和应用程序 “分离” 开,但又希望库函数可以被调用,应该怎么办?

11.1 动态链接:机制

11.2 mmap 和虚拟内存

💬
Prompt: (slides contents...) 我们还可以扫描内存做什么?

11.3 实现动态链接

11.4 总结

Take-away Messages: 找到正确的思路,我们就能在复杂的机制中找到主干:在动态链接的例子里,我们试着自己实现动态链接和加载——在这个过程中,我们 “发明” 了 ELF 中的重要概念,例如 Global Offset Table, Procedure Linkage Table 等。

课后习题/编程作业

📚阅读材料 (参考阅读)

教科书 Operating Systems: Three Easy Pieces

  • 第 17 章 - Free Space Management
  • 第 18 章 - Introduction to Paging 🌶️
  • 第 19 章 - Translation Lookaside Buffers 🌶️
  • 第 20 章 - Advanced Page Tables 🌶️
  • 第 21 章 - Swapping: Mechanisms 🌶️
  • 第 22 章 - Swapping: Policies 🌶️
  • 第 23 章 - Complete VM Systems 🌶️