//任务机构体,大小大概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; //虚拟区域映射指针
};
struct task_struct 结构分析 \linux-1.0\linux\include\linux\sched.h
最新推荐文章于 2023-03-27 15:46:09 发布