1. 任务
exec 系统调用用于启动一个新程序。它必须彻底销毁当前的内存布局,换成新程序的布局。
2. 核心流程
- 读取 ELF 头部:检查文件格式是否合法。
- 分配新页表:调用
proc_pagetable。 - 加载程序段:调用
loadseg将 ELF 文件中的代码和数据通过mappages映射到新地址空间。 - 分配栈:在程序段上方分配两页内存(一页作为 Guard Page,一页作为真正的栈)。
- 准备参数:将命令行参数压入新栈。
- 切换页表:一旦加载成功,就提交(commit)新页表并释放旧页表。