struct task_struct 结构分析 \linux-1.0\linux\include\linux\sched.h

//任务机构体,大小大概1024字节
struct task_struct {

/* these are hardcoded - don't touch */ //硬件代码 不可被修改
	volatile long state;	//状态标志 /* -1 unrunnable, 0 runnable, >0 stopped */ 
	long counter;           //计数
	long priority;          //优先权
	unsigned long signal;   //信号
	unsigned long blocked;	//信号标志的bit映射 /* bitmap of masked signals */            
	unsigned long flags;	//上个进程标志/* per process flags, defined below */    
	int errno;              //出错代码
	int debugreg[8];        //硬件编译寄存器。/* Hardware debugging registers */  

/* various fields */ //可变区域
	struct task_struct *next_task, *prev_task;            //本结构的链表双向指针
	struct sigaction sigaction1[32];                      //信号活动数组
	unsigned long saved_kernel_stack;   //内核中保存的堆栈点           
	unsigned long kernel_stack_page;    //内核堆栈页
	int exit_code, exit_signal;         //结束代码,结束信号
	int elf_executable:1;      //是否自己可以执行标志
	int dumpable:1;            //是否可以拆卸标志
	int swappable:1;           //是否可以交换标志
	int did_exec:1;            //是否为执行文件标志
	//启动代码点,结束代码点,结束数据点,断点开始点,断点,堆栈开始点,虚拟映射页开始点!
	unsigned long start_code,end_code,end_data,start_brk,brk,start_stack,start_mmap;
	//变量开始点,变量结束点,环境开始点,环境结束点
	unsigned long arg_start, arg_end, env_start, env_end;
	//进程id,组,会话,引入点
	int pid,pgrp,session,leader;
	//分组数组
	int	groups[NGROUPS];

	/* 
	 * pointers to (original) parent process, youngest child, younger sibling,
	 * older sibling, respectively.  (p->father can be replaced with 
	 * p->p_pptr->pid)
	 */
	//指向最原始的进程任务指针,父进程任务指针,子进程任务指针,新兄弟进程任务指针,旧兄弟进程任务指针。
	struct task_struct *p_opptr,*p_pptr, *p_cptr, *p_ysptr, *p_osptr;
	//任务队列指针
	struct wait_queue *wait_chldexit;	/* for wait4() */
	/*
	 * For ease of programming... Normal sleeps don't need to
	 * keep track of a wait-queue: every task has an entry of its own
	 */
	//real user ID (uid): 实际用户ID,指的是进程执行者是谁
	//effective user ID (euid): 有效用户ID,指进程执行时对文件的访问权限
	//saved set-user-ID (saved uid): 保存设置用户ID。是进程刚开始执行时,euid的副本。在执行exec调用之后能重新恢复原来的effectiv user ID.
	unsigned short uid,euid,suid; //用户ID,有效用户ID,保存设置用户ID
	unsigned short gid,egid,sgid; //组ID,有效组ID,保存设置组ID;
	unsigned long timeout;        //超时时间
	unsigned long it_real_value, it_prof_value, it_virt_value; //真实间隔定时器计数器的当前值,PROF间隔定时器计数器的当前值,虚拟间隔定时器计数器的当前值
	unsigned long it_real_incr, it_prof_incr, it_virt_incr;    //真实间隔定时器计数器的初始值,PROF间隔定时器计数器的初始值,虚拟间隔定时器计数器的初始值
	long utime,stime,cutime,cstime,start_time;    //用户时间,系统时间,累计用户时间,进程启动时间
	unsigned long min_flt, maj_flt;               //次要页错误的数量,主要页错误的数量
	unsigned long cmin_flt, cmaj_flt;             //累计次要页错误,累计主要页错误
	struct rlimit rlim[RLIM_NLIMITS];             //右限制值数组
	unsigned short used_math;                     //被使用的数字
	unsigned short rss;	/* number of resident pages */        //寄存页号
	char comm[16];                                //comm口
	struct vm86_struct * vm86_info;               //86虚拟机结构
	unsigned long screen_bitmap;                  //屏幕位映射
/* file system info */ //文件系统信息
	int link_count;    //链接数
	int tty;		   //终端类型 /* -1 if no tty, so it must be signed */
	unsigned short umask;          //权限掩码
	struct inode * pwd;            //密码节点指针
	struct inode * root;           //root节点指针
	struct inode * executable;     //执行表节点指针
	struct vm_area_struct * mmap;  //虚拟区域映射指针
	struct shm_desc *shm;          //
	struct sem_undo *semun;        //信号量操作标志
	struct file * filp[NR_OPEN];   //已经打开的文件描述字数组
	fd_set close_on_exec;          //进程所有文件描述符(文件句柄)的位图标
/* ldt for this task - used by Wine.  If NULL, default_ldt is used */
	struct desc_struct *ldt;       //局部描述符表
/* tss for this task */
	struct tss_struct tss;         //任务状态段信息结构
#ifdef NEW_SWAP
	unsigned long old_maj_flt;	/* old value of maj_flt */
	unsigned long dec_flt;		/* page fault count of the last time */
	unsigned long swap_cnt;		/* number of pages to swap on next pass */
	short swap_table;		/* current page table */
	short swap_page;		/* current page */
#endif NEW_SWAP
	struct vm_area_struct *stk_vma; //虚拟区域映射指针
};

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值