Linux 进程描述符task_struct详解

在linux中每一个进程都有 tast_struct数据结构来定义。test_struct就是我们通常所说的PCB。他是对进程控制的唯一手段也是最有效的手段。当我们调用fork()时,系统会为我们产生一个tast_struct结构。然后从父进程那里继承一些数据,并把新的进程插入到进程树中以待进行进程管理。因此了解task_struct的结构对于我们理解进程调度的关键。

在进行剖析task_struct的定义之前,我们先按照理论推一下他的结构:

1、进程状态,将记录进程在等待,运行,或死锁
2、调度信息,由哪个调度函数调度,怎样调度等
3、进程的通讯状况
4、因为要插入进程树,必须有联系父子兄弟的指针,当然是task_struct
5、时间信息,比如计算好执行的时间,以便cpu分配
6、标号,决定改变进程归属
7、可以读写打开的一些文件信息
8、进程上下文和内核上下文
9、处理器上下文
10、内存信息

因为每一个PCB都是这样的,只有这样一个结构,才能满足一个进程的需求。打开/include/linux/sched.h可以找到task_struct的定义。

struct tast_struct
{
        volatile long state; //说明该进程是否可以执行,还是可中断登信息。
        unsigned long flags; //flafs是进程号,在调用fork()时给出
        int sigpending; //进程有是否待处理的信号
        mm_segment addr_limit; //进程地址空间,区分内核进程与普通进程在内存存放位置的不同,0-0xBFFFFFFFF for user-thead, 0-0xFFFFFFFF for kernel-thread
        volatile long need_resched;//调度标志,表示该进程是否需要重新调度,若非0,则当从内核态返回到用户态,会发生调度
        int lock_resched ; //锁深度
        
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值