本章介紹linux系統程序概念以及執行緒,討論在linux核心中是如何對程序進行管理的以及程序結束流程。
關於程序的概念在作業系統概念--作業系統中的程序、執行緒中已經描述過,這裡不在贅述,在應用層一般理解是乙個應用例項是乙個程序,乙個程序又可以包含多個執行緒,但是在傳統的unix系統中每個程序都是由乙個執行緒組成的,而linux系統核心中也有單獨的對執行緒的實現機制:即不區分執行緒和程序。
程序建立銷毀概述
linux中乙個程序生命週期的開始要從fork()這個大名鼎鼎的系統呼叫開始,fork()呼叫返回兩次:一次是父程序pid,然後是子程序pid,fork完成後子程序和父程序還是一樣的,直到呼叫exec()家族函式為子程序建立自己的位址空間以及載入相關**到記憶體,fork函式實際上是呼叫的clone系統呼叫來實現程序拷貝的,
程序的結束是通過呼叫exit系統呼叫來實現的,此函式會結束當前程序並且釋放當前程序所占用的相關資源,父程序可以通過wait4()系統呼叫來收集子程序的退出資訊,當程序結束的時候會被置為zombie狀態,如果父程序呼叫wait或者waitpid,標記為zombie狀態的程序就會結束。
程序描述符
核心會把程序儲存在乙個叫做task list的迴圈雙鏈表結構中,雙鏈表中的每個元素都使用task_struct結構體描述該結構體被定義在標頭檔案中:
struct task_struct ;
分配程序描述符
task_struct結構體通過slab記憶體分配器來分配空間,linux kernel 2.6系列中task_struct被儲存在每個程序的核心棧的尾部,這樣可以避免使用額外的暫存器去儲存結構體的位置,這就為暫存器緊張的架構如x86帶來了好處,通過計算棧指標就可以找到task_struct的儲存位置了,在linux系統中,雖然task_struct是用來描述乙個程序,但是task_struct描述的是程序的通用部分,不同cpu架構之間的差異化描述則由thread_info結構體來描述,該結構體儲存在核心棧的尾部,它包含乙個task元素指向和他對應的乙個task_struct,所以實際上乙個程序是由thread_info和task_struct兩個結構體共同來描述的,定義在thread_info.h標頭檔案中
:
struct thread_info ;
程序狀態 Linux系統程序管理
1.ps ps 是 linux 中最基礎的瀏覽系統中的程序的命令。能列出系統中執行的程序,包括程序號 命令 cpu使用量 記憶體使用量等。2.pstree linux中,每乙個程序都是由其父程序建立的。此命令以視覺化方式顯示程序,通過顯示程序的樹狀圖來展示程序間關係。3.top top 是乙個更加有...
Linux Linux系統(程序管理)
程序 當我們執行程式時,linux會為程式建立乙個特殊的環境,包含程式執行的所有資源,這個環境就稱為程序 前台程序 一般我們使用一些命令,都屬於前台程序,直接輸出結果到顯示器 後台程序 在命令的末尾加上 可以建立最簡單的後台程序 常駐程序 系統級程序,以root許可權執行在後台,可以處理其他程序請求...
作業系統 程序管理
程序 申請資源和排程資源的基本單位,乙個程序就是乙個程式的乙個執行過程。是乙個動態的概念,在不同的作業系統中,會有不同的程序出現。程式 靜態概念,是指令和資料的集合,可長期儲存。程序與程式對應關係 乙個程式可以對應乙個程序或者多個程序 乙個程序可以對應乙個程式,或者一段程式 程序由程式,資料集合,程...