pcb结构链表_PCB task_struct 数据结构 (转:http://blog.csdn.net/jurrah/article/details/3965437)...

Linux系统中,每一个进程由task_struct数据结构定义,作为进程控制块(PCB)。在fork()调用时创建,包含进程状态、调度信息、通讯、进程树链接、时间信息、标号、文件信息、上下文和内存详细信息。task_struct的结构包括进程状态、调度策略、内存管理、进程ID、信号处理、CPU相关信息等,确保满足进程管理需求。
摘要由CSDN通过智能技术生成



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

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

1、进程状态 ,将纪录进程在等待,运行,或死锁

2、调度信息, 由哪个调度函数调度,怎样调度等

3、进程的通讯状况

4、因为要插入进程树,必须有联系父子兄弟的指针, 当然是task_struct型

5、时间信息, 比如计算好执行的时间, 以便cpu 分配

6、标号 ,决定改进程归属

7、可以读写打开的一些文件信息

8、 进程上下文和内核上下文

9、处理器上下文

10、内存信息

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

struct task_struct {

volatile long state; /*说明了该进程是否可以执行,还是可中断等信息*/

unsigned long flags; /*Flage 是进程号,在调用fork()时给出*/

int sigpending; /*进程上是否有待处理的信号*/

mm_segment_t addr_limit;

/**********************************************************/

/**进程地址空间,区分内核进程与普通进程在内存存放的位置不同*/

/****0-0xBFFFFFFF for user-thead    ***********************/

/****0-0xFFFFFFFF for kernel-thread ***********************/

/**********************************************************/

volatile long need_resched;

/**********************************************************/

/**********调度标志,表示该进程是否需要重新调度,************/

/**********若非0,则当从内核态返回到用户态,会发生调度*******/

/**********************************************************/

int lock_depth; /*********************锁深度***************/

long nice; /********

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值