|
楼主 |
发表于 2007-11-15 02:12:52
|
显示全部楼层
谢谢楼上2位
我的机器,用的是2.6.18 vanilla 内核,刚好只有1G内存
也就是说,应该有2^30 bytes, 一个4K页面是2^12 Bytes, 所以应该有 2^18 = 262144 frames,
我写了一个module, 把内核的数据打印到 /proc
int contig_page_data_read(char* buf, char ** start, off_t off,int count,int *eof,void *data)
{
....
len += sprintf(buf + len, "start_pfn=%ld, present pages=%ld,spanned pages=%ld,node id=%d\n", contig_page_data.node_start_pfn, contig_page_data.node_present_pages, contig_page_data.node_spanned_pages, contig_page_data.node_id);
....
}
奇怪的是
cat /proc/peek/contig_page_data
输出
start_pfn=0, present pages=261935,spanned pages=261935,node id=0
也就是说,系统才用了261935个frame, (mem_map的大小就依据这个来分配的),262144-261935 = 209个frame去那里了呢?
另外,如果只有1G物理内存的话,应该ZONE HIGHMEM里没有页面吧,可是我打印了每个ZONE 的信息:
***** ZONE 0 (ZONE_DMA) *****
pages_min=17, pages_low=21, pages_high=25
zone_start_pfn=0,spanned pages=4096, present_pages=4096
***** ZONE 1 (ZONE_DMA32) *****
H 0, N 0, D32 1, D 0
pages_min=0, pages_low=0, pages_high=0
zone_start_pfn=0,spanned pages=0, present_pages=0
***** ZONE 2 (ZONE_NORMAL) *****
H 0, N 1, D32 0, D 0
pages_min=939, pages_low=1173, pages_high=1408
zone_start_pfn=4096,spanned pages=225280, present_pages=225280
***** ZONE 3 (ZONE_HIGHMEM) *****
H 1, N 0, D32 0, D 0
pages_min=32, pages_low=65, pages_high=99
zone_start_pfn=229376,spanned pages=32559, present_pages=32559
显然 ZONE HIGHMEM也有页面,为什么呢? |
|