【Linux】PCB中的task_struct结构体
2017-05-21 16:12
363 查看
task_struct结构体
task_struct是进程控制块PCB中的一个结构体,用来存储进程的各种属性信息这里面有进程状态,进程调度,进程标识符,进程通信,进程链接,时间和定时器,文件系统,虚拟内存信息以及页面管理信息,对称多处理机信息,上下文信息等
结构体内部信息介绍
1、进程状态
linux中的进程有多种状态,在进程的运行过程中,进程会随着调度在多种状态进行转换进程的状态信息是进程进行调度的对换的依据
2、进程调度信息
进程调度则是用这部分信息来决定进程调度的优先次序,结合着进程状态信息来保证进程合理有序的运行进程有多种调度信息,如先来先服务调度方式,时间片轮转调度方式,最近访问优先等调度方式
3、标识符
每一个进程都有进程标识符,用户标识符,组标识符进程标识符PID就是用来标示不同的进程的,因为每一个进程都有唯一的标识符,就和学生拥有唯一的学号,一个人拥有唯一的身份证号码是一样的。内核就是通过这个标识符来识别不同的进程。
4、进程通信有关信息
如果多个进程在一个任务上执行协作,那么就需要这些进程可以互相访问对方的资源,互相通信linux中的主要进程通信方式有:管道、信号量,共享内存,信号,和消息队列
5、进程链接信息
进程的创建是具有继承关系的。一个进程可以创建多个进程,这些子进程之间具有兄弟关系。linux中,除了init进程,其他进程都有唯一一个父进程。
创建子进程可以通过fork()函数或者clone()函数。
除了PID外,子进程的task_struct结构体的大部分信息都是从父进程中拷贝过来的。系统有必要记录这些亲属关系,从而使进程之间的协作变得更加方便。
每个进程的task_struct结构有许多的指针,这些指针让系统中所有进程的task_struct结构构成了一颗进程树,这个进程树的根就是初始化进程init的task_struct结构体。
6、时间和定时器信息
一个进程从创建到终止叫做该进程的生存期(lifetime)。进程在其生存期内使用CPU的时间,内核都要进行记录,以便进行统计、计费等有关操作。进程耗费CPU的时间由两部分组成:一是在用户模式(或称为用户态)下耗费的时间、一是在系统模式(或称为系统态)下耗费的时间。每个时钟滴答,也就是每个时钟中断,内核都要更新当前进程耗费CPU的时间信息。7、文件系统信息
进程可以打开或关闭文件,文件属于系统资源,Linux内核要对进程使用文件的情况进行记录。task_struct结构中有两个数据结构用于描述进程与文件相关的信息。其中,fs_struct中描述了两个VFS索引节点(VFS inode),这两个索引节点叫做root和pwd,分别指向进程的可执行映象所对应的根目录(home directory)和当前目录或工作目录。file_struct结构用来记录了进程打开的文件的描述符8、虚拟内存信息
除了内核线程之外,每个进程都拥有自己的地址空间(也叫虚拟空间),用mm_struct来描述。另外Linux2.4还引入了另外一个域active_mm,这是为内核线程而引入。因为内核线程没有自己的地址空间,为了让内核线程与普通进程具有统一的上下文切换方式,当内核线程进行上下文切换时,让切换进来的线程的active_mm 指向刚被调度出去的进程的active_mm9、页面管理信息
当物理内存不足时,linux内存管理系统需要将内存的部分页面转到外存,其交换是以页为单位的10、对称多处理机信息
11、上下文信息
这里要特别注意标题:和“处理器”相关的环境信息。进程作为一个执行环境的综合,当系统调度某个进程执行,即为该进程建立完整的环境时,处理器(processor)的寄存器、堆栈等是必不可少的。因为不同的处理器对内部寄存器和堆栈的定义不尽相同,所以叫做“和处理器相关的环境”,也叫做“处理机状态”。当进程暂时停止运行时,处理机状态必须保存在进程的task_struct结构中,当进程被调度重新运行时再从中恢复这些环境,也就是恢复这些寄存器和堆栈的值。12、其他
(1) struct wait_queue *wait_chldexit
在进程结束时,或发出系统调用wait4时,为了等待子进程的结束,而将自己(父进程)睡眠在该等待队列上,设置状态标志为TASK_INTERRUPTIBLE,并且把控制权转给调度程序。(2)Struct rlimit rlim[RLIM_NLIMITS];
每一个进程可以通过系统调用setlimit和getlimit来限制它资源的使用。(3)Int exit_code exit_signal;
程序的返回代码以及程序异常终止产生的信号,这些数据由父进程(子进程完成后)轮流查询。(4)Char comm[16]
这个域存储进程执行的程序的名字,这个名字用在调试中。(5)Unsigned long personality;
Linux可以运行X86平台上其它Unix操作系统生成的符合iBCS2标准的程序, personality进一步描述进程执行的程序属于何种Unix平台的“个性”信息。通常有PER_Linux,PER_Linux_32BIT,PER_Linux_EM86,PER_SVR4,PER_SVR3,PER_SCOSVR3,PER_WYSEV386,PER_ISCR4,PER_BSD,PER_XENIX和PER_MASK等,参见include/Linux/personality.h>。(6) int did_exec:1;
按POSIX要求设计的布尔量,区分进程正在执行老程序代码,还是用系统调用execve()装入一个新的程序。(7)struct linux_binfmt *binfmt
指向进程所属的全局执行文件格式结构,共有a.out、script、elf、java等四种。相关文章推荐
- Linux - PCB之task_struct结构体
- task_struct结构体字段介绍--Linux中的PCB
- linux 下 PCB 结构体 task_struct
- task_struct结构体字段介绍--Linux中的PCB
- task_struct结构体字段介绍--Linux中的PCB
- task_struct结构体字段介绍--Linux中的PCB
- 【Linux】浅谈Linux下的PCB—task_struct结构体
- Linux进程管理之task_struct结构体(上)
- linux进程PCB--task_struct
- 【Linux】Linux系统下的PCB结构(task_struct)
- linux中的PCB---task_struct
- Linux进程控制块PCB结构:task_struct 描述
- Linux进程管理下的PCB(task_struct)
- Linux中task_struct结构体字段分析
- Linux并发(task_struct结构体)
- Linux下PCB的task_struck结构体
- Linux下的进程2——进程的内存映像,进程PCB,task_struct详解
- Linux下的PCB:task_struct
- task_struct结构体(PCB)描述
- linux PCB task_struct结构体