色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看


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操作函數詳解

更多新聞>> 

主站蜘蛛池模板: 色情无码WWW视频无码区 | 国产AV剧情MD精品麻豆 | 亚洲老熟女@TubeumTV | 97久人人做人人妻人人玩精品 | 蜜桃精品视频在线 | 日本亚洲中文字幕不卡 | 欧美午夜精品久久久久免费视 | 久久亚洲精品情侣 | 欧美性猛交xxxx黑人 | AV无码中文字幕不卡一区二区三区 | 无码人妻久久一区二区三区免费丨 | 海角国精产品一区一区三区糖心 | 狼人视频国产在线视频WWW色 | 噼里啪啦国语在线播放中文版 | 亚洲不卡高清 | 青青热久免费精品视频在线播放 | 亚洲AV无码欧洲AV无码网站 | japanese69极品少妇 | 激情小说亚洲色图 | 久久天天躁夜夜躁狠狠躁2022 | 中国老少配videos | 又色又爽又黄又免费的照片 | 小少呦萝粉国产 | 好爽进去了视频在线观看国版 | 11孩岁女被A片黑人黑与白 | 亚洲gv白嫩小受在线观看 | 久久人妻少妇偷人精品综合桃色 | 老女人一级黄色片 | 亚洲欧洲成人A∨在线观看 亚洲AV一本岛在线播放 | 国产精品久久久久久久va果冻 | AA区一区二区三无码精片 | 国产黑色丝袜在线看片 | 欧洲美女黑人粗性暴交 | 女人zozozo禽交高潮喷水 | 宝贝腿开大一点你真湿h在线视频 | 日本在线视频www | 亚洲 激情 小说 另类 欧美 | 毛片网站在线观看 | 男人的天堂AV网址 | 在教室伦流澡到高潮H免费视频 | 日本三级在线播放线观看免 |