加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

处理UNIX,Linux和Windows的内存限制和地址空间

发布时间:2020-12-16 01:47:41 所属栏目:安全 来源:网络整理
导读:UNIX,Linux和Windows中单个进程的最大内存量是多少?怎么计算? 4 GB RAM的用户地址空间和内核地址空间是多少? 解决方法 4 GB RAM的用户地址空间和内核地址空间是多少? 一个过程的地址空间分为两部分, 用户空间:在标准32位x86_64架构上,最大可寻址内存为4
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的性能,同时出现了如何通过操作系统限制有效管理它的问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读