《深刻理解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建立的进程共享整个父进程的地址空间,而且能够保证子进程比父进程有限执行。