Chinaunix首页 | 论坛 | 博客

Go

  • 博客访问: 227620
  • 博文数量: 67
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 783
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-12 16:29
文章分类

全部博文(67)

文章存档

2015年(1)

2014年(47)

2013年(19)

我的朋友

分类: LINUX

2014-03-21 10:06:17

原创:kylin_zeng http://blog.chinaunix.net/uid/23795897.html
一、
1、如果没有mmu,直接会使用物理地址,否则就会被mmu截获,因而使用虚拟地址。
2、分配小于128Kb的内存:kmalloc和kfree. 线性连续的虚拟地址 且 物理地址是连续的。
3、分配大块内存。get_zeroed_page,//返回单个的,零填充的页。
4、__get_free_pages;//获取整页的内存。
5、free_pages//释放面向页分配的函数。  
以上物理内存都是连续的。

6、如要申请一片连续的虚拟内存,到时物理内存不是连续的。
vmalloc; vmalloc_user; vfree;

二、io端口到虚拟地址的映射。
1、外设的io内存资源的物理地址是已知的。由硬件的设计决定。linux的驱动程序不能直接通过物理地址访问i/o内存资源,而必须将物理地址映射到内核虚拟地址空间。
2、采用静态映射。arm中使用内存管理单元mmu实现虚拟地址到实际物理地址的映射,mmu通过查表映射。页表位于系统内存中。页表每一项对应一个虚拟地址到物理地址的映射。
3、动态映射:ioremap,将i/o内存资源的物理地址映射到内核虚拟地址空间中。iounmap//取消。

阅读(1271) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~