程序 輕量程序 執行緒

2021-06-10 10:04:17 字數 1576 閱讀 5599

程序是正在執行程式的乙個例項。可以認為是資料結構的集合,這個集合詳細描述了程式的執**況。

程序建立時繼承了父程序的位址空間且與父程序執行同樣的**,但它們有各自的資料,子程序對資料的改變對父程序是不可見的。

為更好的支援多執行緒應用,linux使用輕量程序。兩個輕量程序共享某些資源,如位址空間,開啟的檔案等。當其中乙個修改共享資源時,另乙個可以立即看到變化,不過在訪問共享資源時程序間需同步。實施多執行緒應用的乙個簡單方法就是將乙個輕量程序與每個執行緒相關聯。通過共享相同的儲存位址空間,相同的開啟檔案等,執行緒可以訪問相同的應用資料堆疊集。同時,每個執行緒可以由核心單獨排程,乙個處於休眠而另乙個處於執行態。

程序的各項引數儲存在程序描述符。程序描述符由很多域組成。程序狀態域由系列標誌組成,它們是互相排斥的:乙個被置位時,其餘的被清除。以下是可能的程序狀態:

task_running -- 程序正由cpu執行或等待執行。

task_interruptible -- 程序被掛起直到某些條件為真。硬中斷、程序等待的系統資源被釋放或傳遞乙個訊號是喚醒程序的條件。

task_uninterruptible -- 類似於task_interruptible,除非向休眠程序傳遞乙個訊號,否則狀態不變。

task_stopped -- 程序接收sigstop,sigtstp,sigttin或sigttou訊號後終止執行。

task_traced -- 偵錯程式終止程序執行。當程序受另乙個程序監控時,每個訊號可能將程序置於此狀態。

exit_zombie -- 程序已被終止,但父程序還未呼叫wait4( )或waitpid( )來返回僵死程序的資訊。在呼叫類似wait( )之前,核心不能丟棄僵死程序描述符中的資料,因為父程序仍可能需要它。

exit_dead -- 最終狀態。父程序已呼叫wait4( )或waitpid( ),程序被系統終結。從exit_zombie狀態到exit_dead狀態,避免由於其他執行緒對同乙個程序呼叫類似wait( )而產生競爭情況。

使用者通過pid對程序進行識別,pid儲存於程序描述符的pid域。pid是順序增加的,緊接著前乙個程序號。pid有上限,當核心到達這個上限時會從較低未用pid編號從新開始。

程序列表將所有已存在的程序描述符串在一起。每個task_struct結構有tasks域,這個域是list_head型別,list_head中的prev和next域指向前乙個和後乙個task_struct元素。程序列表的頭是init_task task_struct描述符,也就是被稱為0號程序的程序描述符。init_task的tasks->prev指向這個列表的最後乙個程序描述符的tasks域。

早期的linux版本將所有可執行程序放在同乙個被稱為runqueue的列表中,這迫使排程器遍歷整個列表來選擇乙個最佳的可執行程序,這樣開銷會很大。2.6版本之後將runqueue**為多個列表,每個列表都對應了乙個程序優先順序。每個task_struct描述符包括乙個run_list域,這個域的型別為list_head。如果程序優先順序為k(0-139),run_list就將程序描述符鏈結到程序優先權為k的可執行程序列表。所有的runqueue列表由單個prio_array_t資料結構進行管理。

程序有父/子關係,當乙個程序建立了多個子程序後,這些子程序之間也有兄妹關係。程序描述符的某些域用來表示這些關係。

執行緒 程序同步 互斥量

互斥量 mutex 是一種核心物件,它能夠確保執行緒擁有對單個資源的互斥訪問權。互斥量包含乙個使用數量,乙個執行緒 id 和乙個遞迴計數器。id用於標識系統中的哪個執行緒當前擁有互斥物件,遞迴計數器用於指明該執行緒擁有互斥物件的次數。互斥量的行為特性與臨界段相同,但是互斥量屬於核心物件,而臨界段屬於...

程序 執行緒 訊號量與死鎖

程序控制塊 pcb pcb是程序的控制結構,包含了程序的描述資訊 控制資訊和資源資訊以及現場保護區,是程序的唯一標識。pcb表組織方式 鍊錶 索引表引入執行緒後,程序作為資源分配單位,而執行緒作為cpu排程單位 執行緒只擁有必不可少的資源,如 執行緒狀態 暫存器上下文和堆疊。同一程序中的各執行緒可共...

執行緒程序 五 程序池

process target args start join p pool num 建立乙個包含有num個空閒程序的池子 建立大規模任務,pool 100 from mutliprocessing import pool process target,args lock p.close p.join...