task_struct
来源:互联网 发布:音乐声音放大软件 编辑:程序博客网 时间:2024/05/28 18:43
什么是进程?
内核观点:担当分配系统资源(CPU时间,内存)的实体。
进程的两个基本元素是程序代码(可能被执⾏相同程序的其他进程共享)和代码相关联的数据集。进程是⼀种动态描述,但是并不代表所有的进程都在运行。(进程在内存中因策
略或调度需求,会处于各种状态)
⼴义上,所有的进程信息被放在⼀个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
进程控制块:
每个进程在内核中都有⼀一个进程控制块(PCB)来维护进程相关的信息,Linux内核的
进程控制块是task_struct结构体。现在我们全⾯面了解⼀一下其中都有哪些信息
在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、内存信息
查找task_struct指令如下:
struct task_struct { volatile long state; /* -1 不运行, 0 运行, >0 停止*/ void *stack; atomic_t usage; unsigned int flags; //每个进程的标志, unsigned int ptrace; int lock_depth; /* 仓库锁深度*/ int prio, static_prio, normal_prio; unsigned int rt_priority; const struct sched_class *sched_class; struct sched_entity se; struct sched_rt_entity rt; unsigned char fpu_counter; unsigned int policy; cpumask_t cpus_allowed; struct list_head tasks; struct plist_node pushable_tasks; struct mm_struct *mm, *active_mm; int exit_state; int exit_code, exit_signal; int pdeath_signal; /* 当父进程死亡信号发送*/ unsigned int personality; unsigned did_exec:1; unsigned in_execve:1; /* 告诉lsm过程做一个execve */ unsigned in_iowait:1; unsigned sched_reset_on_fork:1; /* 恢复到默认优先级*/ pid_t pid; pid_t tgid; struct task_struct *real_parent; /*返回父进程*/ struct task_struct *parent; /* 指向其父进程,当它终止时,必须向它的父进程发送信号, 它的值通常和real_parent相同*/ struct list_head children; struct list_head sibling; /*链接在兄弟链表*/ struct task_struct *group_leader; /* 指向头进程*/ struct list_head ptraced; struct list_head ptrace_entry; struct pid_link pids[PIDTYPE_MAX]; struct list_head thread_group; struct completion *vfork_done; //供fork()使用 int __user *set_child_tid; int __user *clear_child_tid; //cpu时间信息 cputime_t utime, stime, utimescaled, stimescaled; cputime_t gtime; cputime_t prev_utime, prev_stime; unsigned long nvcsw, nivcsw; /* 上下文切换项*/ struct timespec start_time; /* 单调的时间*/ struct timespec real_start_time; /* 引导建立时间*//* mm断层和交换信息:这可以说可以视为mm-specific或表*/ unsigned long min_flt, maj_flt; struct task_cputime cputime_expires; struct list_head cpu_timers[3]; /* 进程的凭证*/ const struct cred *real_cred; /* 客观和真实的主观任务的凭据*/ const struct cred *cred; /* 有效凭证(重写的)主观任务(COW) */ struct mutex cred_guard_mutex; /* 防止外部影响凭证计算(notably. ptrace) */ struct cred *replacement_session_keyring; int link_count, total_link_count/* CPU-specific这个任务的状态*/ struct thread_struct thread;/* 文件系统信息*/ struct fs_struct *fs;/* 打开文件信息*/ struct files_struct *files; struct files_struct *files;/* 域名*/ struct nsproxy *nsproxy;/* 信号句柄*/ struct signal_struct *signal; struct sighand_struct *sighand; sigset_t blocked, real_blocked; sigset_t saved_sigmask; /* 如果恢复set_restore_sigmask()使用*/ struct sigpending pending; unsigned long sas_ss_sp; size_t sas_ss_size; int (*notifier)(void *priv); void *notifier_data; sigset_t *notifier_mask; struct audit_context *audit_context; seccomp_t seccomp; /* 线程组跟踪*/ u32 parent_exec_id; u32 self_exec_id; spinlock_t alloc_lock; /* π的保护数据结构:: */ spinlock_t pi_lock; /* 日志文件系统信息*/ void *journal_info;/* 堆块设备信息*/ struct bio *bio_list, **bio_tail;/* VM 堆*/ struct reclaim_state *reclaim_state; struct backing_dev_info *backing_dev_info; struct io_context *io_context; unsigned long ptrace_message; siginfo_t *last_siginfo; /* ptrace使用 */ struct task_io_accounting ioac;};
1 0
- task_struct
- task_struct
- task_struct
- task_struct
- task_struct
- task_struct
- task_struct
- task_struct
- task_struct
- task_struct
- task_struct
- task_struct-2.4
- task_struct structure
- task_struct 数据结构
- task_struct结构
- task_struct 数据结构
- task_struct结构
- task_struct 数据结构
- 克隆二叉树
- 【数据库】MySQL中删除主键
- OriginPro2017教程_ OriginLab OriginPro 2017破解版详细图文安装激活教程 破解补丁
- Win10+VS2015+cuda8.0+theano+keras的配置过程
- JavaWeb工程中web.xml基本配置
- task_struct
- 【JAVA】基于HttpClient4.0的网络爬虫基本框架(Java实现)
- 计算器服务器端/客户端示例
- TCP/IP第三层--网络层
- 飞花的糖果
- Latex数学公式表
- 用VS写代码时,出现\vc\include\cmath的情况
- Red5 启动闪退
- Python语言特点