進程概念:
OS :程序的⼀一個執⾏行實例。
正在執⾏行的程序。
能分配處理器並由處理器執⾏行的實體。 內核觀點:擔當分配系統資源(CPU時間,內存)的實體。 進程的兩個基本元素是程序代碼(可能被執⾏行相同程序的其他進程共享)和代碼相關聯的 數據集。進程是⼀一種動態描述,但是並不代表所有的進程都在運⾏行。(進程在內存中因策 略或調度需求,會處於各種狀態)
進程描述
廣義上,所有的進程信息被放在⼀一個叫做進程控制塊的數據結構中,可以理解爲進程屬性 的集合。
進程控制塊
每個進程在內核中都有⼀一個進程控制塊(PCB)來維護進程相關的信息,Linux內核的
進程控制塊是task_struct結構體。現在我們全⾯面瞭解⼀一下其中都有哪些信息。
在Linux中,這個結構叫做task_struct。
task_struct是Linux內核的⼀一種數據結構,它會被裝載到RAM⾥裏並且包含着進程的信息。 每個進程都把它的信息放在task_struct 這個數據結構⾥裏,task_struct 包含了這些內容:
標⽰示符 : 描述本進程的唯⼀一標⽰示符,⽤用來區別其他進程。
狀態 :任務狀態,退出代碼,退出信號等。
優先級 :相對於其他進程的優先級。
程序計數器:程序中即將被執⾏行的下⼀一條指令的地址。
內存指針:包括程序代碼和進程相關數據的指針,還有和其他進程共享的內存塊的指針
上下⽂文數據:進程執⾏行時處理器的寄存器中的數據。
I/O狀態信息:包括顯⽰示的I/O請求,分配給進程的I/O設備和被進程使⽤用的⽂文件列表。
記賬信息:可能包括處理器時間總和,使⽤用的時鐘數總和,時間限制,記賬號等。
(ps:關於task_struct談到進程管理時再詳說)
保存進程信息的數據結構叫做 task_struct,並且可以在 include/linux/sched.h ⾥裏找到它。
所有運⾏行在系統⾥裏的進程都以 task_struct 鏈表的形式存在內核⾥裏。
進程的信息可以通過 /proc 系統⽂文件夾查看。要獲取PID爲400的進程信息,你需要查看 / proc/400 這個⽂文件夾。⼤大i多數進程信息同樣可以使⽤用top和ps這些⽤用戶級⼯工具來獲取。