缺省情况下,系统最大的PID是32767(PID_MAX_DEFAULT-1),当内核使用的PID到达这个上限值后就必须开始循环使用已闲置的小PID号。由于循环使用PID,内核必须通过管理一个pidmap_array位图来表示当前已分配的PID号与闲置的PID号。所以在32位体系结构中pidmap_array位图存放在一个单独的页中(4kb)。
kernel/pid.c:
int pid_max = PID_MAX_DEFAULT;
include\linux\threads.h:
#ifndef _LINUX_THREADS_H
#define _LINUX_THREADS_H
#include <linux/config.h>
/*
* The default limit for the nr of threads is now in
* /proc/sys/kernel/threads-max.
*/
/*
* Maximum supported processors that can run under SMP. This value is
* set via configure setting. The maximum is equal to the size of the
* bitmasks used on that platform, i.e. 32 or 64. Setting this smaller
* saves quite a bit of memory.
*/
#ifdef CONFIG_SMP
#define NR_CPUS CONFIG_NR_CPUS
#else
#define NR_CPUS 1
#endif
#define MIN_THREADS_LEFT_FOR_ROOT 4
/*
* This controls the default maximum pid allocated to a process
*/
#define PID_MAX_DEFAULT 0x8000
/*
* A maximum of 4 million PIDs should be enough for a while:
*/
#define PID_MAX_LIMIT (sizeof(long) > 4 ? 4*1024*1024 : PID_MAX_DEFAULT)
#endif