色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区


Linux下的進程結構

分享到:
           

    進程不但包括程序的指令和數據,而且包括程序計數器和處理器的所有寄存器及存儲臨時數據的進程堆棧,因此正在執行的進程包括處理器當前的一切活動。

    因為Linux是一個多進程的操作系統,所以其他的進程必須等到系統將處理器使用權分配給自己之后才能運行。當正在運行的進程等待其他的系統資源時,Linux內核將取得處理器的控制權,并將處理器分配給其他正在等待的進程,它按照內核中的調度算法決定將處理器分配給哪一個進程。

    內核將所有進程存放在雙向循環鏈表(進程鏈表)中,其中鏈表的頭是init_task描述符。鏈表的每一項都是類型為task_struct,稱為進程描述符的結構,該結構包含了與一個進程相關的所有信息,定義在<include/linux/sched.h>文件中。task_struct內核結構比較大,它能完整地描述一個進程,如進程的狀態、進程的基本信息、進程標識符、內存相關信息、父進程相關信息、與進程相關的終端信息、當前工作目錄、打開的文件信息、所接收的信號信息等。

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

    1)進程狀態

    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()函數)等系統調用來“收尸”,即等待父進程銷毀它。處在該狀態下的進程“尸體”已經放棄了幾乎所有的內存空間,沒有任何可執行代碼,也不能被調度,僅僅在進程列表中保留一個位置,記載該進程的退出狀態等信息供其他進程收集。
    ● 僵尸撤銷狀態(EXIT_DEAD):這是終狀態,父進程調用wait函數族“收尸”后,進程徹底由系統刪除。

    它們之間的轉換關系如圖3.2所示。


圖3.2 進程狀態轉換關系圖

    內核可以使用set_task_state和set_current_state宏來改變指定進程的狀態和當前執行進程的狀態。

    2)進程標識符

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

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

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

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

   熱點鏈接:

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

更多新聞>> 

色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区
主站蜘蛛池模板: 国产精品一区久久| 国产欧美日韩精品在线观看| 久久av红桃一区二区小说| 中国china体内裑精亚洲片| 亚洲美女视频网| 中文字幕视频在线免费欧美日韩综合在线看| 日韩黄色高清视频| 一区二区三区视频免费| 久久夜色精品国产| 久久久久国产精品免费| 91av在线影院| 国产主播在线一区| 亚洲男人天堂2024| 久久久999国产精品| 性欧美xxxx视频在线观看| 国产高清在线不卡| 亚洲永久在线观看| 最新国产精品亚洲| 97精品免费视频| 国产日韩在线一区| 中文亚洲视频在线| 欧美国产日韩一区| 国产精品自产拍在线观看中文| 日韩av中文字幕在线| 久久香蕉国产线看观看av| 欧美黑人xxx| 国产日韩在线播放| 国产亚洲欧美日韩精品| 欧美午夜宅男影院在线观看| 亚洲缚视频在线观看| 国产在线观看91精品一区| 亚洲欧洲在线播放| 欧美日韩国产一区二区| 欧美有码在线视频| 亚洲欧美变态国产另类| 狠狠综合久久av一区二区小说 | 欧美国产在线电影| 亚洲成人激情图| 欧美电影在线播放| 91欧美激情另类亚洲| 久久国产视频网站|