Linux內核分析第四周作業(yè)

實驗截圖

代碼分析

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的系統(tǒng)調用號是2號,將它放入eax寄存器中。
    "int $0x80\n\t"       //通過此句指令,調用存在于eax寄存器中的2,執(zhí)行2號系統(tǒng)調用即fork。
    "mov %%eax,%0\n\t"    //執(zhí)行fork系統(tǒng)調用完成后會返回子進程pid到eax中,此句將子進程pid返回到內存中。
    :"=m"(pid)
    );
}

總結

高級編程語言在API中封裝了系統(tǒng)調用,比如C語言中就將2號系統(tǒng)調用封裝在fork函數中。執(zhí)行系統(tǒng)調用時,Linux現將系統(tǒng)調用號存入eax寄存器中,在執(zhí)行int $0x80指令來執(zhí)行該系統(tǒng)調用,執(zhí)行完后返回的值存于eax寄存器中,再將其返回內存。



Sawoom原創(chuàng)作品轉載請注明出處
《Linux內核分析》MOOC課程http://mooc.study.163.com/course/USTC-1000029000

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容