美文网首页
Linux内核分析第四周作业

Linux内核分析第四周作业

作者: Sawoom | 来源:发表于2016-03-15 15:53 被阅读0次

    实验截图

    代码分析

    fork.c
    #include<stdio.h>
    #include<sys/types.h>
    #include<unistd.h>
    
    void main()
    {
        printf("Hello World !");
        fork();//生成一个与主进程一模一样的子进程,并返回子进程的pid。
    }
    
    
    fork-asm.c
    #include<stdio.h>
    #include<sys/types.h>
    #include<unistd.h>
    
    void main()
    {
        int pid;
        printf("Hello World!");
        asm volatile(
        "mov $0x2,%%eax\n\t"    //fork的系统调用号是2号,将它放入eax寄存器中。
        "int $0x80\n\t"       //通过此句指令,调用存在于eax寄存器中的2,执行2号系统调用即fork。
        "mov %%eax,%0\n\t"    //执行fork系统调用完成后会返回子进程pid到eax中,此句将子进程pid返回到内存中。
        :"=m"(pid)
        );
    }
    
    

    总结

    高级编程语言在API中封装了系统调用,比如C语言中就将2号系统调用封装在fork函数中。执行系统调用时,Linux现将系统调用号存入eax寄存器中,在执行int $0x80指令来执行该系统调用,执行完后返回的值存于eax寄存器中,再将其返回内存。



    Sawoom原创作品转载请注明出处
    《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

    相关文章

      网友评论

          本文标题:Linux内核分析第四周作业

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