您的位置:首页 > 运维架构 > Linux

Linux下的进程控制块—task_struct

2016-06-09 13:27 330 查看
Linux下的进程控制块

    进程:程序的执行就是进程。也可以把进程看成一个独立的程序,在内存中有其对应的代码空间和数据空间,一个进程所拥有的数据和代码只属于自己。进程是资源分配的基本单位,也是调度运行的基本单位。

    进程控制块(PCB)(系统为了管理进程设置的一个专门的数据结构,用它来记录进程的外部特征,描述进程的运动变化过程。系统利用PCB来控制
和管理进程,所以PCB是系统感知进程存在的唯一标志。进程与PCB是一 一对应的)。是进程存在和运行的唯一标志,在Linux中用task_struct这个结构体来表示。进程在操作系统中都有一个户口,用于表示这个进程。这个户口操作系统被称为PCB(进程控制块),这个结构体中有很多数据项,查看源代码时没必要理解全部的数据项,只需要在以后使用时再理解。理解为进程在操作系统中都有一个户口,用于表示这个进程。这个户口操作系统被称为PCB(进程控制块),在linux中具体实现是
task_struct数据结构,它记录了一下几个类型的信息:

它包含一些进程的信息,如:

1.状态信息,例如这个进程处于可执行状态,休眠,挂起等。

2.性质,由于unix有很多变种,进程有自己独特的性质。

3.资源,资源的链接比如内存,还有资源的限制和权限等。

4.组织,例如按照家族关系建立起来的树(父进程,子进程等)。

进程状态信息包含:

在Linux内核里,进程有时候也叫作任务。

R(running)

S(sleeping)

D(disk sleep)//sleep状态的一种,高并发io操作时,不能主动停止

T(stopped)

t(tracing stop)

X(dead)//终止进程

Z(zombie)//在进程被杀死时进程并不会直接结束,而是保存。

task_struct结构体的内容:

struct task_struct  

{  

    long state; /*任务的运行状态(-1 不可运行,0 可运行(就绪),>0 已停止)*/  

    long counter;/*运行时间片计数器(递减)*/  

    long priority;/*优先级*/  

    long signal;/*信号*/  

    struct sigaction sigaction[32];/*信号执行属性结构,对应信号将要执行的操作和标志信息*/  

    long blocked; /* bitmap of masked signals */  

    /* various fields */  

    int exit_code;/*任务执行停止的退出码*/  

    unsigned long start_code,end_code,end_data,brk,start_stack;/*代码段地址 代码长度(字节数) 

                                    代码长度 + 数据长度(字节数)总长度 堆栈段地址*/  

    long pid,father,pgrp,session,leader;/*进程标识号(进程号) 父进程号 父进程组号 会话号 会话首领*/  

    unsigned short uid,euid,suid;/*用户标识号(用户id) 有效用户id 保存的用户id*/  

    unsigned short gid,egid,sgid; /*组标识号(组id) 有效组id 保存的组id*/  

    long alarm;/*报警定时值*/  

    long utime,stime,cutime,cstime,start_time;/*用户态运行时间 内核态运行时间 子进程用户态运行时间 

                           子进程内核态运行时间 进程开始运行时刻*/  

    unsigned short used_math;/*标志:是否使用协处理器*/  

    /* file system info */  

    int tty; /* -1 if no tty, so it must be signed */  

    unsigned short umask;/*文件创建属性屏蔽位*/  

    struct m_inode * pwd;/*当前工作目录i 节点结构*/  

    struct m_inode * root;/*根目录i节点结构*/  

    struct m_inode * executable;/*执行文件i节点结构*/  

    unsigned long close_on_exec;/*执行时关闭文件句柄位图标志*/  

    struct file * filp[NR_OPEN];/*进程使用的文件表结构*/  

    /* ldt for this task 0 - zero 1 - cs 2 - ds&ss */  

    struct desc_struct ldt[3];/*本任务的局部描述符表。0-空,1-代码段cs,2-数据和堆栈段ds&ss*/  

    /* tss for this task */  

    struct tss_struct tss;/*本进程的任务状态段信息结构*/  

};  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux task_struct