linux中为什么说进程需要4G空间?而不是5G 6G?

程序猿的救赎 2020-02-27 05:04:31
最近看到"一般情况下,Linux系统中,进程的4GB内存空间被划分成为两个部分------用户空间和内核空间"比较疑惑的是为什么是4g空间呢,难道是32位的?这个是虚拟地址还是物理地址?好困惑,不知道哪位大神能帮忙科普下呢
...全文
804 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
reinstallsys2 2020-03-18
  • 打赏
  • 举报
回复 3
进程的地址空间指的是虚拟地址,也就是即使机器上只插了1GB的内存条,对于每个进程来讲其虚拟地址空间也都是4GB,其中应用程序使用低3GB的空间(每个进程独享自己的3GB),操作系统使用高1GB的空间(共享同一个1G内核空间) 4GB的这个数在硬件上的计算是由寄存器和地址总线的位数得来的,由于x86_32体系中寄存器和地址总线都是32位的,所以可寻址的空间为2^32=4GB,但是如果启用了PAE(Physical Address Extension,物理地址扩展),将地址线从32位扩展到36位,则可以寻址2^36=64GB的地址空间 如果是x86_64架构的计算机上,由于2^64太大表示地址空间太大,所以大部分CPU厂商只使用了64位的寄存器,但并没有使用64位的地址总线而一般是48位,则虚拟地址空间为2^48=256TB,此时Linux的虚拟地址空间的划分方式为对半分,用户空间:128TB,内核空间:128TB,由于内核空间的扩大,所以一般情况下x64的Linux就没有了高端内存区域的概念,所有内存都可以永久映射到内核空间了
Kyph 2020-03-12
  • 打赏
  • 举报
回复
在32位机上,每个进程4G,这是CPU定死的。程序可以使用的一般是低3G,是操作系统内核定死的。至于程序自己在低3G中能用多少,那是程序编程决定的。
哈哈哈,少年 2020-03-07
  • 打赏
  • 举报
回复
并不是说一定要4g,应该是最大4G把。。
Kyph 2020-02-28
  • 打赏
  • 举报
回复
32位CPU平台,提供4G的虚拟地址空间,4G虚拟机地址空间,分为1G内核空间和3G用户空间;所有进程共享1G内核空间,每个进程独自使用自己的3G用户空间
pricks 2020-02-27
  • 打赏
  • 举报
回复
32位的最大空间是4G

4,436

社区成员

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

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