作者 主題: Linux Kernel 記憶體 資訊  (閱讀 1949 次)

0 會員 與 1 訪客 正在閱讀本文。

FIEND

  • 鑽研的研究生
  • *****
  • 文章數: 700
    • 檢視個人資料
    • http://bbs.ecstart.com
Linux Kernel 記憶體 資訊
« 於: 2012-08-25 08:15 »
用 c++ 取得 Kernel 的記憶體資訊.


################################################################

首先找到 :

vim /usr/include/linux/kernel.h

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


測試 Kernel 內的資訊 :

#include "sys/types.h"
#include "sys/sysinfo.h"
#include <cstdlib>
#include <iostream>
#include <string>
#include <stdio.h>


struct sysinfo memInfo;

using namespace std; // For atoi.


int main(){

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




        //while(true){
                sysinfo (&memInfo);
                std::cout << " Kernel meminfo                                   : " << "List - " << std::endl ;
                std::cout << " Seconds since boot                               : " << memInfo.uptime << std::endl ;
                std::cout << " 1, 5, and 15 minute load averages                : " << memInfo.loads[0] << " , " << memInfo.loads[1]  << " , " << memInfo.loads[2]  << " , " << memInfo.loads[3] << std::endl ;
                std::cout << " Total usable main memory size                    : " << memInfo.totalram << std::endl ;
                std::cout << " Available memory size                            : " << memInfo.freeram << std::endl ;
                std::cout << " Amount of shared memory                          : " << memInfo.sharedram << std::endl ;
                std::cout << " Memory used by buffers                           : " << memInfo.bufferram << std::endl ;
                std::cout << " Total swap space size                            : " << memInfo.totalswap << std::endl ;
                std::cout << " swap space still available                       : " << memInfo.freeswap << std::endl ;
                std::cout << " Number of current processes                      : " << memInfo.procs    << std::endl ;
                std::cout << " explicit padding for m68k                        : " << memInfo.pad      << std::endl ;
                std::cout << " Total high memory size                           : " << memInfo.totalhigh << std::endl ;
                std::cout << " Available high memory size                       : " << memInfo.freehigh << std::endl ;
                std::cout << " Memory unit size in bytes                        : " << memInfo.mem_unit << std::endl ;
                std::cout << std::endl ;
                sleep(1);
        //}
}



結果 :

[root@FIEND memory]# vim mc.cpp
[root@FIEND memory]# g++ mc.cpp -o mc
[root@FIEND memory]# ./mc
 Kernel meminfo                                   : List -
 Seconds since boot                               : 53296
 1, 5, and 15 minute load averages                : 0 , 0 , 0 , 33669029888
 Total usable main memory size                    : 33669029888
 Available memory size                            : 29155844096
 Amount of shared memory                          : 0
 Memory used by buffers                           : 24367104
 Total swap space size                            : 0
 swap space still available                       : 0
 Number of current processes                      : 2365
 explicit padding for m68k                        : 0
 Total high memory size                           : 0
 Available high memory size                       : 0
 Memory unit size in bytes                        : 1
« 上次編輯: 2012-08-25 08:19 由 FIEND »
你累了嗎? 這樣不行 , 人要比 LINUX 兇 @@ " ......

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17475
    • 檢視個人資料
    • http://www.study-area.org
Re: Linux Kernel 記憶體 資訊
« 回覆 #1 於: 2012-08-25 10:09 »
讚!來講一場吧^_^

FIEND

  • 鑽研的研究生
  • *****
  • 文章數: 700
    • 檢視個人資料
    • http://bbs.ecstart.com
Re: Linux Kernel 記憶體 資訊
« 回覆 #2 於: 2012-08-25 10:14 »
讚!來講一場吧^_^

呵呵~~我比較適合~埋頭苦幹~~

謝~~

^^
你累了嗎? 這樣不行 , 人要比 LINUX 兇 @@ " ......