+ -
当前位置:首页 → 问答吧 → 关于struct page所在队列的问题

关于struct page所在队列的问题

时间:2009-08-11

来源:互联网

struct page的几个与队列指针:
struct list_head list;
struct address_space *mapping;
struct page *next_hash;
struct page **pprev_hash
struct list_head lru;
各有什么用?他们根据page的状态各自挂入哪个队列?

内核2.4.0vmscan.c的代码中:
int refill_inactive_scan(unsigned int priority, int oneshot)
{
struct list_head * page_lru;
struct page * page;
int maxscan, page_active = 0;
int ret = 0;

/* Take the lock while messing with the list... */
spin_lock(&pagemap_lru_lock);
maxscan = nr_active_pages >> priority;
while (maxscan-- > 0 && (page_lru = active_list.prev) != &active_list) {
page = list_entry(page_lru, struct page, lru);

/* Wrong page on list?! (list corruption, should not happen) */
if (!PageActive(page)) {
printk("VM: refill_inactive, wrong page on list.\n");
list_del(page_lru); //将page从活动队列中删除
nr_active_pages--; //活动页面数--
continue;
}
在最后这个if结构中将page结构从活动队列中删除了,但是既没有挂入脏队列,也没有挂入到干净队列,也没有放入空闲区中。这样一个这一个页面对应的内存在内核范围内不就永远的丢失了么?

拜谢

作者: new_new_one   发布时间: 2009-08-11

对于第一个问题,可以看毛德操的书,
第二个问题,if里面的表示这个page是有问题的,因为在活动队列里,但是状态又不是active的,一定是哪里出了问题,所以就直接删掉了

作者: blizz   发布时间: 2009-08-22

热门下载

更多