认识---系统资源resource

本文详细介绍了Linux内核中rlimit结构用于实现进程资源限制的原理,包括task_struct中rlim数组的作用,getrlimit和setrlimit函数的用法,以及资源限制的继承和设置规则。重点展示了常见的16种系统资源类型和它们在rlim数组中的位置。
摘要由CSDN通过智能技术生成

    在linux内核中, 会对一个进程获取系统资源的数量进行限制。那如何实现资源的限制?

    linux使结构体rlimit实现限制, rlimit是resource limit的缩写。

    struct rlimit {
        int rlim_cur;   /*软限制, 实际的 限制值*/
        int rlim_max;   /*硬限制, 限制值的限制值,软限制最大不能超过的值*/
    }

    struct task_struct {
        ...
        struct rlimit rlim[RLIM_NLIMITS];  /*定义这个进程 所能获得的资源数量,a资源、b资源..
    }

    task_struct结构体中的 限制项 为何是数组?

    #define RLIM_NLIMITS 16 定义了rlim[] 数组大小, 也规定了一个系统资源的类型数量

    struct rlimit rlim[] 数组中的每一个数组元素 表示 这个进程 可获取 的资源的限制(rlim_cur, rlim_max)  

    一个进程可获取16种系统资源,如下

        #define RLIMIT_CPU0         0     /*每秒CPU时间*/
        #define RLIMIT_FSIZE1       1
        #define RLIMIT_DATA         2
        #define RLIMIT_STACK        3
        #define RLIMIT_CORE         4
        #define RLIMIT_RSS          5
        #define RLIMIT_NPROC        6
        #define RLIMIT_NOFILE       7     /*进程能打开文件个数的最大值*/
        #define RLIMIT_MEMLOCK      8
        #define RLIMIT_AS           9 
        #define RLIMIT_LOCKS        10
        #define RLIMIT_SIGPENDING   11
        #define RLIMIT_MSGQUEUE     12
        #define RLIMIT_NICE         13
        #define RLIMIT_RTPRIO       14
        #define RLIMIT_RTIME        15

        #define RLIM_NLIMITS        16

    define后的数字 定义了 该类型资源在rlim[]数组的位置

    同时,linux也提供了两个函数 来获取资源的限制

    int getrlimit() 用于 获取 资源的限制

        resource:指定 获取那种资源,取值范围1-15(16种资源define)

        rlim:存放获取的资源的 限制信息

    int setrlimt()  用于 设置 资源的限制

        resource:指定对哪种资源 进行设置

        rlim:存放设置的信息

两个函数返回值:成功返回0,失败返回非零

    可通过:cat/proc/self/limits 查看系统 对以上资源的限制

1、进程的资源限制,通常在 系统初始化时,由进程0 建立;

2、然后,由每个 后续进程 继承

3、每种实现 都可用自己的方法 对 各种限制 调整

4、在更改系统资源限制时,必须遵循3条规则:

        ·软限制值 可 改为 小于等于 硬限制值

        ·硬限制值 可降低, 但其 必须大于软限制值。这种操作 对普通用户来说 不可逆

        ·超级用户进程 方可 提高 硬限制值

5、常量RLIMIT_INFINITY 指定一个 无限制 的限制值

6、资源限制 影响到 调用进程,并由其子进程继承。这也意味着,为了影响一个用户的 所有后续进行, 需将资源限制 设置构造在 shell 之中。Bash和Bsh具有内置的ulimit命令,Csh具有内置的limit命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值