内核中采用struct page来描述物理内存页,它的主要成员如下(非全部成员):
- unsigned long flags;
标志位,内核中每个page的状态可以由此标志位来表示,列举几个标志位:
PG_locked 页被锁定,比如在磁盘I/O操作中涉及到的页,不能被页框回收算法回收。
PG_reserved 页留给内核代码或者没有使用,这种页是不受内存管理系统用于分配的,所以不能被回收算法回收。
PG_dirty 表示页已经被修改
PG_lru 页在活动或者非活动页链表中
PG_active 页在活动页链表中
- atomic_t _count;
页被引用的计数器,如果为-1代表该页空闲,每被一个进程引用该计数器就加1。 - atomic_t _mapcount;
页框中的页表项计数,该成员在页框回收时会用到,用于反向映射查找并释放对应的页表项。 - struct address_space* mapping;
当页被作为“映射页”或者作为匿名页时使用。 - struct list_head lru;
这是一个链表头,用于把该页加入都lru(最近最少使用)链表中,作为页面回收时使用。