1. 程式人生 > >程序及程序控制塊

程序及程序控制塊

程序是程式的一個執行例項,是一個正在執行的程式。能分配處理器並由處理器執行的實體。

         在一個系統上可以同時執行多個程式。併發執行,一個程序的指令和另一個程序的指令是交錯執行的。

         程序的兩個基本元素是程式程式碼(可能被執行相同程式的其他程序共享)和程式碼相關聯的資料集。程序是一種動態描述,但並不代表所有的程序都在執行(程序在記憶體中因策略或排程需求,會處於各種狀態)。

        從核心看程序擔當分配系統資源(CPU時間,記憶體)的實體。廣義上,所有的程序資訊被放在一個叫做程序控制塊的資料結構中,可以理解為程序屬性的集合。

 程序控制塊

 每個程序在核心中都有一個程序控制塊(PCB)來維護程序相關的資訊,Linux核心的程序控制塊是task_struct的結構體。

task_struct是Linux核心的一種資料結構,它會被裝載到RAM裡幷包含程序的資訊。每個程序都把它的資訊放在task_struct這個資料結構裡面,而task_struct包含以下內容: 
標示符:描述本程序的唯一標示符,用來區別其他程序。 
狀態:任務狀態,退出程式碼,退出訊號等。 
優先順序:相對於其他程序的優先順序。 
程式計數器:程式中即將被執行的下一條指令的地址。 
記憶體指標:包括程式程式碼和程序相關資料的指標,還有和其他程序共享的記憶體塊的指標。 
上下文資料:程序執行時處理器的暫存器中的資料。 
I/O狀態資訊:包括顯示的I/O請求,分配給程序的I/O裝置和正在被程序使用的檔案列表。 
記賬資訊:

可能包括處理器時間總和,使用的時鐘總數,時間限制,記賬號等。

儲存程序資訊的資料結構叫做task_struct,並且可以在include/linux/sched.h裡找到它。所有執行在系統裡的程序都以task_struct連結串列的形式存在核心裡。程序的資訊可以通過/proc系統資料夾檢視。要獲取PID為400的程序資訊,你需要檢視/proc/400這個資料夾。大多數程序資訊同樣可以使用top和ps這些使用者級工具來獲取。

             linux 中ps命令是Process Status的縮寫。ps命令可以列出系統中當前執行的程序,所列出的程序是執行ps命令這個時刻正在執行的程序。


附上task_struct所定義在的標頭檔案

sched.h的連結吧: