1. 任务

exec 系统调用用于启动一个新程序。它必须彻底销毁当前的内存布局,换成新程序的布局。

2. 核心流程

  1. 读取 ELF 头部:检查文件格式是否合法。
  2. 分配新页表:调用 proc_pagetable
  3. 加载程序段:调用 loadseg 将 ELF 文件中的代码和数据通过 mappages 映射到新地址空间。
  4. 分配栈:在程序段上方分配两页内存(一页作为 Guard Page,一页作为真正的栈)。
  5. 准备参数:将命令行参数压入新栈。
  6. 切换页表:一旦加载成功,就提交(commit)新页表并释放旧页表。