Linux主机中增加一块内存条后,物理地址如何扩展,内核能否区分两片内存芯片?

荒城ideal 2019-04-11 10:50:00
Linux主机原来有8G内存条,新增加一个8G内存条后,物理地址如何扩展,能否通过物理地址来区分当前使用的是哪一个内存条。比如我可能会对两根内存条做一些差异化处理,Linux内核能否区分出这两个内存条?
...全文
502 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
荒城ideal 2019-04-13
  • 打赏
  • 举报
回复
引用 1 楼 雪虎-JL 的回复:
Linux内核是可以区分出这两个内存条的,可以通过用户态的命令查看
$ sudo lshw -short -C memory 或者 dmidecode --type 17

X86 的内存条是通过 PCI总线进行链接的,在 PCI 总线进行枚举的时候
就可以知道每个内存条的地址和大小了,一般不用认为的做特殊的处理,
都是由BIOS 初始化好了之后,PCI读写相应的配置信息后,由内核的内存
管理系统统一进行管理的,也可以在内核启动的时候给内核传入参数预留
内存使用,详细的信息可以到内核的参数文档中进行查看

内核启动后,已经是BIOS封装好了的物理地址,虽然可以看到有两个内存条,但是如何从内存编程的角度来区分现在所使用的page或者物理地址属于哪个内存条呢?
荒城ideal 2019-04-13
  • 打赏
  • 举报
回复
引用 2 楼 sazhufa 的回复:
通过地址是不能知道内存条的,或者即使开发出这个功能,也是特定芯片组相关的。

例如: 两条内存条,BIOS Setup中可以打开或关闭内存条的 “通道交错”模式。

能否通过其他方式获知呢?或者如果关闭了通道交错,可不可以实现通过地址知道是哪根内存条?
sazhufa 2019-04-12
  • 打赏
  • 举报
回复
通过地址是不能知道内存条的,或者即使开发出这个功能,也是特定芯片组相关的。

例如: 两条内存条,BIOS Setup中可以打开或关闭内存条的 “通道交错”模式。
雪虎-JL 2019-04-12
  • 打赏
  • 举报
回复
Linux内核是可以区分出这两个内存条的,可以通过用户态的命令查看
$ sudo lshw -short -C memory 或者 dmidecode --type 17

X86 的内存条是通过 PCI总线进行链接的,在 PCI 总线进行枚举的时候
就可以知道每个内存条的地址和大小了,一般不用认为的做特殊的处理,
都是由BIOS 初始化好了之后,PCI读写相应的配置信息后,由内核的内存
管理系统统一进行管理的,也可以在内核启动的时候给内核传入参数预留
内存使用,详细的信息可以到内核的参数文档中进行查看

4,436

社区成员

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

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