- 論壇徽章:
- 0
|
本帖最后由 zmmkele 于 2013-07-05 16:09 編輯
linux版本: 2.4.0
在free_pages_ok()函數(shù)源碼中有兩個疑問:- while (mask + (1 << (MAX_ORDER-1))) {
- struct page *buddy1, *buddy2;
- if (area >= zone->free_area + MAX_ORDER)
- BUG();
- [color=Red]/* 這邊改變的貌似只能是area_map的第一個int中的bit而已? */[/color]
- if (!test_and_change_bit(index, area->map))
- /*
- * the buddy page is still allocated.
- */
- break;
- /*
- * Move the buddy up one level.
- */
- buddy1 = base + (page_idx ^ -mask);
- buddy2 = base + page_idx;
- if (BAD_RANGE(zone,buddy1))
- BUG();
- if (BAD_RANGE(zone,buddy2))
- BUG();
-
- [color=Red] /* 怎么只刪除了buddy1所在的list,沒操作area其它頁面? */[/color]
- memlist_del(&buddy1->list);
- mask <<= 1;
- area++;
- index >>= 1;
- page_idx &= mask;
- }
復(fù)制代碼 剛看內(nèi)存管理部分,望大家指教。
問題1: if (!test_and_change_bit(index, area->map)), 這邊改變的貌似只能是area_map的第一個int中的bit而已?
問題2: memlist_del(&buddy1->list), 怎么只刪除了buddy1所在的list,沒操作area其它頁面?
BR
|
|