Busybox中的free命令

Busybox中包含了一个free命令,其用来查看内存信息。其输出如下:

--->8---

$ free
             total       used       free     shared    buffers     cached
Mem:       6122180    3908872    2213308          0     270864    2578388
-/+ buffers/cache:    1059620    5062560
Swap:      4628476          0    4628476

---8<---

其中这些信息是从那里来的呢?查看free命令的源代码(busybox/procps/free.c)可以发现,其调用sysinfo来获取这些信息。

sysinfo是Linux内核的一个API,其源码在(<kernel/sys.c>),定义如下:

--->8---

SYSCALL_DEFINE1(sysinfo, struct sysinfo __user *, info)

---8<---

sysinfo结构体的定义在<include/uapi/linux/sysinfo.h>.

--->8---

struct sysinfo {
        __kernel_long_t uptime;         /* Seconds since boot */
        __kernel_ulong_t loads[3];      /* 1, 5, and 15 minute load averages */
        __kernel_ulong_t totalram;      /* Total usable main memory size */    
        __kernel_ulong_t freeram;       /* Available memory size */
        __kernel_ulong_t sharedram;     /* Amount of shared memory */
        __kernel_ulong_t bufferram;     /* Memory used by buffers */           
        __kernel_ulong_t totalswap;     /* Total swap space size */            
        __kernel_ulong_t freeswap;      /* swap space still available */       
        __u16 procs;                    /* Number of current processes */      
        __u16 pad;                      /* Explicit padding for m68k */        
        __kernel_ulong_t totalhigh;     /* Total high memory size */           
        __kernel_ulong_t freehigh;      /* Available high memory size */       
        __u32 mem_unit;                 /* Memory unit size in bytes */        
        char _f[20-2*sizeof(__kernel_ulong_t)-sizeof(__u32)];   /* Padding: libc5 uses this.. */
};

---8<---

uptime通过调用get_monotonic_boottime()来获取,其定义在<kernel/time/timekeeping.c>

loads[3]通过调用get_avenrun()来获取,其定义在<kernel/sched/proc.c>

ram信息通过si_meminfo()来获取,其定义在<mm/page_alloc.c>

swap信息通过si_swapinfo()来获取,其定义在<mm/swapfile.c>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值