处理UNIX,Linux和Windows的内存限制和地址空间
UNIX,Linux和Windows中单个进程的最大内存量是多少?怎么计算? 4 GB RAM的用户地址空间和内核地址空间是多少?
解决方法
4 GB RAM的用户地址空间和内核地址空间是多少?
一个过程的地址空间分为两部分, 用户空间:在标准32位x86_64架构上,最大可寻址内存为4GB,其中0x00000000到0xbfffffff =(3GB)的地址用于代码,数据段.当用户进程在用户或内核模式下执行时,可以解决该区域. 内核空间:类似地,0xc0000000到0xffffffff =(1GB)的地址用于内核的虚拟地址空间,并且只能在进程在内核模式下执行时才能解决. 在x86上拆分的特定地址空间由PAGE_OFFSET的值决定.参考Linux 3.11.1v page_32_types.h和page_64_types.h,页面偏移定义如下, #define __PAGE_OFFSET _AC(CONFIG_PAGE_OFFSET,UL) 其中Kconfig定义了默认值0xC0000000,也可以使用其他地址分割选项. 同样对于64位, #define __PAGE_OFFSET _AC(0xffff880000000000,UL). 在64位架构上,由于巨大的地址空间,3G / 1G分离不再存在.根据源代码,最新的Linux版本已将上述偏移量作为偏移量. 当我看到我的64位x86_64架构时,32位进程可以拥有整个4GB的用户地址空间,而内核将保持4GB以上的地址范围.有趣的是,在现代64位x86_64 CPU上,并非所有地址线都被启用(或地址总线不够大),无法为我们提供2 ^ 64 = 16艾字节的虚拟地址空间.也许AMD64 / x86架构分别启用48/42低位,导致2 ^ 48 = 256TB / 2 ^ 42 = 4TB的地址空间.现在这确实提高了大量RAM的性能,同时出现了如何通过操作系统限制有效管理它的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |