久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久


Linux下的進程結構

分享到:
           

    進(jin)程不但包括程序的(de)(de)指令和(he)數據,而且包括程序計數器(qi)(qi)和(he)處(chu)理器(qi)(qi)的(de)(de)所有寄(ji)存器(qi)(qi)及存儲臨時數據的(de)(de)進(jin)程堆棧,因此正在執行的(de)(de)進(jin)程包括處(chu)理器(qi)(qi)當前(qian)的(de)(de)一切(qie)活(huo)動。

    因為Linux是一(yi)個(ge)多(duo)進(jin)程的操(cao)作系統,所以其他(ta)的進(jin)程必須等到系統將處(chu)理器(qi)(qi)使用權(quan)分(fen)配(pei)(pei)給(gei)自己(ji)之后才能運(yun)行(xing)。當正(zheng)在運(yun)行(xing)的進(jin)程等待(dai)其他(ta)的系統資源(yuan)時,Linux內核(he)將取得處(chu)理器(qi)(qi)的控制(zhi)權(quan),并將處(chu)理器(qi)(qi)分(fen)配(pei)(pei)給(gei)其他(ta)正(zheng)在等待(dai)的進(jin)程,它按照內核(he)中的調度算(suan)法(fa)決定將處(chu)理器(qi)(qi)分(fen)配(pei)(pei)給(gei)哪一(yi)個(ge)進(jin)程。

    內核將(jiang)所(suo)有進(jin)(jin)(jin)程(cheng)存(cun)放(fang)在雙(shuang)向循環鏈表(biao)(進(jin)(jin)(jin)程(cheng)鏈表(biao))中(zhong)(zhong),其中(zhong)(zhong)鏈表(biao)的(de)(de)(de)(de)頭是init_task描(miao)述(shu)符。鏈表(biao)的(de)(de)(de)(de)每一項都是類型為task_struct,稱為進(jin)(jin)(jin)程(cheng)描(miao)述(shu)符的(de)(de)(de)(de)結構,該(gai)結構包含(han)了與一個(ge)進(jin)(jin)(jin)程(cheng)相(xiang)關(guan)的(de)(de)(de)(de)所(suo)有信(xin)(xin)息(xi)(xi),定義(yi)在<include/linux/sched.h>文(wen)件(jian)中(zhong)(zhong)。task_struct內核結構比(bi)較大,它(ta)能完(wan)整地描(miao)述(shu)一個(ge)進(jin)(jin)(jin)程(cheng),如進(jin)(jin)(jin)程(cheng)的(de)(de)(de)(de)狀態(tai)、進(jin)(jin)(jin)程(cheng)的(de)(de)(de)(de)基本信(xin)(xin)息(xi)(xi)、進(jin)(jin)(jin)程(cheng)標(biao)識符、內存(cun)相(xiang)關(guan)信(xin)(xin)息(xi)(xi)、父進(jin)(jin)(jin)程(cheng)相(xiang)關(guan)信(xin)(xin)息(xi)(xi)、與進(jin)(jin)(jin)程(cheng)相(xiang)關(guan)的(de)(de)(de)(de)終端信(xin)(xin)息(xi)(xi)、當前(qian)工作目(mu)錄、打開(kai)的(de)(de)(de)(de)文(wen)件(jian)信(xin)(xin)息(xi)(xi)、所(suo)接收的(de)(de)(de)(de)信(xin)(xin)號(hao)信(xin)(xin)息(xi)(xi)等。

&nbsp;   下面詳細講解task_struct結構中為重要的兩個(ge)域:state(進程狀態)和pid(進程標識符)。

    1)進(jin)程狀態

    Linux中的進程有以下幾種狀態。
    ● 運行狀態(TASK_RUNNING):進程當前正在運行,或者正在運行隊列中等待調度。
    ● 可中斷的阻塞狀態(TASK_INTERUPTIBLE):進程處于阻塞(睡眠)狀態,正在等待某些事件發生或能夠占用某些資源。處在這種狀態下的進程可以被信號中斷。接收到信號或被顯式的喚醒呼叫(如調用wake_up系列宏:wake_up、wake_up_interruptible等)喚醒之后,進程將轉變為TASK_RUNNING 狀態。
    ● 不可中斷的阻塞狀態(TASK_UNINTERUPTIBLE):此進程狀態類似于可中斷的阻塞狀態(TASK_INTERRUPTIBLE),只是它不會處理信號,把信號傳遞到這種狀態下的進程不能改變它的狀態。在一些特定的情況下(進程必須等待,直到某些不能被中斷的事件發生),這種狀態是很有用的。只有在它所等待的事件發生時,進程才被顯式的喚醒呼叫喚醒。
    ● 可終止的阻塞狀態(TASK_KILLABLE):Linux內核 2.6.25 引入了一種新的進程狀態,名為 TASK_KILLABLE。該狀態的運行機制類似于 TASK_UNINTERRUPTIBLE,只不過處在該狀態下的進程可以響應致命信號。它可以替代有效但可能無法終止的不可中斷的阻塞狀態(TASK_UNINTERRUPTIBLE),以及易于喚醒但安全性欠佳的可中斷的阻塞狀態(TASK_INTERRUPTIBLE)。
    ● 暫停狀態(TASK_STOPPED):進程的執行被暫停,當進程收到SIGSTOP、SIGTSTP、SIGTTIN、SIGTTOU等信號時,就會進入暫停狀態。
    ● 跟蹤狀態(TASK_TRACED):進程的執行被調試器暫停。當一個進程被另一個進程監控時(如調試器使用ptrace()系統調用監控測試程序),任何信號都可以把這個進程置于跟蹤狀態。
    ● 僵尸狀態(EXIT_ZOMBIE):進程運行結束,父進程尚未使用wait函數族(如使用waitpid()函數)等系統調用來“收尸”,即等待父進程銷毀它。處在該狀態下的進程“尸體”已經放棄了幾乎所有的內存空間,沒有任何可執行代碼,也不能被調度,僅僅在進程列表中保留一個位置,記載該進程的退出狀態等信息供其他進程收集。
    &nbsp;● 僵尸(shi)(shi)撤銷狀(zhuang)態(EXIT_DEAD):這是終狀(zhuang)態,父進程調用(yong)wait函數(shu)族“收尸(shi)(shi)”后,進程徹底由(you)系(xi)統刪除(chu)。

   &nbsp;它(ta)們之間的轉換(huan)關(guan)系(xi)如(ru)圖3.2所示。


圖(tu)3.2 進程狀態轉換關系圖(tu)

  ;  內核(he)可(ke)以使用set_task_state和set_current_state宏(hong)來改變指定進程的狀態(tai)和當前執(zhi)行進程的狀態(tai)。

    2)進程標識符

    Linux內核(he)通(tong)過唯一(yi)的(de)(de)(de)(de)進(jin)程(cheng)標識符PID來標識每(mei)個進(jin)程(cheng)。PID存放在進(jin)程(cheng)描述(shu)符的(de)(de)(de)(de)pid字段中,新(xin)創(chuang)建(jian)的(de)(de)(de)(de)PID通(tong)常(chang)是前(qian)一(yi)個進(jin)程(cheng)的(de)(de)(de)(de)PID加1,不過PID的(de)(de)(de)(de)值有(you)上(shang)限(大值 = PID_MAX_DEFAULT – 1,通(tong)常(chang)為32767),讀者可(ke)以查看/proc/sys/kernel/pid_max來確定該系統的(de)(de)(de)(de)進(jin)程(cheng)數(shu)上(shang)限。

    當系(xi)統啟動后,內核通常作為某一個進(jin)程(cheng)的(de)(de)代(dai)表。一個指向task_struct的(de)(de)宏(hong)current用來(lai)記錄正(zheng)在運行的(de)(de)進(jin)程(cheng)。current經常作為進(jin)程(cheng)描述(shu)符結構指針的(de)(de)形式出現在內核代(dai)碼中,例如,current->pid表示(shi)處理(li)器(qi)正(zheng)在執行的(de)(de)進(jin)程(cheng)的(de)(de)PID。當系(xi)統需要查看所(suo)有的(de)(de)進(jin)程(cheng)時,則調(diao)用for_each_process()宏(hong),這將(jiang)比系(xi)統搜(sou)索(suo)數組的(de)(de)速(su)度要快得多。

    在Linux中獲得當前進程(cheng)(cheng)的進程(cheng)(cheng)號(PID)和(he)父(fu)進程(cheng)(cheng)號(PPID)的系統(tong)調用函數(shu)分別為getpid()和(he)getppid()。

    本文選自華清遠見嵌入式培訓教材《從實踐中學嵌入式Linux應用程序開發》

   熱點鏈接:

   1、Linux下多任務系統之進程的基本概念
   2、Linux下多任務系統之任務介紹
   3、實驗:Linux下多路復用式串口操作
   4、實驗:linux文件讀/寫及上鎖
   5、標準I/O操作函數詳解

更多新聞>>