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

本文深入探讨Linux系统中进程的七种状态及其标识符,包括TASK_RUNNING、TASK_INTERRUPTIBLE等,同时解析了进程切换的实质及关键步骤,如页全局目录切换、内核态堆栈和硬件上下文切换。此外,还介绍了Linux创建进程的关键技术,如写时复制、线程创建及vfork的特殊用途。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 我的博客: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创建的进程共享整个父进程的地址空间,并且可以保证子进程比父进程有限执行。

转载于:https://www.cnblogs.com/yamadie/p/3505516.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值