懂内存管理的进来

tgvlcw 2011-09-23 05:46:26
在编译内核的时候,根据资料上说,0~1G的时候可以不用打开高端内存的宏,1~4G的时候就可以打开,而我的内存是1G的,按道理说高端内存的宏可开可不开。打开的时候,用cat /proc/meminfo可以看到内存的总大小为1G:

# CONFIG_NOHIGHMEM is not set
CONFIG_HIGHMEM4G=y
# CONFIG_HIGHMEM64G is not set
CONFIG_HIGHMEM=y



# cat /proc/meminfo
MemTotal: 1003916 kB


相关log:

<6>[ 0.000000] last_pfn = 0x3ee00 max_arch_pfn = 0x100000
<6>[ 0.000000] setup_arch: max_pfn:0x3ee00, 1006Mb
<6>[ 0.000000] highmem_pfn_init: ------1006Mb, MAXMEM:887Mb
<6>[ 0.000000] highmem_pfn_init: ------257536, highmem_pages:-1, MAXMEM:227326
<7>[ 0.000000] initial memory mapped : 0 - 02400000
<6>[ 0.000000] init_memory_mapping: 0000000000000000-00000000377fe000
<7>[ 0.000000] 0000000000 - 0000400000 page 4k
<7>[ 0.000000] 0000400000 - 0037400000 page 2M
<7>[ 0.000000] 0037400000 - 00377fe000 page 4k
<7>[ 0.000000] kernel direct mapping tables up to 377fe000 @ 7000-c000
<6>[ 0.000000] RAMDISK: 07dfa000 - 08000000
<5>[ 0.000000] 118MB HIGHMEM available.
<5>[ 0.000000] 887MB LOWMEM available.
<6>[ 0.000000] mapped low ram: 0 - 377fe000
<6>[ 0.000000] low ram: 0 - 377fe000
<4>[ 0.000000] Zone PFN ranges:
<4>[ 0.000000] DMA 0x00000001 -> 0x00001000
<4>[ 0.000000] Normal 0x00001000 -> 0x000377fe
<4>[ 0.000000] HighMem 0x000377fe -> 0x0003ee00
<4>[ 0.000000] Movable zone start PFN for each node
<4>[ 0.000000] early_node_map[3] active PFN ranges
<4>[ 0.000000] 0: 0x00000001 -> 0x00000098
<4>[ 0.000000] 0: 0x00000100 -> 0x00000e00
<4>[ 0.000000] 0: 0x00001000 -> 0x0003ee00
<7>[ 0.000000] On node 0 totalpages: 256919
<7>[ 0.000000] free_area_init_node: node 0, pgdat c1af1800, node_mem_map c20c9020
<7>[ 0.000000] DMA zone: 32 pages used for memmap
<7>[ 0.000000] DMA zone: 0 pages reserved
<7>[ 0.000000] DMA zone: 3447 pages, LIFO batch:0
<7>[ 0.000000] Normal zone: 1744 pages used for memmap
<7>[ 0.000000] Normal zone: 221486 pages, LIFO batch:31
<7>[ 0.000000] HighMem zone: 237 pages used for memmap
<7>[ 0.000000] HighMem zone: 29973 pages, LIFO batch:7
......
<6>[ 0.000000] Initializing HighMem for node 0 (000377fe:0003ee00)
<6>[ 0.000000] Memory: 1001440k/1030144k available (6484k kernel code, 26236k reserved, 2852k data, 404k init, 120840k highmem)
<6>[ 0.000000] totalram_pages:1001440k Mem:1001440k
<6>[ 0.000000] virtual kernel memory layout:
<6>[ 0.000000] fixmap : 0xfff15000 - 0xfffff000 ( 936 kB)
<6>[ 0.000000] pkmap : 0xff800000 - 0xffc00000 (4096 kB)
<6>[ 0.000000] vmalloc : 0xf7ffe000 - 0xff7fe000 ( 120 MB)
<6>[ 0.000000] lowmem : 0xc0000000 - 0xf77fe000 ( 887 MB)
<6>[ 0.000000] .init : 0xc1b1f000 - 0xc1b84000 ( 404 kB)
<6>[ 0.000000] .data : 0xc185527d - 0xc1b1e484 (2852 kB)
<6>[ 0.000000] .text : 0xc1200000 - 0xc185527d (6484 kB)
......


当不打开高端内存的宏的时候:

CONFIG_NOHIGHMEM=y
# CONFIG_HIGHMEM4G is not set
# CONFIG_HIGHMEM64G is not set
# CONFIG_HIGHMEM is not set



# cat /proc/meminfo
MemTotal: 892364 kB

相关log:

<6>[ 0.000000] last_pfn = 0x3ee00 max_arch_pfn = 0x100000
<6>[ 0.000000] setup_arch: max_pfn:0x3ee00, 1006Mb
<6>[ 0.000000] highmem_pfn_init: ------1006Mb, MAXMEM:895Mb
<6>[ 0.000000] highmem_pfn_init: ------257536, highmem_pages:-1, MAXMEM:229139
<4>[ 0.000000] Warning only 895MB will be used.
<4>[ 0.000000] Use a HIGHMEM enabled kernel.
<7>[ 0.000000] initial memory mapped : 0 - 02400000
<6>[ 0.000000] init_memory_mapping: 0000000000000000-0000000037f13000
<7>[ 0.000000] 0000000000 - 0000400000 page 4k
<7>[ 0.000000] 0000400000 - 0037c00000 page 2M
<7>[ 0.000000] 0037c00000 - 0037f13000 page 4k
<7>[ 0.000000] kernel direct mapping tables up to 37f13000 @ 7000-c000
<6>[ 0.000000] RAMDISK: 07dfa000 - 08000000
<5>[ 0.000000] 895MB LOWMEM available.
<6>[ 0.000000] mapped low ram: 0 - 37f13000
<6>[ 0.000000] low ram: 0 - 37f13000
<4>[ 0.000000] Zone PFN ranges:
<4>[ 0.000000] DMA 0x00000001 -> 0x00001000
<4>[ 0.000000] Normal 0x00001000 -> 0x00037f13
<4>[ 0.000000] Movable zone start PFN for each node
<4>[ 0.000000] early_node_map[3] active PFN ranges
<4>[ 0.000000] 0: 0x00000001 -> 0x00000098
<4>[ 0.000000] 0: 0x00000100 -> 0x00000e00
<4>[ 0.000000] 0: 0x00001000 -> 0x00037f13
<7>[ 0.000000] On node 0 totalpages: 228522
<7>[ 0.000000] free_area_init_node: node 0, pgdat c1af1780, node_mem_map c20c1020
<7>[ 0.000000] DMA zone: 32 pages used for memmap
<7>[ 0.000000] DMA zone: 0 pages reserved
<7>[ 0.000000] DMA zone: 3447 pages, LIFO batch:0
<7>[ 0.000000] Normal zone: 1759 pages used for memmap
<7>[ 0.000000] Normal zone: 223284 pages, LIFO batch:31
......
<6>[ 0.000000] Memory: 888788k/916556k available (6483k kernel code, 25300k reserved, 2852k data, 400k init, 0k highmem)
<6>[ 0.000000] totalram_pages:888788k Mem:888788k
<6>[ 0.000000] virtual kernel memory layout:
<6>[ 0.000000] fixmap : 0xfff15000 - 0xfffff000 ( 936 kB)
<6>[ 0.000000] vmalloc : 0xf8713000 - 0xfff13000 ( 120 MB)
<6>[ 0.000000] lowmem : 0xc0000000 - 0xf7f13000 ( 895 MB)
<6>[ 0.000000] .init : 0xc1b1f000 - 0xc1b83000 ( 400 kB)
<6>[ 0.000000] .data : 0xc1854e8d - 0xc1b1e084 (2852 kB)
<6>[ 0.000000] .text : 0xc1200000 - 0xc1854e8d (6483 kB)
......


当不打开高端内存的时候,总内存只有895M,可我的内存是1G的,这是不是以为着我还有128M的内存没有使用呢?

...全文
130 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tgvlcw 2011-09-26
  • 打赏
  • 举报
回复
那是不是当我的内存大于895M的时候,但是我又没有打开高端内存
的选项,那么整个系统中可用的物理内存只有895M,剩下的物理内存由于kernel没
有做映射,所以这段内存系统中就没有用到呢?
tgvlcw 2011-09-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wenxy1 的回复:]

默认情况下:0到3GB是user space, 3GB到4GB是kernel space.
[/Quote]
但是高端内存的选项我没有打开,也就是说系统里没有高端内存,那么剩下的128M,到哪去了呢?
帅得不敢出门 2011-09-24
  • 打赏
  • 举报
回复
ZONE_DMA 0-16MB
ZONE_NORMAL 16MB-896MB
ZONE_HIGHMEM > 896MB
Wenxy1 2011-09-23
  • 打赏
  • 举报
回复
默认情况下:0到3GB是user space, 3GB到4GB是kernel space.

4,465

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧