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

更多新聞>> 

主站蜘蛛池模板: 成人免费a级毛片韩国 | 色综合色狠狠天天综合网 | 国产精品爽爽久久久久久 | 日本A级C片免费看三区 | 最新无码人妻在线视频 | 亚洲成A人V欧美综合天堂麻豆 | 人妻无码一区二区三区TV | 国产精品日本无码久久一老A | 大地资源网第二页免费观看 | 欧美国产成人激情视频在线观看 | 国产初高中生真实在线视频 | 一本一道VS无码中文字幕 | 新婚之夜玩弄人妻系列 | 国产免费三片 | 爱爱免费 | 亚洲AV片毛片成人观看 | 日韩精品亚洲人成在线 | 蜜桃色欲AV久久无码精品 | 国产成人午夜福利院 | 99久久久无码国产精品免费 | 黄色伊人网站 | 国产毛片毛片毛片毛片毛片 | 米奇影视第四色 | 久久精品国产亚洲AV无码麻豆 | 久久成人国产精品免费软件 | 国产无人区卡一卡二卡三乱码 | 无码国产精品一区二区VR老人 | 婷婷亚洲精品久久无码一区二区三区 | 亚洲AV之男人的天堂网站 | 亚洲成AV人片一区二区 | 边摸边吃奶边做爽动态 | 美女mm131爽爽爽作爱视频 | 国产成人午夜福利院 | 免费人成在线观看成人片 | 一边摸一边做爽的视频17国产 | 男女一对一免费视频 | 最新日韩精品 | 欧美疯狂作爱AAAAA片 | 中文字幕免费在线 | 中日韩无砖码一线二线 | 亚洲精品无码MV在线观看 |