免费注册 查看新帖 |

Chinaunix

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

mips 地址空间 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-04 16:10 |只看该作者 |倒序浏览
关于地址空间:
我们知道,mips cpu有一个地址空间的描述,jz4740也有一个地址空间的map,这两者有什么区别与联系呢?
下面所讲的地址,都是程序地址。mips的程序地址和物理地址不会相等,但对于kseg0和kseg1虚拟地址和物理地址对应起来很方便。
mips cpu有用户模式与特权模式,在用户模式下,地址最高位为1的任何程序都会导致cpu的一个自陷。有些指令在用户态也会异常。
mips cpu:
0x00000000 ------- 0x80000000(2G)    user space, kuseg
0x80000000 ------- 0xa0000000(512M)    unmapped cached, kseg0
0x80000000 ------- 0xc0000000(512M)   unmapped uncached, kseg1
0xc0000000 ------- 0xffffffff(1G)    Mapped, kseg2
kuseg:用户态可见地址,在有mmu的机器中,这些地址将一概被转换。除非mmu已经被设置好,否则不应该使用这些地址。
kseg0:该区域的地址,几乎总要通过高速缓存来取,所以在告诉缓存适当初始化以前,不应该使用。这个区域在有MMU的系统中用来存放操作系统的核心。
              该区域地址通过把最高位清零来映射到物理地址。低512M.
kseg1:系统重启的入口点0xbfc00000房子这个区域。入口点相应的物理地址是0x1fc00000,这是什么意思?所以我们需要这个区域来存取系统初始的rom,大多数
             人也把该区域用作IO寄存器空间。该区域地址通过把最高3位清零来映射到物理地址。低512M.
kseg2:该区域只能在核心态下使用,并且要经过MMU的转换。在MMU被设置之前,不要使用。可以看出,这快区域被用来存放操作系统。
kseg0,kseg1和物理地址有非常简单的映射关系,不需要mmu转换。
程序地址就是我们送给cpu的指令中所使用的地址。我们一开始会在程序地址的0xbfc00000处,但这个地址会被cpu映射到物理地址的0x1fc00000处。
也就是说最后cpu的地址总线送出去的其实是0x1fc00000这个地址,而我们在start.S中使用的是0xbfc00000这个地址。
这个地址属于kseg2,可以直接在核心态下使用,不会被mmu转换。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/65427/showart_1073195.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP