内存管理之物理地址空间

物理地址是处理器在系统总线上看到的地址。使用精简指令集(Reduced Instruction Set Computer,RISC)的处理器通常只实现一个物理地址空间,外围设备和物理内存使用统一的物理地址空间。

 

程序只能通过虚拟地址访问外设寄存器,内核提供了以下函数来把外设寄存器的物理地址映射到虚拟地址空间:

  • 函数ioremap()把外设寄存器的物理地址映射到内核虚拟地址空间
void *__ioremap(phys_addr_t offset, size_t size, unsigned long flags);
  • 函数io_remap_pfn_range()把外设寄存器的物理地址映射到进程的用户虚拟地址空间
int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,	unsigned long pfn, 
                       unsigned long size, pgprot_t prot);
  • 函数remap_pfn_range()用于把内存的物理页映射到进程的用户虚拟地址空间
int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn, 
                    unsigned long size, pgprot_t prot);

内核提供了函数iounmap()来删除函数ioremap()创建的映射。

void iounmap(void *addr);

 

ARM64架构的实现

ARM64架构定义了两种内存类型:

  • 正常内存(Normal Memory):包括物理内存和只读存储器(ROM)。
  • 设备内存(Device Memory):指分配给外围设备寄存器的物理地址区域。

对于正常内存,可以设置共享属性和缓存属性。共享属性用来定义一个位置是否可以被多个核共享,分为不可共享、内部共享核外部共享。缓存属性用来定义访问时是否通过处理器的缓存。

设备内存的共享属性总是外部共享,缓存属性总是不可缓存(即必须绕过处理器的缓存)。

物理地址宽度

目前ARM64处理器支持的最大物理地址宽度是48位。

寄存器TCR_EL1(Translation Control Register for Exception Level 1,异常级别1的转换控制寄存器)的字段IPS(Intermediate Physical Address Size,中间物理地址长度)控制物理地址的宽度,IPS字段的长度是3位,IPS字段的值和物理地址宽度的对应关系如下:

IPS字段物理地址宽度
00032位
00136位
01040位
01142位
10044位
10148位
11052位

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值