进程控制块PCB(进程描述符)

2019-07-14 11:48发布

1PCB 每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。grep -r “task_struct” /  可以查找根目录下,包含task_struct的文件文件。或者 find /usr -name sched.h。从而,在/usr/include/linux/sched.h文件中可以查看struct task_struct 结构体定义。其内部成员有很多,我们重点掌握以下部分即可: (1)进程id。系统中每个进程有唯一的id,在C语言中用pid_t类型表示,其实就是一个非负整数。 (2)进程的状态,有就绪、运行、挂起、停止等状态。 (3)进程切换时需要保存和恢复的一些CPU寄存器的值。 (4)描述虚拟地址空间的信息(如虚拟地址与物理地址之间的映射关系)。 (5)描述控制终端的信息(桌面终端、文字终端和设备终端,pts/0或者tty0等)。 (6)当前工作目录(当前进程的工作目录)。 (7)umask掩码(对文件的一种保护机制,文件权限)。 (8)文件描述符表,包含很多指向file结构体的指针。 (9)和信号相关的信息。 (10)用户id和组id。 (11)会话(Session)和进程组(功能相似的一些进程组成一个进程组)。 (12)进程可以使用的资源上限(Resource Limit)。(ulimit –a命令可以查看) 2ulimit命令详解 ulimit -a命令用来显示各种进程能够使用的资源上限(显示并控制shell启动的程序或进程所能够使用的资源上限,ulimitshell内建命令),Linux对于每个用户,系统限制其最大进程数,为提高性能,可以根据设备资源情况,设置个Linux用户的最大进程数,一些参数需要设置为无限制,如:数据段长度:ulimit -d unlimited     最大内存大小:ulimit -m unlimited      堆栈大小:ulimit -s unlimited 在用这个命令的时候主要是为了产生core文件,就是程序运行发行段错误时的文件ulimit -c unlimited    从而产生core文件。 [root@localhost ~]# ulimit -a core file size          (blocks, -c) 0 data seg size           (kbytes, -d) unlimited scheduling priority             (-e) 0 file size               (blocks, -f) unlimited pending signals                 (-i) 14473 max locked memory       (kbytes, -l) 64 max memory size         (kbytes, -m) unlimited open files                      (-n) 1024 pipe size            (512 bytes, -p) 8 POSIX message queues     (bytes, -q) 819200 real-time priority              (-r) 0 stack size              (kbytes, -s) 8192 cpu time               (seconds, -t) unlimited max user processes              (-u) 14473 virtual memory          (kbytes, -v) unlimited file locks                      (-x) unlimited 如果需要修改open files (-n) 1024的值,命令就是limit -n 2048(随各自需要设置),其余类似。 参数解释:    -a  显示目前资源限制的设定。 
       -c  设定core文件的最大值,单位为区块。 
       -d <数据节区大小>  程序数据节区的最大值,单位为KB。 
       -f <文件大小>  shell所能建立的最大文件,单位为区块。 
       -H  设定资源的硬性限制,也就是管理员所设下的限制。 
       -m <内存大小>  指定可使用内存的上限,单位为KB。 
       -n <文件数目>  指定同一时间最多可开启的文件数。 
       -p <缓冲区大小>  指定管道缓冲区的大小,单位512字节。 
       -s <堆叠大小>  指定堆叠的上限,单位为KB。 
       -S  设定资源的弹性限制。 
       -t  指定CPU使用时间的上限,单位为秒。 
       -u <程序数目>  用户最多可开启的程序数目。 
       -v <虚拟内存大小>  指定可使用的虚拟内存上限,单位为KB。 3)进程状态 进程基本的状态有5种。分别为初始态(创建),就绪态,运行态,挂起态与终止态。其中初始态为进程准备阶段,常与就绪态结合来看。