程序是執行期間的程式及其它所包含的資源的總稱。
程序通過
fork()
系統呼叫產生,該系統呼叫通過複製乙個現有程序來建立乙個全新的程序。
fork()
呼叫一次返回兩次:一次回到父程序、一次回到新建立的子程序。
程序描述符及任務結構
核心把程序放在
task list
的雙向迴圈鍊錶中,其中每一項都是乙個
task_struct
結構(即程序描述符)。
task_struct
結構比較大(
32位機器上約
1.7k
),包含了核心管理程序所需的全部資訊。
linux
通過slab
分配器分配
task_struct
結構,以達到物件復用和快取著色的目的。
每個程序通過
pid來標識,預設最大值為
32768
,可以通過
/proc/sys/kernel/pid_max
修改。
thread_info
結構
struct
thread_info
;
該結構在核心棧的尾端分配。
如何查詢當前正在執行程序的程序描述符
為什麼要遮蔽掉低13位(當thread_size為8192時):
核心中的棧是從高位址到低位址,
thread_info
和核心棧
(核心態堆疊
)共享同一塊記憶體
, 而每個任務的
thread_info
在核心棧的尾端分配.
Linux程序管理1
程序是已啟動的可執行程式的執行中例項。proc目錄下以數字為名的目錄,每乙個目錄代表乙個程序,儲存著程序的屬性資訊。每乙個程序的pid是唯一的,就算程序退出了,其它程序也不會占用其pid。1.1程序的組成部分 已分配記憶體的位址空間 安全屬性,包括所有權憑據和特權 程式 的乙個或多個執行執行緒 程序...
1 程序管理
程序描述符獲取 通過thread union,使程序核心態堆疊和thread info緊密結合在一起。檔案include linux sched.h當中,有thread union的定義 union thread union 之所以將thread info結構稱之為小型的程序描述符,是因為在這個結構...
程序管理(1)
程序是處於執行期的程式,程序包括 段,資料段,還有pcb 程序控制塊 執行緒實在程序中活動的物件,核心排程的物件是執行緒,而不是程序 注意 linux核心通常把程序叫做任務核心把程序的列表存放在任務佇列中 雙向迴圈鍊錶 鍊錶中的每一項型別都是task struct 稱為程序描述符 程序描述符包含乙個...