linux 2.6源代码情景分析笔记之进程6

每个进程都有一组相关的资源限制(resource limit),限制了指定进程能使用的系统资源数量。
对当前进程的资源限制存放在current->signal->rlim字段,进程的信号描述符的一个字段。该字段类型为rlimit结构的数组,每个资源限制对应一个元素。
struct rlimit {
        unsigned long   rlim_cur;
        unsigned long   rlim_max;
};

其中rlim_cur字段是资源的当前资源限制(current->signal->rlim[RLIMIT_CPU])。rlim_cur表示正运行进程所占用cpu时间的当前限制
rlim_max字段是资源限制所允许的最大值。利用getrlimit()和setrlimit()系统调用,用户总能把一些资源的rlim_cur限制增加到rlim_max。只有超级用户(具有CAP_SYS_RESOURCE权能的用户)才能改变rlim_max字段,或把rlim_cur字段设置成大于相应rlim_max字段的一个值。

大多数资源限制包含数值RLIM_INFINITY(0xffffffff),它意味着没有对相应的资源施加用户限制。

#ifndef __ARCH_RLIMIT_ORDER
#define RLIMIT_CPU              0       /* CPU time in ms */进程使用cpu最长时间(秒)。进程超过了这个限制,内核就给它发送一个SIGXCPU信号,然后如果进程还不终止,再发一个SIGKLL信号。
#define RLIMIT_FSIZE            1       /* Maximum filesize */文件大小的最大数值(字节)。如果进程试图把一个文件的大小扩充到大于这个值,内核就给这个进程发SIGXFSZ信号。
#define RLIMIT_DATA             2       /* max data size */堆大小的最大数值(字节)。在扩充进程的堆之前,内核检查这个数值。
#define RLIMIT_STACK            3       /* max stack size */栈大小的最大数(字节)。内核在扩充进程的用户态堆栈之前检查这个数值。
#define RLIMIT_CORE             4       /* max core file size */内核信息转储文件的大小(字节)。当一个进程异常终止时,内核在进程的当前目录下创建内存信息转储文件之前检查这个值。如果限制为0,内核就不创建这个文件。
#define RLIMIT_RSS              5       /* max resident set size */内核所拥有的页框最大数。
#define RLIMIT_NPROC            6       /* max number of processes */内核所拥有的进程最大数。
#define RLIMIT_NOFILE           7       /* max number of open files */打开文件描述符的最大数。当打开一个新文或复制一个文件描述符时,内核检查这个值
#define RLIMIT_MEMLOCK          8       /* max locked-in-memory address space */非交换内存的最大数值(字节)。当进程试图通过mlock()或者mlockall()系统调用锁住一个页框时,内核检查这个数值。
#define RLIMIT_AS               9       /* address space limit */进程地址交换空间的最大数(字节)。当进程使用malloc()函数或相关函数时扩大它的地址空间时,内核检查这个数值。
#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 */posix消息队列中的最大字节数

#define RLIM_NLIMITS            13
#endif

#ifdef __KERNEL__

#define INIT_RLIMITS                                                    /
{                                                                       /
        [RLIMIT_CPU]            = { RLIM_INFINITY, RLIM_INFINITY },     /
        [RLIMIT_FSIZE]          = { RLIM_INFINITY, RLIM_INFINITY },     /
        [RLIMIT_DATA]           = { RLIM_INFINITY, RLIM_INFINITY },     /
        [RLIMIT_STACK]          = {      _STK_LIM, _STK_LIM_MAX  },     /
        [RLIMIT_CORE]           = {             0, RLIM_INFINITY },     /
        [RLIMIT_RSS]            = { RLIM_INFINITY, RLIM_INFINITY },     /
        [RLIMIT_NPROC]          = {             0,             0 },     /
        [RLIMIT_NOFILE]         = {      INR_OPEN,     INR_OPEN  },     /
        [RLIMIT_MEMLOCK]        = {   MLOCK_LIMIT,   MLOCK_LIMIT },     /
        [RLIMIT_AS]             = { RLIM_INFINITY, RLIM_INFINITY },     /
        [RLIMIT_LOCKS]          = { RLIM_INFINITY, RLIM_INFINITY },     /
        [RLIMIT_SIGPENDING]     = { MAX_SIGPENDING, MAX_SIGPENDING },   /
        [RLIMIT_MSGQUEUE]       = { MQ_BYTES_MAX, MQ_BYTES_MAX },       /
}

#endif

#ifndef RLIM_INFINITY
#define RLIM_INFINITY   (~0UL)
#endif

#ifndef _STK_LIM_MAX
#define _STK_LIM_MAX    RLIM_INFINITY
#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值