免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7868 | 回复: 20
打印 上一主题 下一主题

关于物理内存地址空间布局的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-03 19:25 |只看该作者 |倒序浏览
1,INTEL CPU好像是独立编址的,内存可以到4G,而io只有64K,读写io有专门的in,out指令   对吧?
2,如果1对的话(以前学校微机原理是是这样的),那么现在的外设比如显卡那么大的RAM不可能只映射到64K的io空间吧?是不是映射到了内存地址空间?这里映射就是物理上直接练到了cpu的内存地址总线上?
3,这样的话系统实际可用的内存不就变小了吗?比如说系统上外设只有一个512M的显卡,这样的话内存最大也就只能到4G-512M了,对不对?因为总共能寻址的就是4G啊,32位的地址总线。
4,是不是32位系统认不到4G内存就是这个道理?
5,但是问题有出来了,现在可以买到单根就4G的内存,这样一根内存插上去就占满了物理地址空间,显卡往哪放啊?


疑惑了好久了,呵呵,希望大家指点一下

论坛徽章:
4
酉鸡
日期:2014-03-21 23:19:50狮子座
日期:2014-08-01 22:11:40酉鸡
日期:2015-01-10 21:31:442015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2011-11-03 20:33 |只看该作者
我也是这么想的,内存条的4G根本用不满, 外设的空间就占去4G的一部分了.

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
3 [报告]
发表于 2011-11-03 20:53 |只看该作者
哈哈,启动的时候BIOS会为 那些设备预留空间的  4G地址空间 不能全部映射到内存 还有用来寻址别的

在物理内存探测的时候会计算出哪些地址是用于内存的,放在E820图里
  1. [    0.000000]  BIOS-provided physical RAM map:  
  2. [    0.000000]  BIOS-e820: 0000000000000000 - 000000000009f000 (usable)  
  3. [    0.000000]  BIOS-e820: 000000000009f000 - 00000000000a0000 (reserved)  
  4. [    0.000000]  BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)  
  5. [    0.000000]  BIOS-e820: 0000000000100000 - 0000000001e00000 (usable)  
  6. [    0.000000]  BIOS-e820: 0000000001e00000 - 0000000001e80040 (reserved)  
  7. [    0.000000]  BIOS-e820: 0000000001e80040 - 000000007bed0000 (usable)  
  8. [    0.000000]  BIOS-e820: 000000007bed0000 - 000000007bed3000 (ACPI NVS)  
  9. [    0.000000]  BIOS-e820: 000000007bed3000 - 000000007bee0000 (ACPI data)  
  10. [    0.000000]  BIOS-e820: 000000007bee0000 - 000000007bf00000 (reserved)  
  11. [    0.000000]  BIOS-e820: 000000007c000000 - 0000000080000000 (reserved)  
  12. [    0.000000]  BIOS-e820: 00000000f0000000 - 00000000f4000000 (reserved)  
  13. [    0.000000]  BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)  
复制代码

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
4 [报告]
发表于 2011-11-03 21:25 |只看该作者
本帖最后由 embeddedlwp 于 2011-11-03 22:12 编辑

cat /proc/iomem  可以看谁占用了地址

给外设的还是给外设,没给你内存那些地址空间,看那个图,usable是可用的,插再大内存也没用!


kernel在启动时 通过0x15中断传递参数E820从BIOS获得E820图,通过调用mach_specific_memory_setup函数将E820图 copy到内核中的struct e820map结构中,find_max_pfn函数从这个结构中获得最大的页帧数  max_pfn


intel 提出了PAE,此时地址线是36位,能寻址64G,此时4G之上的地址总线就不会被占用了!

论坛徽章:
0
5 [报告]
发表于 2011-11-04 12:19 |只看该作者
回复 2# chishanmingshen


    看来咱俩有同样的疑惑,呵呵,初学者估计都想过这个问题

论坛徽章:
0
6 [报告]
发表于 2011-11-04 12:23 |只看该作者
回复 4# embeddedlwp


    先谢谢你了,好多概念我还没看懂,我先看下内核关于内存管理的书,然后再讨论 呵呵!

论坛徽章:
0
7 [报告]
发表于 2011-11-04 14:20 |只看该作者
高端内存可以使用固定映射和永久映射两种方式访问,所以只要APCI里配置正确,4G内存都是可以使用的,只不过不能同时使用

论坛徽章:
0
8 [报告]
发表于 2011-11-04 14:30 |只看该作者
内存条属于存储设备,它的4G的存储都可以被使用到;
地址空间又是另外一个概念,可以使用同一个地址空间在不同的时间,映射到不同的物理存储设备

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
9 [报告]
发表于 2011-11-06 18:56 |只看该作者
回复 8# wangjianchangdx


    地址空间保留的部分应该是不能改的吧。如果是4G的内存条,那么如果有0.5G地址空间是保留的,那么只有3.5G是可寻址到的,那么即使通过高端内存也应该只能访问其中3.5G(不同时间),我认为!
    等高手!

论坛徽章:
0
10 [报告]
发表于 2011-11-07 10:28 |只看该作者
  1. [    0.000000]  BIOS-e820: 0000000000000000 - 000000000009f000 (usable)  
  2. [    0.000000]  BIOS-e820: 000000000009f000 - 00000000000a0000 (reserved)
复制代码
e820里的start和end都是64位的,表明e820可以支持超过4G的物理内存,这里指示的也是物理内存的状态;当然,由于32位总线只能寻址4G的地址,所以如果超过4G的物理内存,只有在32位模式下启用PAE,或者使用64位内核;

初始化建立页表时,直接对低端内存建立直接映射,没有理会物理内存状态;物理内存状态(usable, reserved等)信息最初存放在e820.map中,之后如果配置Bootmem Allocator的话,会dump到Bootmem Allocator的位图中,之后再dump到zone allocator的struct page描述附中,表明该页是否可用。但也仅仅是不可用而已,并非不能寻址到。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP