日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux内核分析06

發(fā)布時間:2023/12/13 linux 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux内核分析06 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

進程的描述和進程的創(chuàng)建

一,進程的描述

進程控制塊PCB——task_struct (進程描述符),為了管理進程,內(nèi)核必須對每個進程進行清晰的描述,進程描述符提供了內(nèi)核所需了解的進程信息。

struct task_struct數(shù)據(jù)結(jié)構(gòu)很龐大,進程的標示pid。

Linux進程的狀態(tài)與操作系統(tǒng)原理中的描述的進程狀態(tài)有所不同,task_running代表就緒和運行兩種狀態(tài),取決于它是否獲得CPU的控制權(quán)

在這個龐大的數(shù)據(jù)結(jié)構(gòu)里,所有進程鏈表struct list_head tasks,一個雙向鏈表

程序創(chuàng)建的進程具有父子關(guān)系,在進程調(diào)度中會用到,進程描述符中會有幾個域用來表示這樣的關(guān)系。

Linux為每個進程分配一個8KB大小的內(nèi)存區(qū)域,用于存放該進程兩個不同的數(shù)據(jù)結(jié)構(gòu):Thread_info和進程的內(nèi)核堆棧。

二,進程的創(chuàng)建

fork、vfork和clone三個系統(tǒng)調(diào)用都可以創(chuàng)建一個新進程,而且都是通過調(diào)用do_fork來實現(xiàn)進程的創(chuàng)建。 ? ?

fork在父進程和子進程之間各返回一次。

fork出的子進程從哪里開始執(zhí)行? fork的進程給了一個系統(tǒng)調(diào)用,和傳統(tǒng)系統(tǒng)調(diào)用創(chuàng)建進程過程時不同。ret_from_fork

?

p指向的是ret_from_fork,所以是從這里開始執(zhí)行的。
復(fù)制內(nèi)核堆棧的時候是復(fù)制的pt_regs,即只復(fù)制了SAVE_ALL相關(guān)的那一部分,即系統(tǒng)調(diào)用壓棧的那一部分。
pt_regs里面內(nèi)容有:
Entry(ret_from_fork):
最終會跳轉(zhuǎn)到syscall_exit,這之前的內(nèi)核堆棧狀態(tài)和syscall_call的一致,然后返回用戶態(tài),變成子進程的用戶態(tài)。

?

創(chuàng)建新進程通過復(fù)制已有進程來實現(xiàn),子進程的許多數(shù)據(jù)結(jié)構(gòu)需要修改,需要一個新的內(nèi)核堆棧,該內(nèi)核堆棧一部分也是從父進程復(fù)制過來的,以為需要返回進程。

子進程的fork返回0,因為“childregs->ax?=?0;?”。

系統(tǒng)調(diào)用內(nèi)核處理函數(shù):sys_fork,sys_clone,sys_vfork

復(fù)制的內(nèi)核堆棧時只復(fù)制了內(nèi)核堆棧最棧底的部分,例如:SAVE_ALL,int指令等。

使用gdb跟蹤創(chuàng)建新進程的過程

各種函數(shù):

?

進程創(chuàng)建的分析

  • 復(fù)制一個PCB——task_struct
  • 要給新進程分配一個新的內(nèi)核堆棧
  •   3.要修改復(fù)制過來的進程數(shù)據(jù),比如pid、進程鏈表等,見copy_process內(nèi)部。

    系統(tǒng)調(diào)用內(nèi)核處理函數(shù)sys_fork,sys_vfrok,sys_clone,其實最終執(zhí)行的都是do_fork

    do_fork里有:

    三,心得

    在Linux內(nèi)核的分析里,線程被視作一種特殊的進程,和一般的操作系統(tǒng)里不同,進程的創(chuàng)建和調(diào)度都是關(guān)鍵的動作。

    轉(zhuǎn)載于:https://www.cnblogs.com/KG35/p/5329850.html

    總結(jié)

    以上是生活随笔為你收集整理的Linux内核分析06的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。