程序表示
state : 執行程序的狀態
task_running : 表示程序可以執行
task_interruptiable : 程序因為等待某種事件或者資源而睡眠,可以通過訊號喚醒
task_uninterruptible : 程序因為等待某種事件或者資源而睡眠,不能由訊號喚醒
task_stopped : 程序停止執行,比如由偵錯程式暫停
task_traced : 用於從停止的程序中,將被除錯的程序與常規的程序分開
exit_zombie : 程序已經停止執行,但是資源未完全釋放
exit_dead : 父程序發出wait系統呼叫,但是程序資源完全從系統移除之前的狀態,只有多個執行緒同時對同乙個程序發wait呼叫時,該狀態才有意義
資源限制
struct rlimit
rlim_curr : 程序的當前資源限制,可有setrlimit系統呼叫來修改,也稱之為軟限制
rlim_max : 程序限制的最大容許值,也稱之為硬限制
程序型別命名空間程序id號unix程序總是會分配乙個號碼用於在其命名空間中唯一地標識它們,該號碼稱為程序id號,簡稱pid。使用fork或者clone產生的每個程序都由核心自動分配了乙個新的唯一的pid.
管理pid 函式
給定task_struct, id型別和命名空間,獲取命名空間區域性的數字id
static inline struct pid *task_pid(struct task_struct *task)
static inline struct pid *task_pgrp(struct task_struct *task)
pid_t pid_nr_ns(struct pid *pid, struct pid_namespace *ns)
return nr;
}
給出區域性數字id和對應的命名空間,查詢task_struct例項
根據程序的區域性數字id和關聯的命名空間的指標進行雜湊,得到在pid_hash陣列的索引,然後遍歷雜湊表直至找到所要的元素,如下:
struct pid * fastcall find_pid_ns(int nr, struct pid_namespace *ns)
pid_task取出pid->tasks[type]雜湊表中的第乙個task_struct例項struct task_struct *find_task_by_pid_type_ns(int type, int nr,
struct pid_namespace *ns)
struct task_struct * fastcall pid_task(struct pid *pid, enum pid_type type)
return result;
}
生成唯一的pid
程序關係
深入Linux核心架構筆記 程序管理與排程
概述 程序相關的基本概念 硬體實時程序有嚴格的時間限制,必須在可保證的時間範圍內得到處理,否則會有很嚴重的後果,請注意,這並不意味著所要求的時間範圍特別短,linux主流版本不支援硬實時處理 軟實時程序是硬實時程序的一種弱化形式,儘管仍然需要快速得到結果,但是稍微晚一點關係也不是很大,比如對cd機的...
《深入Linux核心架構》讀書筆記
1.關於udev page.318 每當核心檢測到裝置時,都會建立乙個核心物件,並向使用者空間傳送乙個熱插拔訊息,該訊息包含了驅動程式為裝置分配的主從裝置號。udevd守護程序監聽該訊息,並根據訊息在 dev中建立對應的項,接下來就可以從使用者層訪問該裝置了。由於引入了udev機制,dev不再放置到...
深入Linux核心架構筆記 動態時鐘
為節省系統功耗,只在有些任務需要實際執行時,才啟用週期時鐘,否則會臨時禁用週期時鐘,對該技術的支援可以在編譯時選擇,啟用此選項的系統也稱無時鐘系統。判斷原則 當系統排程選擇idle程序來執行時,動態時鐘系統會禁用週期時鐘,直到下乙個定時器即將到期為止 struct tich sched idle t...