《深刻理解linux內核》第三章 進程

  • 個人博客:www.shishangguan.net
  • 進程的七種狀態 
    在內核源碼的 include/linux/sched.h文件中:

    • task_struct的status可表示

      1 #define TASK_RUNNING            0  
      2 #define TASK_INTERRUPTIBLE      1
      3 #define TASK_UNINTERRUPTIBLE    2
      4 #define TASK_STOPPED            4
      5 #define TASK_TRACED             8

       

    • task_struct和exit_status都可標識

      #define EXIT_ZOMBIE             16
      #define EXIT_DEAD               32

       

  • 進程標識符
    一個線程組中的全部線程和該線程組的領頭線程具備相同的pid。
    pid存放在task_struct結構的tgid字段中,但使用getpid()時返回的時tgid。
    線程組領頭線程的pid和tgid是相同的。

  • linux進程切換實質
    1.切換頁全局目錄
    2.切換內核態堆棧和硬件上下文,即TSS段中的值。但linux是軟件進程切換,全部的進程共享一個TSS段,使用mov指令手動裝填TSS而非切換。
  • switch_to宏爲何是三個參數
    最後一個參數last用來存儲上個運行進程,由於切換到新進程時,從堆棧中恢復的prev指針極可能不是目前該進程的真實前一個進程。
  • linux建立進程的關鍵技術
    1.寫時複製
    2.線程的建立能夠共享父進程的地址空間,打開文件等信息。
    3.vfork建立的進程共享整個父進程的地址空間,而且能夠保證子進程比父進程有限執行。
相關文章
相關標籤/搜索