linux进程5.进程控制块PCB

  • linux的进程控制块是一个有结构task_struct所定义的数据结构,task_struct存放在/index/linux/sched.h中,包括管理进程的所需的各种信息。
  • 在创建一个新进程时,系统在内存中申请一个空的task_struct区,即空闲PCB块,并填入所需信息,同时将指向该结构的指针填入到task[]数组中。
  • 当前处于运行状态进程的PCB用指针数组current_set[]来指出,这是因为Linux支持多处理系统,系统内可能存在多个同时运行的程序。
  • Linux系统的PCB包括很多参数,每个PCB约占1KB的内存空间,用于表示PCB的结构task_struct简要描述如下:
struct task_struct
{
	unsigned short uid;//用户标识符
	int pid;//进程ID
	int processor;//标识用户正在使用的CPU

	volatile long state;//标识进程的状态
	long prority;//表示进程的优先级
	unsigned long rt_prority;//表示实时进程的优先级
	long counter;//进程动态优先级计算器,用于进程轮转调度算法
	unsigned long flags;//
	unsigned long policy;
	
	struct task_struct * next_task,*prev_task;//进程PCB双向链表的前后项指针
	struct task_struct * next_run,*prev_run;//就绪队列双向链表的前后项指针
	struct task_struct * p_opptr,*p_pptr,*p_cptr,*pysptr,*p_ptr;//指明进程家族间的关系
}
  • volatile long state;//标识进程的状态,可为下列6种状态之一:
1)可运行状态TASK_RUNING
2)可中断阻塞状态TASK_UBERRUPTIBLE
3)不可中断阻断状态TASK_UNINTERRUPTIBLE
4)僵死状态TASK_STOPPED
5)暂停态TASK_STOPPED
6)交换态TASK_SWAPPING
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ARM32的Linux进程控制块(Process Control Block,简称PCB)定义如下: ```c struct task_struct { volatile long state; // 进程状态 void *stack; // 进程内核栈指针 struct list_head tasks; // 进程链表 pid_t pid; // 进程ID pid_t tgid; // 进程组ID struct task_struct *parent; // 父进程指针 struct list_head children; // 子进程链表 struct mm_struct *mm; // 内存描述符指针 struct files_struct *files; // 文件描述符指针 struct signal_struct *signal; // 信号处理描述符指针 struct sighand_struct *sighand; // 信号处理函数指针 struct pt_regs *thread_regs; // 线程寄存器指针 unsigned int flags; // 进程标志位 struct user_struct *user; // 用户描述符指针 struct fs_struct *fs; // 文件系统信息指针 struct group_info *group_info; // 进程所属的用户组信息指针 int exit_code; // 进程退出码 struct completion *vfork_done; // vfork完成信号量 struct pid_link pids[PIDTYPE_MAX]; // 进程ID链表 struct list_head thread_group; // 线程组链表 struct cred *cred; // 进程所属的安全凭证信息指针 char comm[TASK_COMM_LEN]; // 进程名 struct mempolicy *mempolicy; // 内存策略指针 struct timer_list real_timer; // 实时定时器 struct timer_list *real_timer_rebase; // 实时定时器重新计数指针 struct rt_mutex_waiter *pi_waiters; // pi等待链表 }; ``` 其中,state为进程状态,包括TASK_RUNNING(运行中)、TASK_INTERRUPTIBLE(可中断的等待)、TASK_UNINTERRUPTIBLE(不可中断的等待)等;stack为进程内核栈指针;pid为进程ID;parent为父进程指针;mm为内存描述符指针;files为文件描述符指针;signal为信号处理描述符指针;sighand为信号处理函数指针;flags为进程标志位,如PF_EXITING(退出标记)等;user为用户描述符指针;fs为文件系统信息指针;group_info为进程所属的用户组信息指针;exit_code为进程退出码;pids为进程ID链表;cred为进程所属的安全凭证信息指针等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值