龙芯32bit地址空间

 

  • 虚拟地址的低 2G 空间是不允许直接访问的,需要经过 TLB 映射才能正常工作,所以在处理器上电初期、TLB 没有初始化之前,这部分地址是不能访问的。
  • user代码申请空间,需要到内核态,内核帮助其进程申请内存。
  • Linux 在管理物理内存时只使用 kseg0 的前 256MB (后256MB 映射到 I/O)。
  • kseg0 的 cache 一致性属性是 chaced 的,而 kseg1 的属性是uncached 的。
  • 开始访问 BIOS 的 0x1FE0,0000 这个物理地址需要使用 0xBFC0,0000这个虚拟地址了,因为在处理器上电初期,cache 还没有初始化,我们的访问BIOS 不能经过 cache。因访问设备的 I/O 寄存器需要立即生效,不能去缓存,故 Linux 操作 I/O 是使用 kseg1 的后256MB 去访问。
  • 0x0-0x1000,0000 这部分是直接映射到主存的低 256M 空间的,也就是使用虚拟地址的 0x8000,0000- x9000,0000 (或者 0xa000,0000-0xb000,0000 )就能直接访问到主存的低 256M 空间,因为这个特性,操作系统内核以及 BIOS 解压后的部分就可以直接放到这个部分来执行。
  • kseg2 这部分地址是给内核以及管理态使用的。然而龙芯在 BIOS 内将这部分地址通过 TLB映射到物理地址的0x4000,0000-0x7FFF,FFFF。这样就能使用虚拟地址直接访问PCI 的 MEM 空间。
  • 物理地址的 0x8000,0000-0xFFFF,FFFF 这 2G 空间是映射到主存的 0x0-0x8000,0000 这部分空间的地址 0x8000,0000-0x9000,0000 是重复映射的,目前没有意义。
  • 0x2000,0000-0x3FFF,FFFF(256M)=IO/Process reg  为CPU的内部寄存器/PCI/LPC/UART/SPI/IO等控制器的配置寄存器,需要通过TBL来访问。
  • 当物理内存大于 256MB 时,kseg0 的空间不够用,则需要启用 High Memory 机制,使用 kseg2 的空间,通过 TLB 建立映射去访问。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值