Linux下内存分配与映射之一
2013-05-05 18:32
176 查看
地址类型:
32位的cpu,共4G空间,其中0-3G属于用户空间地址,3G-4G是内核空间地址。
用户虚拟地址:用户空间程序的地址
物理地址:cpu与内存之间的使用地址
总线地址:外围总线和内存之间的使用地址
内核逻辑地址:内存的部分或全部映射,大多数情况下,它与物理地址仅差一个偏移量。如Kmalloc分配的内存。
内核虚拟地址:内核空间的地址映射到物理地址上,但映射不必是线性的。所有的逻辑地址都是内核虚拟地址,如Vmalloc分配到的地址。
1、内存分配与释放
kmalloc一般用于分配小于128KB的内存。
Vmalloc分配的内存空间是一片连续的虚拟内存,但映射到物理内存却不一定连续。
2、用户态和内核态内存交互
copy_from_user
copy_to_user
access_ok
在访问用户空间的内存时,必须先检查用户控件的指针是否合法。使用access_ok函数。
3、物理地址到虚拟地址的映射
CPU对外设I/O端口物理地址的编址方式分I/O映射方式和内存映射方式。[b]在x86平台上,为外设专门实现了与RAM内存地址不同的一个单独的地址空间I/O方式。而在ARM、MIPS、PowerPC上外设I/O端口具有与内存相同的物理地址。
[/b]
ioremap函数用来将I/O内存资源的物理地址映射到核心地址空间(3G-4G)中。
ioremap取消ipremap所做的映射。
读写I/O的函数包括:
_raw_writeb,_raw_writew,_raw_writel
_raw_readb,_raw_readw,_raw_readl
4、内核空间到用户空间的映射
想在用户空间访问内核地址,可以采用mmap方法。
映射一个设备意味着使用户空间的一段地址关联到设备内存上,这使得如果程序在分配的地址范围内进行读取或者写入,实际上就是对设备的访问。
32位的cpu,共4G空间,其中0-3G属于用户空间地址,3G-4G是内核空间地址。
用户虚拟地址:用户空间程序的地址
物理地址:cpu与内存之间的使用地址
总线地址:外围总线和内存之间的使用地址
内核逻辑地址:内存的部分或全部映射,大多数情况下,它与物理地址仅差一个偏移量。如Kmalloc分配的内存。
内核虚拟地址:内核空间的地址映射到物理地址上,但映射不必是线性的。所有的逻辑地址都是内核虚拟地址,如Vmalloc分配到的地址。
1、内存分配与释放
kmalloc一般用于分配小于128KB的内存。
Vmalloc分配的内存空间是一片连续的虚拟内存,但映射到物理内存却不一定连续。
2、用户态和内核态内存交互
copy_from_user
copy_to_user
access_ok
在访问用户空间的内存时,必须先检查用户控件的指针是否合法。使用access_ok函数。
3、物理地址到虚拟地址的映射
CPU对外设I/O端口物理地址的编址方式分I/O映射方式和内存映射方式。[b]在x86平台上,为外设专门实现了与RAM内存地址不同的一个单独的地址空间I/O方式。而在ARM、MIPS、PowerPC上外设I/O端口具有与内存相同的物理地址。
[/b]
ioremap函数用来将I/O内存资源的物理地址映射到核心地址空间(3G-4G)中。
ioremap取消ipremap所做的映射。
读写I/O的函数包括:
_raw_writeb,_raw_writew,_raw_writel
_raw_readb,_raw_readw,_raw_readl
4、内核空间到用户空间的映射
想在用户空间访问内核地址,可以采用mmap方法。
映射一个设备意味着使用户空间的一段地址关联到设备内存上,这使得如果程序在分配的地址范围内进行读取或者写入,实际上就是对设备的访问。
相关文章推荐
- Linux下内存分配与映射之二
- Linux的内存管理主要分为两部分:物理地址到虚拟地址的映射,内核内存分配管理(主要基于slab)。
- 高端内存映射之vmalloc分配内存中不连续的页--Linux内存管理(十九)
- 内存地址Linux下内存分配与映射之一
- kmalloc分配物理内存与高端内存映射--Linux内存管理(十八)
- Windows xp/Vista/Linux的内核映射以及内存置换算法
- linux 内存分配
- Linux开发--mmap映射/dev/mem内存
- linux高端内存管理之非连续内存区(分配和释放)
- Linux系统的内存分配
- linux不连续页分配和内核映射
- Linux查看内存分配情况的几种方法
- 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现
- Linux驱动修炼之道-内存映射
- Linux内存映射
- 《Linux Device Drivers》第八章 分配内存——note
- Linux开发心得总结3 - brk和sbrk及内存分配函数介绍
- Linux NUMA memory policy(内存分配策略)
- Linux_内存分配中的堆和栈
- linux 常用内存分配函数小结