当前位置: 技术问答>linux和unix
内存的物理地址最低总是从0开始的吗?
来源: 互联网 发布时间:2016-08-20
本文导语: 如题, 看到一本书上说内存的物理地址最低总是从0开始,在系统启动时将0---896M低端物理内存直接线性映射到内核线性空间 0xC000_0000+896M处,所以在内核中有 线性地址=物理地址+0xC000_0000 的简单映射。 难道内...
如题,
看到一本书上说内存的物理地址最低总是从0开始,在系统启动时将0---896M低端物理内存直接线性映射到内核线性空间
0xC000_0000+896M处,所以在内核中有 线性地址=物理地址+0xC000_0000 的简单映射。
难道内存的物理地址总是从0开始? 特别是在一些嵌入式系统中也是如些吗?
如果内存的物理地址是从0x3000_0000(1G)开始的,那内核中,线性地址到物理地址间的映射是怎样呢?
谢谢!
看到一本书上说内存的物理地址最低总是从0开始,在系统启动时将0---896M低端物理内存直接线性映射到内核线性空间
0xC000_0000+896M处,所以在内核中有 线性地址=物理地址+0xC000_0000 的简单映射。
难道内存的物理地址总是从0开始? 特别是在一些嵌入式系统中也是如些吗?
如果内存的物理地址是从0x3000_0000(1G)开始的,那内核中,线性地址到物理地址间的映射是怎样呢?
谢谢!
|
嵌入式RISC CPU,load/store 结构的,内存和IO共享相同的地址空间,所以一切都没准
如果内存的物理地址是从0x3000_0000(1G)开始的,那内核中,也是加一个固定偏移,加到0xc0000000
如果内存的物理地址是从0x3000_0000(1G)开始的,那内核中,也是加一个固定偏移,加到0xc0000000
|
你没有完全理解虚拟地址的含义
0xC000_0000是虚拟地址(线性地址),雷打不动,一般情况下都是kernel空间的起始地址(X86,ARM),如果这时候物理内存不是0,自然把这个偏移也要算上了。
物理内存不连续,跟这个没关系,内核启动的时候bootmem分配器会处理空洞。
0xC000_0000是虚拟地址(线性地址),雷打不动,一般情况下都是kernel空间的起始地址(X86,ARM),如果这时候物理内存不是0,自然把这个偏移也要算上了。
物理内存不连续,跟这个没关系,内核启动的时候bootmem分配器会处理空洞。
|
1,PAGE_OFFSET当然可以修改,内核配置里都有这项,这个内核和用户空间比为1:3是前辈们多年前就定下来的,不是特殊情况是不需要修改的。
2,如你说的确有问题了,但是到底内核是为硬件设计的还是硬件为内核设计的,还是内核和硬件要彼此匹配呢?
2,如你说的确有问题了,但是到底内核是为硬件设计的还是硬件为内核设计的,还是内核和硬件要彼此匹配呢?