Linux内核分析第四周作业

实验截图

Linux内核分析第四周作业_第1张图片

代码分析

fork.c
#include
#include
#include

void main()
{
    printf("Hello World !");
    fork();//生成一个与主进程一模一样的子进程,并返回子进程的pid。
}

fork-asm.c
#include
#include
#include

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内核分析第四周作业)