ZBLOG

我记得说进程有1g的内核空间和3g的应用空间,现在的64位计算机还是这样么

在64位系统上,传统的1:3用户空间与内核空间划分(32位系统的经典模式)已经发生了根本性变化。以下是关键点解析:


1. 32位系统的经典划分(已过时)

  • 3GB用户空间 + 1GB内核空间
    这是x86架构32位Linux的默认配置(通过CONFIG_3GB选项启用),地址空间共4GB(2³²)。内核占用高位的1GB,用户程序使用剩余的3GB。
    问题:内存大于4GB时需PAE扩展,但内核仍受限于1GB地址空间。

2. 64位系统的全新设计

64位架构(如x86_64、ARM64)的地址空间理论上限为2⁶⁴字节(16EB),实际实现中通常使用48位或57位地址(分别对应256TB和128PB有效寻址)。

用户态与内核态的现代划分

  • 典型布局(以x86_64/Linux为例)

    • 用户空间:低地址区域(0x0000000000000000 ~ 0x00007FFFFFFFFFFF),共128TB。
    • 内核空间:高地址区域(0xFFFF800000000000 ~ 0xFFFFFFFFFFFFFFFF),同样128TB。
    • 中间区域:未使用或保留给特殊用途(如规范地址空洞)。
  • 优势

    • 内核不再受限于固定比例:可动态管理海量物理内存。
    • 隔离性更强:用户程序无法直接访问内核地址。
    • 支持更多硬件特性:如DMA直接访问高内存。

3. 为什么不再用“1G/3G”比例?

  • 地址空间极大丰富:无需像32位时代那样斤斤计较分区比例。
  • 灵活性需求:现代服务器可能需分配数百GB内存给单一进程(如数据库)。
  • 安全考虑:通过硬件级权限隔离(如Intel VT-x/SMAP)替代固定分区。

4. 查看当前系统的实际布局

在Linux系统中可通过以下命令观察:

# 查看内核地址范围
cat /proc/kallsyms | grep _stext | head -1

# 检查CPU支持的地址位数
grep "address sizes" /proc/cpuinfo

总结

  • ✅ 64位系统彻底抛弃了32位的“1G/3G”模式,改为更灵活的独立分区。
  • ✅ 用户和内核各自拥有庞大的私有地址池,互不干扰。
  • ✅ 实际物理内存管理通过页表映射完成,与地址空间解耦。

若有具体场景需求(如HugePage配置或DPDK开发),可进一步探讨细节!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=8295

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?