Linux核心驅動(五):1、Linux進程式控制制

來源:互聯網
上載者:User

一、進程4要素

        1、有一段程式供其執行。這段程式不一定是某個進程專用,可以和其他進程共用

        2、有進程專用的核心空間堆棧

        3、在核心中有一個 task_struct 資料結構(實際上就是PCB 進程式控制制塊)

        4、有獨立的使用者空間

PS.  Linux系統中 進程、使用者線程、核心線程 的辨析:(記住這個圖就好)

二、進程描述

       1、在Linux中,線程、進程都是用  struct  task_struct 來表示(該資料結構就是我們說的PCB了),它包含了大量描述進程/線程 的資訊,這裡只列出來一些比較重要的

            (1)pid_t  pid;    //進程號,最大值10億。 實際上線程(使用者線程、核心線程)和進程都對應一個pid

            (2)volatile long state;  //進程狀態

                       ==   TASK_RUNNING ,對應著就緒和執行態,進程剛被建立就處於TASK_RUNNING。所以說只要一個進程能夠執行,就處於TASK_RUNNING

                       ==   TASK_INTERRPTIBLE,對應著阻塞態中的可中斷的阻塞。(除了等待條件為真時可以被喚醒,也可以通過訊號或中斷喚醒它)

                       ==  TASK_UNINTERRPTIBLE,對應著阻塞態中的不可中斷的阻塞。(只有等待資源有效時才喚醒,不可以通過訊號或中斷喚醒它)

                      ==  TASK_STOPPED,對應著阻塞態中的終止執行。當接收到SIGSTOP和SIGTSTP等訊號時,進程進入該狀態,接收到SIGCONT訊號後,進程重新回到TASK_RUNNING。

                      ==  TASK_KILLABLE,對應著阻塞態中的睡眠態,原理類似於TASK_UNINTERRPTIBLE,但是可以被致命訊號 SIGKILL喚醒

                      ==  TASK_TRACED,處於調試狀態的進程。我們在調試代碼階段可以控制進程停止、運行等

                      ==  TASK_DEAD,進程退出時(調用 do_exit),state欄位被設定為該狀態

            (3)int  exit_state;    //進程退出時的狀態(Linux把進程退出又分成很多狀態,它不是一下由TASK_RUNNING 變成  TASK_DEAD的)

                      ==  EXIT_ZOMBIE(僵死進程):進程的執行被終止,但父進程還沒有發布waitpid()來收集有關死亡進程的資訊。(人死了,屍體還留在那)

                      ==  EXIT_DEAD(僵死撤銷狀態): 表示進程的最終狀態。父進程已經使用wait4()或waitpid()系統調用來收集資訊,因此進程將由系統刪除。(人死了,屍體也燒了)

       2、struct mm_struct * mm;   //進程使用者空間描述指標,核心線程該指標為空白(因為沒有)

       3、unsigned int policy;     //該進程的調度策略

       4、int prio;  //進程優先順序,在(0-MAX_PRIO - 1)範圍內屬於即時進程。在(MAX_RT_PRIO - MX_PRIO-1)屬於非即時進程。MAX_PRIO==100。

       5、int static_prio;//靜態優先順序

       6、struct sched_rt_entiry rt;  rt->time_slic;    //時間片,進程預設情況下的時間片與進程的靜態優先順序有關

       7、struct 在核心中的分布圖:

由於隨著核心的不斷髮展擴大,是的task_struct的內容不斷增多,為了固定一個進程描述資訊的固定大小(一個或兩個頁面),這樣從2.6核心以後,我們把task_struct 獨立出去,用thread_info struct取代了原來的task_struct的位置,然後在thread_info 中設定一個指標指向外面的task_struct,這樣就保證了進程的固定大小

       8、current:在linux核心中用current指標指向當前正在啟動並執行進程的task_struct

三、進程建立圖

四、進程銷毀圖

進程銷毀可以通過幾個事件驅動:正常的進程結束、訊號、或exit函數的調用。不管如何退出,進程的結束都要藉助核心功能do_exit的調用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.