精通Linux内核开发
上QQ阅读APP看书,第一时间看更新

1.2.4 进程限制:关键元素

内核施加资源限制以确保在相互竞争的进程中公平分配系统资源。这些限制保证了任意一个进程都不会独占所有的资源。有16种不同类型的资源限制,task structure指向一个struct rlimit类型的数组,其中每个偏移量包含了一个特定资源的当前值和最大值。

/*include/uapi/linux/resource.h*/
struct rlimit {
  __kernel_ulong_t        rlim_cur;
  __kernel_ulong_t        rlim_max;
};

这些限制在include/uapi/asm-generic/resource.h中进行了指定。

#define RLIMIT_CPU        0        /* CPU time in sec */
#define RLIMIT_FSIZE      1        /* Maximum filesize */
#define RLIMIT_DATA       2        /* max data size */
#define RLIMIT_STACK      3        /* max stack size */
#define RLIMIT_CORE       4        /* max core file size */
#ifndef RLIMIT_RSS
# define RLIMIT_RSS       5        /* max resident set size */
#endif
#ifndef RLIMIT_NPROC
# define RLIMIT_NPROC     6        /* max number of processes */
#endif
#ifndef RLIMIT_NOFILE
# define RLIMIT_NOFILE    7        /* max number of open files */
#endif
#ifndef RLIMIT_MEMLOCK
# define RLIMIT_MEMLOCK   8        /* max locked-in-memory
address space */
#endif
#ifndef RLIMIT_AS
# define RLIMIT_AS        9        /* address space limit */
#endif
#define RLIMIT_LOCKS      10       /* maximum file locks held */
#define RLIMIT_SIGPENDING 11       /* max number of pending signals */
#define RLIMIT_MSGQUEUE   12       /* maximum bytes in POSIX mqueues */
#define RLIMIT_NICE       13       /* max nice prio allowed to
raise to 0-39 for nice level  19 .. -20 */
#define RLIMIT_RTPRIO     14       /* maximum realtime priority */
#define RLIMIT_RTTIME     15       /* timeout for RT tasks in us */
#define RLIM_NLIMITS      16