task_struct結構描述

來源:互聯網
上載者:User

 1. 進程狀態(State)

進程執行時,它會根據具體情況改變狀態 。進程狀態是調度和對換的依據。Linux中的進程主要有如下狀態,如表4.1所示。

 

核心表示

含義

TASK_RUNNING

可運行

TASK_INTERRUPTIBLE

可中斷的等待狀態

TASK_UNINTERRUPTIBLE

不可中斷的等待狀態

TASK_ZOMBIE

僵死

TASK_STOPPED

暫停

TASK_SWAPPING

換入/換出

表4.1          Linux進程的狀態

 

 

·可運行狀態

處於這種狀態的進程,要麼正在運行、要麼正準備運行。正在啟動並執行進程就是當前進程(由current所指向的進程),而準備啟動並執行進程只要得到CPU就可以立即投入運行,CPU是這些進程唯一等待的系統資源。系統中有一個運行隊列(run_queue),用來容納所有處於可運行狀態的進程,發送器執行時,從中選擇一個進程投入運行。在後面我們討論進程調度的時候,可以看到運行隊列的作用。當前運行進程一直處於該隊列中,也就是說,current總是指向運行隊列中的某個元素,只是具體指向誰由發送器決定。

·等待狀態

處於該狀態的進程正在等待某個事件(event)或某個資源,它肯定位於系統中的某個等待隊列(wait_queue)中。Linux中處於等待狀態的進程分為兩種:可中斷的等待狀態和不可中斷的等待狀態。處於可中斷等待態的進程可以被訊號喚醒,如果收到訊號,該進程就從等待狀態進入可運行狀態,並且加入到運行隊列中,等待被調度;而處於不可中斷等待態的進程是因為硬體環境不能滿足而等待,例如等待特定的系統資源,它任何情況下都不能被打斷,只能用特定的方式來喚醒它,例如喚醒函數wake_up()等。

·暫停狀態

此時的進程暫時停止運行來接受某種特殊處理。通常當進程接收到SIGSTOP、SIGTSTP、SIGTTIN或 SIGTTOU訊號後就處於這種狀態。例如,正接受調試的進程就處於這種狀態。

·僵死狀態

進程雖然已經終止,但由於某種原因,父進程還沒有執行wait()系統調用,終止進程的資訊也還沒有回收。顧名思義,處於該狀態的進程就是死進程,這種進程實際上是系統中的垃圾,必須進行相應處理以釋放其佔用的資源。

2. 進程調度資訊

發送器利用這部分資訊決定系統中哪個進程最應該運行,並結合進程的狀態資訊保證系統運轉的公平和高效。這一部分資訊通常包括進程的類別(普通進程還是即時進程)、進程的優先順序等等。如表4.2所示:

 

網域名稱

含義

need_resched

調度標誌

Nice

靜態優先順序

Counter

動態優先順序

Policy

調度策略

rt_priority

即時優先順序

表4.2               進程調度資訊

                                                     

在下一章的進程調度中我們會看到,當need_resched被設定時,在“下一次的調度機會”就調用發送器schedule()。 counter代表進程剩餘的時間片,是進程調度的主要依據,也可以說是進程的動態優先順序,因為這個值在不斷地減少;nice是進程的靜態優先順序,同時也代表進程的時間片,用於對counter賦值,可以用nice()系統調用改變這個值;policy是適用於該進程的調度策略,即時進程和普通進程的調度策略是不同的;rt_priority只對即時進程有意義,它是即時進程調度的依據。

進程的調度策略有三種,如表4.3所示。

名稱

解釋

適用範圍

SCHED_OTHER

其他調度

普通進程

SCHED_FIFO

先來先服務調度

即時進程

SCHED_RR

時間片輪轉調度

表4.3          進程調度的策略

只有root使用者能通過sched_setscheduler()系統調用來改變調度策略。

 

3 .標識符(Identifiers)

每個進程有進程標識符、使用者識別碼、群組識別碼,如表4.4所示。

不管對核心還是普通使用者來說,怎麼用一種簡單的方式識別不同的進程呢。這就引入了進程標識符(PID:process identifier),每個進程都有一個唯一的標識符,核心通過這個標識符來識別不同的進程,同時,進程標識符PID也是核心提供給使用者程式的介面,使用者程式通過PID對進程發號施令。PID是32位的不帶正負號的整數,它被順序編號:新建立進程的PID通常是前一個進程的PID加1。然而,為了與16位硬體平台的傳統Linux系統保持相容,在Linux上允許的最大PID號是32767,當核心在系統中建立第32768個進程時,就必須重新開始使用已閑置的PID號。

 

網域名稱

含義

Pid

進程標識符

Uid、gid

使用者識別碼、群組識別碼

Euid、egid

有效使用者識別碼、有效群組識別碼

Suid、sgid

備份使用者識別碼、備份群組識別碼

Fsuid、fsgid

檔案系統使用者識別碼、檔案系統群組識別碼

表4.4                  各種標識符 

 

另外,每個進程都屬於某個使用者組。task_struct結構中定義有使用者識別碼和群組識別碼。它們同樣是簡單的數字,這兩種標識符用於系統的安全控制。系統通過這兩種標識符控制進程對系統中檔案和裝置的訪問,其它幾個標識符將在檔案系統中討論。

4. 進程通訊有關資訊(IPC:Inter_Process Communication)

為了使進程能在同一項任務上協調工作,進程之間必須能進行通訊即交流資料。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.