Linux中的进程描述符
来源:互联网 发布:软件专业有哪些课程 编辑:程序博客网 时间:2024/06/04 18:28
一、进程和PCB
进程是一个正在执行的程序。
进程是程序的一个实例。进程能分配处理器并由处理器执行的实体。
如果从内核的角度看的话:进程是分配系统资源的单位。当一个程序被加载到内存之后并为他分配一个PCB(进程控制块),这时候就称为进程了。在Linux中PCB就是一个名字叫做task_struct的结构体,我们叫他”进程描述符”。它里面有进程执行的所有信息,所以CPU对task_struct进行管理就相当于在对进程进行管理。
PCB叫做进程控制块,它用来维护进程相关的信息,每个进程都有一个PCB。在linux中这个PCB是一个叫做task_struct的结构体。
二、task_struct
在linux中,每一个进程都有一个进程描述符,这个”进程描述符”是一个结构体名字叫做task_struct,在task_struct里面保存了许多关于进程控制的信息。
task_struct是Linux内核的一种数据结构,它会被装载到RAM里并包含进程的信息。每个进程都把它的信息放在task_struct这个数据结构里面,而task_struct包含以下内容:
标示符:描述本进程的唯一标示符,用来区别其他进程。
状态:任务状态,退出代码,退出信号等。
优先级:相对于其他进程的优先级。
程序计数器:程序中即将被执行的下一条指令的地址。
内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。
上下文数据:进程执行时处理器的寄存器中的数据。
I/O状态信息:包括显示的I/O请求,分配给进程的I/O设备和正在被进程使用的文件列表。
记账信息:可能包括处理器时间总和,使用的时钟总数,时间限制,记账号等。
三、task_struct分类
- 调度数据成员
(1) volatile long states;
(2) unsigned long flags;
(3) long priority;
(4) unsigned long rt_priority;
(5) long counter;
(6) unsigned long policy; - 信号处理
(1) unsigned long signal;
(2) unsigned long blocked;
(3) struct signal_struct *sig; 进程队列指针
(1) struct task_struct *next_task,*prev_task;
(2) struct task_struct *next_run,*prev_run;
(3) struct task_struct *p_opptr,*p_pptr;和struct task_struct *p_cptr,*p_ysptr,*p_osptr;进程标识
(1) unsigned short uid,gid;
(2) int groups[NGROUPS];
(3) unsigned short euid,egid;
(4) unsigned short fsuid,fsgid;
(5) unsigned short suid,sgid;
(6) int pid,pgrp,session;
(7) int leader;时间数据成员
(1) unsigned long timeout;
(2) unsigned long it_real_value,it_real_iner;
(3) struct timer_list real_timer;
(4) unsigned long it_virt_value,it_virt_incr;
(5) unsigned long it_prof_value,it_prof_incr;
(6) long utime,stime,cutime,cstime,start_time;信号量数据成员
(1) struct sem_undo *semundo;
(2) struct sem_queue *semsleeping;进程上下文环境
(1) struct desc_struct *ldt;
(2) struct thread_struct tss;
(3) unsigned long saved_kernel_stack;
(4) unsigned long kernel_stack_page;文件系统数据成员
(1) struct fs_struct *fs;
(2) struct files_struct *files;
(3) int link_count;内存数据成员
(1) struct mm_struct *mm;页面管理
(1) int swappable:1;
(2) unsigned long swap_address;
(3) unsigned long min_flt,maj_flt;
(4) unsigned long nswap;
(5) unsigned long cmin_flt,cmaj_flt,cnswap;
(6) unsigned long old_maj_flt,dec_flt;
(7) unsigned long swap_cnt;支持对称多处理器方式(SMP)时的数据成员
(1) int processor;
(2) int last_processor;
(3) int lock_depth;其它数据成员
(1) unsigned short used_math;
(2) char comm[16];
(3) struct rlimit rlim[RLIM_NLIMITS];
(4) int errno;
(5) long debugreg[8];
(6) struct exec_domain *exec_domain;
(7) unsigned long personality;
(8) struct linux_binfmt *binfmt;
(9) int exit_code,exit_signal;
(10) int dumpable:1;
(11) int did_exec:1;
(12) int tty_old_pgrp;
(13) struct tty_struct *tty;
(14) struct wait_queue *wait_chldexit;进程队列的全局变量
(1) current;
(2) struct task_struct init_task;
(3) struct task_struct *task[NR_TASKS];
(4) unsigned long volatile jiffies;
(5) int need_resched;
(6) unsigned long intr_count;
Sunnylunch-blog
Sunnylunch-blog
Sunnylunch-blog
Sunnylunch-blog
- Linux中的进程描述符
- 详解Linux中的进程描述符task_struct
- 详解Linux中的进程描述符task_struct
- 详解Linux中的进程描述符Task_struct
- Linux进程描述符
- Linux进程描述符task_struct
- linux进程管理(1)---进程描述符
- Linux中的文件描述符
- Linux中的文件描述符
- Linux中的文件描述符
- linux进程描述符task_struct详解
- linux进程间传递描述符
- linux进程描述符task_struct详解
- linux kernel(二) 进程描述符
- Linux下进程间传递描述符
- linux进程描述符—task_struct结构
- linux 进程文件 文件描述符
- linux进程描述符task_struct详解
- Django开发,给admin模块添加富文本
- [华为OJ--C++]042-矩阵乘法
- jsp内置对象request
- Js~对数组的操作
- 36辆车,6条跑道,无计时器,最少几次比赛可以选出前三
- Linux中的进程描述符
- 5.Java常用API 1
- Python 自动化加固流程
- JSP/FTL 中获取param、request、session、application中的值
- The launch image set named LaunchImage did not have any applicable content
- synchronized 修饰在 static方法和非static方法的区别
- JAVA学习笔记
- 历届试题 埃及分数(穷举)
- virtualenv