《深入理解linux内核》第三章 进程

  • 进程的七种状态 
    在内核源码的 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创建的进程共享整个父进程的地址空间,并且可以保证子进程比父进程有限执行。

你可能感兴趣的:(linux)