Linux核心 程序管理

2021-07-02 19:35:23 字數 947 閱讀 9217

注:對linux系統來說,執行緒只是一種特殊的程序,linux不區分執行緒和程序;

程序:處於執行期的程式+包含的資源

一、程序描述符及任務結構

程序存放在任務佇列(task list)的雙向迴圈鍊錶中;鍊錶中每一項型別均為task_struct(程序描述符,也可表示為task_t),該結構定義在include/linux/sched.h檔案中。

1. 分配程序描述符

struct thread_info在檔案/thread_info.h

>中定義,x86體系結構中,thread_info內容:

struct thread_info ;

2.程序描述符的存放

3.程序狀態

程序狀態轉換圖:

設定當前程序狀態的方法:

p->state = state(p是程序描述符指標) <=> set_current_state(state) <=> set_task_state( current , state )(注:current巨集獲取當前程序描述符指標)

4.程序上下文

5.程序家族

6.程序間聯絡(雙向鍊錶)

7.程序建立

(1)寫時拷貝(copy-on-write)

(2)fork()—通過clone系統呼叫實現

8.程序終結(exit()函式,呼叫系統呼叫do_exit())

此時程序占用的所有記憶體:核心棧、thread_info和task_struct結構,為父程序提供資訊,父程序檢索到資訊後,可以將子程序所有剩餘記憶體資源釋放。

9.刪除程序描述符(release_task)

注:當乙個程序被跟蹤時,它的臨時父親設定為除錯程序,若父程序退出,系統會為它和它所有的兄弟節點重新找乙個父程序;以前核心中,遍歷熊素有程序來找子程序,現在解決方法是在乙個單獨的被ptrace跟蹤的子程序鍊錶中搜尋相關兄弟程序,減輕遍歷帶來的開銷;

Linux核心 程序管理

1 程序生命週期 某個程序通過系統呼叫fork,建立乙個用於執行程式的程序。生成此程序的程序稱為父程序,被生成的程序稱為子程序。子程序通過複製父程序的資料得以建立 父程序執行系統呼叫wait,等待子程序結束 子程序通過系統呼叫exec將程式讀取到記憶體並開始執行 當程式執行完畢後,子程序通過系統呼叫...

Linux核心之程序管理

linux核心之程序管理 支援執行緒的計算機系統裡面,程序作為資源分配的基本單位而存在,執行緒作為排程的基本單位而存在.執行緒僅擁有必不可少的一些資源,如 一組暫存器,堆疊資訊等等和其他執行緒共享同乙個程序的所有資源.所以,在同乙個程序的執行緒切換時不需要大量的儲存和恢復工作,同時由於共享同乙個儲存...

linux核心如何管理程序

程序 有諸多的定義,在許多的教材資料上,其定義是乙個程式的執行例項,這不無道理,也有的人認為它是程式處理所描述的所有資料結構的集合。這裡不深究其定義,如果換個角度而言,程序就好像我們人類,他們被產生,它們有自己的生命週期,儘管生命週期的長短不一,從幾毫秒至幾秒,甚至幾個月,幾年。與人類的真正區別就在...