Linux 内存与I/O访问

Linux 内存分类:
由于复杂的内存管理功能,内存的概念也相对复杂,有常规内存,高端内存,虚拟地址,逻辑地址,总线地址,物理地址,I/O内存,设备内存,预留内存等。
高级处理器一般会提供MMU(内存管理单元),MMU具有虚拟地址和物理地址转换,内存访问权限保护等功能,为了理解MMU操作原理,需要明白以下几点概念:
TLB:转换旁路缓存,MMU的核心部件,缓存少量虚拟地址和物理地址的映射,是转换表的Cache。
TTW:转换表漫游,当TLB没有缓存相应地址映射时,需要通过对内存转换表的访问获取映射关系,然后存入TLB中。
ARM访问内存过程:
当ARM处理器访问存储器时,MMU首先查找TLB的虚拟地址表(如果ARM支持分来的数据TLB(DTLB)和指令TLB(ITLB),则除了取指令使用ITLB外,其他都使用DTLB),若TLB没有虚拟地址入口,则转换表遍历硬件并从存放在存储器的转换表中获取地址访问信息和访问权限(TTW),同时将信息放入TLB(没有使用的入口或者替换一个存在的入口),之后,在TLB条目的控制信息的控制下,当访问权限允许时,对真实物理地址的访问将在Cache和内存中发生。
Linux软件层的分析:
在2.6.11前,linux内核硬件无关层提供了三级页表PGD、PMD和PME,从2.6.11开始,为配合64系统,使用四级页表,即PGD,PUD,PMD,PME(注意这仅仅是软件的一种抽象,实际硬件的页表数可能少于4)。
Linux内存管理:
对于包含MMU的处理器,Linux提供了复杂的内存管理系统,使得进程所能访问的空间达到4GB。
在Linux系统中,0~3G通常为用户空间,3~4G为内核空间。
1G内核地址空间被划分为物理内存映射区,虚拟内存分配区,高端页面映射区,专用页面映射区和系统保留映射区这几个区域。

Linux在ARM下的内存分配:
详细信息可阅读linux-xx(版本)\Documentation\arm\memroy.txt.
ffff0000~ ffff0fff ,CPU vector page.即向量表的地址;
ffc00000~fffeffff,DMA memory mapping region,DMA内存映射区域,dma_alloc_xxx()族函数把DMA映射到这一区域;
VMALLOC_START~VMALLOC_END-1 vmalloc() / ioremap() space.这段区域是vmalloc和ioremap区域,这个区域是可配置的,通过指定vmalloc= 这个启动参数指定;
PAGE_OFFSET~high_memory-1,这段是DMA和正常区域的映射区域;
TASK_SIZE~PAGE_OFFSET-1 内核模块区域;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值