当前位置: 技术问答>linux和unix
内存管理的几点疑惑,请指教。
来源: 互联网 发布时间:2016-05-05
本文导语: 都说linux内核占用0xc0000000以上的空间,即3G~4G处,而且0xc0000000处开始是物理内存的影射,比如物理内存大小是64M,那么0xc0000000到0xc0000000+64M处是影射的物理内存,而且内核中确实也有全局变量high_memory来保存物理内存...
都说linux内核占用0xc0000000以上的空间,即3G~4G处,而且0xc0000000处开始是物理内存的影射,比如物理内存大小是64M,那么0xc0000000到0xc0000000+64M处是影射的物理内存,而且内核中确实也有全局变量high_memory来保存物理内存上限所对应的虚地址。那么有两个疑惑了:
(1)对于物理内存大于1G的怎么办?你一共才1G的虚地址空间,怎么影射超过1G的内存?
(2)对于booter中启动参数带mem=..的来说,high_memory包含保留内存吗?比如,物理内存大小是128M,启动的时候用选项mem=64M,那么high_memory为多少?
(1)对于物理内存大于1G的怎么办?你一共才1G的虚地址空间,怎么影射超过1G的内存?
(2)对于booter中启动参数带mem=..的来说,high_memory包含保留内存吗?比如,物理内存大小是128M,启动的时候用选项mem=64M,那么high_memory为多少?
|
通过PAE,32bit的X86 CPU可以访问到64GB内存
》对于物理内存大于1G的怎么办?你一共才1G的虚地址空间,怎么影射超过1G的内存?
准确的说应该是大于896MB的怎么办。
高于896MB的内存,Linux把它们作为高端内存,这些内存在kernel初始化时并没有映射到页表上。
Kernel是保留内核空间那1GB的高128MB用于临时映射这些高端内存,所以,如果要访问这些高端内存,你必须要将它们映射到那个保留128MB中。
》对于物理内存大于1G的怎么办?你一共才1G的虚地址空间,怎么影射超过1G的内存?
准确的说应该是大于896MB的怎么办。
高于896MB的内存,Linux把它们作为高端内存,这些内存在kernel初始化时并没有映射到页表上。
Kernel是保留内核空间那1GB的高128MB用于临时映射这些高端内存,所以,如果要访问这些高端内存,你必须要将它们映射到那个保留128MB中。
|
对于 2) 因为你的物理内存才128M, 所以没有所谓的高端内存