linux内核中的struct rlimit结构体详解

   在linux内核中,对一个进程获取系统资源的数量进行了限制。那么linux内核是如何实现这种对一个进程的各种资源的限制呢?

   linux使用struct rlimit结构体来实现的,rlimit是 resource limit的缩写。

   struct rlimit

          {

              unsigned int rlim_cur;  /* soft limit */

              unsigned int rlim_max;  /* hard limit (ceiling for rlim_cur)*/

          }

linux系统对一个进程获取各种系统资源的限制的实现:

struct task_struct

  {

    struct rlimit rlim[RLIM_NLIMITS]; //这一项定义了一个进程所能获取的系统资源量;

  }

接下来对 struct rlimit rlim[]数组进行详细介绍:

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

    struct rlimit rlim[]数组中的每一个数组元数表示一个进程可以获取的一种系统资源以及一个进程可以获取到的资源的限制(rlim_cur, rlim_max)。

   

一个进程可以获取的16种系统资源:

每一个difine后面的数字定义了该类资源在struct rlimit rlim[]数组中的位置。

同时linux系统也为我们提供了两个函数来获取系统资源的限制:

   #include<sys/time.h>

   #include<sys/resource.h>

int getrlimit(int resource , struct rlimit &rlim) 用于获取系统资源的限制;

         resource : 用于指定获取哪种系统资源;

                    取值范围为:上图中定义的范围: 0 ~ 15;

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

int setrlimit(int resource, struct rlimit *rlim) 用于设置系统资源限制;

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

         rlim     :存放用于设置的信息;

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

系统中的每个进程的struct task_struct结构体中的struct rlimit rlim[RLIM_NLIMITS]中的对每个资源的限制时如何来的呢?

在linux系统中启动的时候,运行的第一个进程是 init task进程,这个 init task也是系统中的双向进程描述符表中的第一个元素。也可以说,init task进程是系统中其它所有进程的祖先。因此系统中的其它所有进程的 struct rlimit rlim[]可以通过继承 init task 中的 struct rlimit rlim[]来实现。

来看看linux系统是如何初始化init task 中的 struct rlimit rlim[]的:

linux通过 #define INIT_RLIMITS来对 init task 中的 struct rlimit rlim[]进行初始化,然后之后其他的子进程继承就可以了。

到这而,struct rlimt结构体介绍完毕!

时间: 2024-12-29 05:11:16

linux内核中的struct rlimit结构体详解的相关文章

struct sk_buff结构体详解

struct sk_buff是linux网络系统中的核心结构体,linux网络中的所有数据包的封装以及解封装都是在这个结构体的基础上进行. struct sk_buff_head  {     struct sk_buff *next;     struct sk_buff *prev;          __u32 qlen;     spinlock_t lock; } struct sk_buff {     struct sk_buff *next;     struct sk_buff

struct ethhdr结构体详解

    在linux系统中,使用struct ethhdr结构体来表示以太网帧的头部.这个struct ethhdr结构体位于#include<linux/if_ether.h>之中. #define ETH_ALEN 6  //定义了以太网接口的MAC地址的长度为6个字节 #define ETH_HLAN 14  //定义了以太网帧的头长度为14个字节 #define ETH_ZLEN 60  //定义了以太网帧的最小长度为 ETH_ZLEN + ETH_FCS_LEN = 64个字节 #d

struct socket结构体详解

在内核中为什么要有struct socket结构体呢?    struct socket结构体的作用是什么?    下面这个图,我觉得可以回答以上两个问题.      由这个图可知,内核中的进程可以通过使用struct socket结构体来访问linux内核中的网络系统中的传输层.网络层.数据链路层.也可以说struct socket是内核中的进程与内核中的网路系统的桥梁.   struct socket {      socket_state  state; // socket state  

struct net_device网络设备结构体详解

在linux中使用struct net_device结构体来描述每一个网络设备.同时这个用来刻画网络设备的struct net_device结构体包含的字段非常的多,以至于内核的开发者都觉得在现在的linux内核中,这个struct net_device是一个大的错误.    在本篇文章中,只介绍struct net_device中的一些字段,其他的字段在以后使用的时候再说.    #define IFNAMSIZ 32    struct net_device    {        //用于

NetBios 的结构体详解(网络控制块NCB)

对之前网络基础编程用到控制块NCB进行介绍(补充): 在Win32环境下,使用VC++6.0进行NetBIOS程序开发时, 需要用到nb30.h文件和netapi32.lib静态链接库.前者定义了NetBIOS的所有函数声明和常数定义,后者定义了NetBIOS应用. Ncb的结构在nb30.h文件中定义.Ncb结构的定义:Ncb有64个字符,分为14个域(或称为字段)和一个10字节的保留域,表2.1显示了Ncb和它的域. 域名及字节偏移量说明. 各个命令详细说明: 1. 命令 NetBIOS命令

NetBios 的结构体详解

[NetBios 的结构体详解] 1.结构体. 2.命令 NetBIOS命令的使用方式有两种,即等待和非等待(或称为同步与异步)方式. 如果命令码的高阶位是0时是等待方式,命令将阻止提交命令的应用程序继续执行,直到该NetBIOS命令执行完毕后才允许这个应用程序继续执行.NetBIOS每次只能处理一个等待方式命令. 如果命令码的高阶位是二进制1时则是非等待方式,命令由NetBIOS在内部排队,并不阻止提交命令的应用程序继续执行.应用程序可通过对命令结束标志字段值的轮询来了解命令执行的状态(详见命

Linux进程描述符task_struct结构体详解--Linux进程的管理与调度(一)【转】

Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息.它定义在include/linux/sched.h文件中. 谈到task_struct结构体,可以说她是linux内核源码中最复杂的一个结构体了,成员之多,占用内存之大. 进程状态 /* * Task state bitmask. NOTE! These bits are also * encoded in fs/proc/array.c: get_task_state().

Linux下DIR,dirent,stat等结构体详解

摘要: 最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅. DIR结构体类似于FILE,是一个内部结构,以下几个函数用这个内部结构保存当前正在被读取的目录的有关信息(摘自<UNIX环境高级编程(第二版)>).函数 DIR *opendir(const char *pathname),即打开文件目录,返回的就是指向DIR结构体的指针,而该指针由以下几个函数使用: 最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎

结构体详解

1 概述 C语言允许用户自己指定这样一种数据结构,它由不同类型的数据组合成一个整体,以便引用,这些组合在一个整体中的数据是互相联系的,这样的数据结构称为结构体,它相当于其它高级语言中记录. 声明一个结构休类型的一般形式如下: struct 结构体名 {成员列表}; 结构体名,用作结构体类型的标志,它又称 结构体标记,大括号内是该结构体中的各个成员,由它们组成一个结构体,对各成员都应进行类型声明如: 类型名 成员名; 也可以把 成员列表称为 域表,第一个成员也称为结构体中的一个域.成员名定名规则写