exec系统调用都做了哪些事?

作者: 橡树人 | 来源:发表于2021-01-04 16:22 被阅读0次

    从整体上讲,exec系统调用创建了用户部分的地址空间

    具体地讲,做了9件事:

    1. 调用nami函数打开有名字的二进制路径path
    2. 读取ELF文件头;
    3. 检查该文件是否是ELF文件;
    4. 调用proc_pagetable来分配新的无用户映射的页表;
    5. 调用uvmalloc为每个ELF段分配内存;
    6. 调用loadseg将每个段加载进内存;
    7. 分配和初始化用户栈;
    8. 将新内存映像提交给新页表;
    9. 清空旧页表;

    谁创建了用户部分的地址空间?

    exec系统调用

    exec系统调用如何分配和初始化用户栈?

    • 只分配一个栈页;
    • 将参数字符串拷贝到栈顶,一次拷贝一个参数,在ustack中记录指向参数的指针;
    • 在传递给main函数的argv列表末尾放入一个null指针;
    • 刚好在栈页的下方放入一个不可访问页;

    栈保护页有什么作用?

    • 保证那些尝试使用超过一个页的程序都失败;
    • 允许exec处理过大的参数;
      exec调用copyout函数将参数拷贝到栈上时,copyout就会注意到目的页是不可访问的,返回-1

    相关文章

      网友评论

        本文标题:exec系统调用都做了哪些事?

        本文链接:https://www.haomeiwen.com/subject/nxyvoktx.html