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

时间:2022-09-27 12:37:49
  • 我的博客:www.shishangguan.net
  • 进程的七种状态 
    在内核源码的 include/linux/sched.h文件中:

    • task_struct的status可表示

       #define TASK_RUNNING            0  
      #define TASK_INTERRUPTIBLE 1
      #define TASK_UNINTERRUPTIBLE 2
      #define TASK_STOPPED 4
      #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创建的进程共享整个父进程的地址空间,并且可以保证子进程比父进程有限执行。