Linux系統分析之進程

來源:互聯網
上載者:User

1. 什麼是進程

進程是處於執行期的程式以及它所包含的所有資源的總稱,包括虛擬處理器,虛擬空間,寄存器,堆棧,全域資料段等。

 

在Linux中,每個進程在建立時都會被分配一個資料結構,稱為進程式控制制塊(Process Control Block,簡稱PCB)。PCB中包含了很多重要的資訊,供系統調度和進程本身執行使用。所有進程的PCB都存放在核心空間中。PCB中最重要的資訊就是進程PID,核心通過這個PID來唯一標識一個進程。PID可以迴圈使用,最大值是32768。init進程的pid為1,其他進程都是init進程的後代。

 

除了進程式控制制塊(PCB)以外,每個進程都有獨立的核心堆棧(8k),一個進程描述符結構,這些資料都作為進程的控制資訊儲存在核心空間中;而進程的使用者空間主要儲存代碼和資料。

 

2) 進程的建立

進程是通過調用::fork(),::vfork()和::clone()系統調用建立新進程。在核心中,它們都是調用do_fork實現的。傳統的fork函數直接把父進程的所有資源複製給子進程。而Linux的::fork()使用寫時拷貝頁實現,也就是說,父進程和子進程共用同一個資源拷貝,只有當資料發生改變時,資料才會發生複製。通常的情況,子進程建立後會立即調用exec(),這樣就避免複製父進程的全部資源。

 

三者的區別如下:

::fork():父進程的所有資料結構都會複製一份給子進程(寫時拷貝頁)。

::vfork():只複製task_struct和核心堆棧,所以產生的只是父進程的一個線程(無獨立的使用者空間)。

::clone():功能強大,帶了許多參數。::clone()可以讓你有選擇性的繼承父進程的資源,既可以選擇像::vfork()一樣和父進程共用一個虛擬空間,從而使創造的是線程,你也可以不和父進程共用,你甚至可以選擇創造出來的進程和父進程不再是父子關係,而是兄弟關係。

 

 

3. 進程的撤銷

進程通過調用exit()退出執行,這個函數會終結進程並釋放所有的資源。父進程可以通過wait4()查詢子進程是否終結。進程退出執行後處於僵死狀態,直到它的父進程調用wait()或者waitpid()為止。父進程退出時,核心會指定線程組的其他進程或者init進程作為其子進程的新父進程。當進程接收到一個不能處理或忽視的訊號時,或當在核心態產生一個不可恢複的CPU異常而核心此時正代表該進程在運行,核心可以強迫進程終止。

 

4. 進程管理

核心把進程資訊存放在叫做任務隊列(task list)的雙向迴圈鏈表中(核心空間)。鏈表中的每一項都是類型為task_struct,稱為進程描述符結構(process descriptor),包含了一個具體進程的所有資訊,包括開啟的檔案,進程的地址空間,掛起的訊號,進程的狀態等。

 

 

 

Linux通過slab分配器分配task_struct,這樣能達到對象複用和緩衝著色(通過預先分配和重複使用task_struct,可以避免動態分配和釋放所帶來的資源消耗)。

核心把所有處於TASK_RUNNING狀態的進程組織成一個可運行雙向迴圈隊列。調度函數通過掃描整個可運行隊列,取得最值得執行的進程投入執行。避免掃描所有進程,提高調度效率。

 

 

5. 進程的核心堆棧

Linux為每個進程分配一個8KB大小的記憶體地區,用於存放該進程兩個不同的資料結構:thread_info和進程的核心堆棧。

 

進程處於核心態時使用不同於使用者態堆棧,核心控制路徑所用的堆棧很少,因此對棧和描述符來說,8KB足夠了。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.