04_20 直接使用代码 创建内核模块获取物理内存信息

好像和 free得出来有关 和/proc/meminfo 有关
但是下面是全部的物理页

#include 
#include 
#include 
#include 

//下面宏表示物理内存空间起始地址 对应页帧号
#define ARCH_PFN_OFFSET (0UL)

static int __init my_init(void)
{
    sturct page *p;
    unsigned long i,pfn,valid=0;
    int free = 0;
    int locked = 0;
    int resvered = 0;
    int swapcache = 0;
    int reference = 0;
    int slab = 0;
    int private = 0;
    int uptodate = 0;
    int dirty = 0;
    int active = 0;
    int wirteback = 0;
    int mappedtodisk =0;

    unsigned long mun_physpages = 0;  
    mun_physpages = get_mun_physpages(); //获得所有物理页
    for(i=0;i<mun_physpages;i++){
        pfn = ARCH_PFN_OFFSET+i;
        //检查页是否有效
        if(!pfn_valid(pfn)){
            continue;
            valid++;
        }

        //获得页的描述符
        p=pfn_to_page(pfn);
        if(!p)
            continue;
        //空闲页面
        if(!page_count(p)){
            free++;
            continue;
        }
        //页面上锁
        if(!pagelocked(p)){
            locked++;
        }
        //不能换出页面
        if(!Pageresvered(p)){
            locked++;
        }
        //交换页面
        if(!Pageswapcache(p)){
            swapcache++;
        }
        //slpa分配区创建页面
        if(!Pageslab(p)){
            slap++;
        }
        
        if(!Pageprivate(p)){
            private++;
        }
        //读操作完成
        if(!Pageuptodate(p)){
            uptodate++;
        }
        //脏页,页面内容修改过 没有更新到rom
        if(!Pagedirty(p)){
            dirty++;
        }
       
        if(!Pageactive(p)){
            active++;
        }
        //页面正在回写
        if(!Pagewirteback(p)){
            wirteback++;
        }
        //页面分配到磁盘
        if(!Pagemappedtodisk(p)){
            mappedtodisk++;
        }

    }




}

你可能感兴趣的:(狂刷KPI,java,算法,开发语言)