天天看點

【Linux】Linux程序管理之task_struct結構體

一、描述程序—-PCB

程序:

  • 一個正在執行中的程式;
  • 一個正在計算機上執行的程式執行個體;
  • 能配置設定給處理器并由處理器執行的實體;
  • 一個具有以下特征的活動單元:一組指令序列的執行,一個目前狀态和相關的系統資源集合;

程序内容:

  • 辨別符:跟這個程序相關的唯一辨別符,用來差別其他程序。
  • 狀态:如果程序正在執行,那麼程序處于執行态。
  • 優先級:相對于其他程序的優先級。
  • 程式計數器:程式中即将被執行的下一條指令的位址。
  • 記憶體指針:包括程式代碼和程序相關資料的指針,還有和其他程序共享記憶體塊的指針。
  • 上下文資料:程序執行時處理器的寄存器中的資料。
  • I/O狀态資訊包括顯式的I/O請求,配置設定給程序的I/O裝置(例如錄音帶驅動器)和被程序使用的檔案清單等。
  • 審計資訊:可包括處理器時間總和,使用的時鐘數總和,時間限制,審計号等。

程序狀态:

對于一個被執行的程式,作業系統會為該程式建立一個程序或任務。 從處理器的角度看,它在指令序列中按照某種順序執行指令,該順序根據程式計數器中不斷變化的值來訓示,程式計數器可能指向不同程序中不同部分的程式代碼,從程式自身角度看,它的執行設計程式中的一系列指令。

可以通過列出為該程序而執行的指令序列來描述單個程序的行為,這樣的序列稱為軌迹。可以通過給出各個程序的軌迹是如何被交替的來描述處理器的行為。

描述程序:

  • 程序資訊被放在一個叫做程序控制塊的資料結構中,可以了解為程序屬性的集合。
  • 課本上稱之為PCB(process control block),Linux作業系統下的PCB是:task_struct。

task_struck PCB的一種:

  • 在Linux中描述程序的結構體叫做task_struct。
  • task_struck是Linux核心的一種資料結構,它會被裝載到RAM(記憶體)裡并包含着程序的資訊。

二、task_struck内容分類

  • 狀态:程序的執行狀态(執行态,就緒态,挂起态,停止态,僵死态)。
  • **排程資訊:**Linux排程程序所需要的資訊。一個程序可能是普通的或實時的,并且具有優先級。實時程序在普通程序前被排程,并且在每一類中使用相關的優先級。計數器記錄允許程序執行的時間量。
  • 辨別号:每個程序有一個唯一的程序辨別号,還有使用者辨別号群組辨別号。組辨別号用于給一組使用者指定資源通路特權。
  • **程序間通信:**Linux支援UNIX SVR4中的IPC機制。
  • 連結:每個程序都有一個到它的父程序的連結以及到它的兄弟程序(與它有相同父程序)的連結和到所有子程序的連結。
  • 時間和計時器:包括程序建立時間和程序所消耗的處理器時間總量。一個程序可能還有一個或多個間隔計時器,它通過一個系統調用定義一個間隔計時器,其結果是當計時器期滿時,給程序發送一個信号。計時器可以單獨使用或周期使用。
  • 檔案系統:包括指向被該程序打開的任何檔案的指針和指向該程序目前目錄和根目錄的指針。
  • 虛存:定義配置設定給該程序的虛存空間。
  • 處理器專用上下文:構成該程序上下文的寄存器和棧資訊。
  • 運作:這個狀态對應于兩個狀态。一個運作程序或者正在執行或準備執行。
  • 可中斷:這是一個阻塞狀态,此時程序正在等待一個事件(如一個I/O操作)的結束,一個可用的資源或另一個程序的信号。
  • 不可中斷:這是另一種阻塞狀态。它與可中斷狀态的差別是,在不可中斷狀态下,程序正在直接等待一個硬體條件,是以不會接受任何信号。
  • 停止:程序被終止,并且隻能由來自另一個程序的被動動作恢複。例如,一個正在被調試的程序可以被置于停止狀态。
  • 僵死:程序已被終止,但由于某些原因,在程序表中仍然有它的任務結構。

繼續閱讀