linux内核之page数据结构

几个问题:

1.当开启了MMU之后,CPU访问内存的最小单位是多少呢?

page

2.linux怎样描述这个页呢?

3.linux内核里,怎么理解和使用这个页?

linux内核用stuct page来描述一个物理页面:

1.简化版的page结构体

/*
 * page描述一个物理页面
 */
struct page {
    unsigned long flags;
    atomic_t      _refcount;
    atomic_t      _mapcount;
    unsigned long private;
    struct address_space *mapping; 
    pgoff_t       index;
    struct list_head lru;
    void *        *virtual;
} _struct_page_alignment;

flags字段:

enum pageflags {
    PG_locked,      /* Page is locked. Don't touch. */ ///表示页面已经上锁;如果该比特位置位,说明已经被锁,内存管理其他模块不能访问这个页面,防止竞争
    PG_referenced, ///同PG_active一起,用于控制页面的活跃程度,在kswapd页面回收中使用;
    PG_uptodate,   ///表示页面的数据已经从块设备成功读取到内存页面;
    PG_dirty,      ///表示页面内容发生改变,这个页面为脏的,即页面内容被改写,还没同步到外部存储器
    PG_lru,        ///表示页面加入了LRU链表中,内核使用LRU链表来管理活跃和不活跃页面;
    PG_active,
    PG_workingset,
    PG_waiters,     /* Page has waiters, check its waitqueue. Must be bit #7 and in the same byte as "PG_locked" */
    PG_error,       /表示页面操作过程中发生错误时会设置该位;
    PG_slab,        ///页面用于slab分配器
    PG_owner_priv_1,    /* Owner use. If pagecache, fs may use*/
    PG_arch_1,
    PG_reserved,
    PG_private,     /* If pagecache, has fs-private data */
    PG_private_2,       /* If pagecache, has fs aux data */
    PG_writeback,       /* Page is under writeback */  ///表示页面的内容正在向块设备进行会写
    PG_head,        /* A head page */
    PG_mappedtodisk,    /* Has blocks allocated on-disk */
    PG_reclaim,     /* To be reclaimed asap */           ///表示这个页面马上要被回收
    PG_swapbacked,      /* Page is backed by RAM/swap */ ///表示页面具有swap缓存功能,通过匿名页面才可以写回swap分区
    PG_unevictable,     /* Page is "unevictable"  */     ///表示这个页面不能回收
#ifdef CONFIG_MMU
    PG_mlocked,     /* Page is vma mlocked */   ///表示页面对应的vma处于mlocked状态;
#endif
#ifdef CONFIG_ARCH_USES_PG_UNCACHED
    PG_uncached,        /* Page has been mapped as uncached */
#endif
#ifdef CONFIG_MEMORY_FAILURE
    PG_hwpoison,        /* hardware poisoned pa
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值