Linux进程管理之task_struct
来源:互联网 发布:淘宝男装关键词优化 编辑:程序博客网 时间:2024/06/07 13:07
进程和进程块
什么是进程?
进程就是一个正在执行的程序
进程就是正在计算机上执行的程序实例
能分配给处理器并由处理器执行的实体
什么是进程控制块?
当一个程序被加载到内存中会为它分配一个进程控制块,这个进程控制块(PCB)由操作系统创建和管理.在Linux下PCB就是一个task_struct的结构体,这个结构体就是用来描述进程的信息。操作系统是如何管理所有进程呢,就是通过每个进程的描述信息(也就是一个个描述每个进程信息的结构体)用某种数据结构将所有的结构体链接起来进行管理。
简化的进程控制块里有:
1、标识符:跟这个进程唯一相关的标识符
2、状态:如果进程正在执行,那么进程处于运行态
3、优先级:相对于其他进程的优先级
4、内存指针:包括程序代码和进程相关的数据指针,还有和其他进程共享内存块指针
5、上下文数据:进程执行时处理器的寄存器中的数据
6、I/O状态信息:包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表
7、记账信息:可能包括处理器时间总和,使用的时钟数总和、时间限制、记账号
….
那task_struct这个结构体的内容究竟是什么?
struct task_struct { volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ void *stack; atomic_t usage; unsigned int flags; //每个进程的标记 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 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; unsigned in_iowait:1; unsigned sched_reset_on_fork:1;//恢复到默认优先级 pid_t pid; //进程标识符 pid_t tgid; //表示进程的亲属关系成员 struct task_struct *real_parent; //指向其父进程,如果创建它的的进程不存在,则指向pid为1的init进程 struct task_struct *parent; //指向其父进程,当它终止时,必须向它的父进程发送信号,它的值通常和real_parent相同 struct list_head children; //表示链表的头部,链表中所有的元素都是它的子进程 struct list_head sibling; //用于把当前进程插入到兄弟链中 struct task_struct *group_leader; //指向其所在进程的领头进程 //进程调度 unsigned int ptrace; struct list_head ptraced; struct list_head ptrace_entry; unsigned long ptrace_message; siginfo_t *last_siginfo; /* PID/PID hash table linkage. */ 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; int link_count, total_link_count;//文件系统信息 struct thread_struct thread;//进程的cpu状态,切换时要保存到停止进程的task_struct struct fs_struct *fs;//文件系统信息 struct files_struct *files;//打开文件信息 //信号句柄 struct signal_struct *signal; struct sighand_struct *sighand; sigset_t blocked, real_blocked; sigset_t saved_sigmask; /* restored if set_restore_sigmask() was used */ struct sigpending pending; unsigned long sas_ss_sp; size_t sas_ss_size; udit_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;//堆块设备信息 //虚拟机状态 struct reclaim_state *reclaim_state; struct reclaim_state *reclaim_state; struct backing_dev_info *backing_dev_info; struct io_context *io_context; struct task_io_accounting ioac;};
1 0
- Linux进程管理之task_struct
- Linux进程管理之task_struct
- Linux进程管理之task_struct
- Linux进程管理之task_struct结构体
- Linux进程管理之task_struct结构体
- Linux进程管理之task_struct结构体
- Linux进程管理之task_struct结构体
- linux进程管理之task_struct结构体
- Linux - 进程管理task_struct
- 【Linux】Linux进程管理之task_struct结构体
- Linux进程管理之task_struct结构体(上)
- Linux进程管理之task_struct结构体(下)
- linux内核学习之进程管理------task_struct结构体
- Linux进程管理之task_struct结构体详解
- Linux下进程管理之task_struct结构体
- Linux进程管理之task_struct结构体(上)
- Linux进程管理之task_struct结构体(下)
- Linux进程管理---task_struct结构体
- 单例模式详解
- Windows Api : GetSystemInfo与GetNativeSystemInfo的区别
- Nginx+Tomcat集群与负载均衡示例,配置webservice,配置Tomcat,配置Nginx
- Oracle,视图,同义词,索引,序列,分区
- kubernetes list-watch(二)
- Linux进程管理之task_struct
- 关于字体的疑问
- IoC容器装配Bean 下
- 11单元练习
- JAVA设计模式(单例模式Singleton)
- centos7 php加载mysql扩展实现方法
- Java数据类型对应Oracle数据类型表
- Python基础学习(一)
- 关于tableau过试用期处理办法