1、内存和I/O的硬件机制,主要涉及内存空间、I/O空间和MMU
1.1 I/O空间和内存空间
X86处理器中存在I/O空间的概念
ARM和Power PC并不提供I/O空间,I/O空间挂接在内存空间,通过访问内存空间可以访问I/O空间
1.2 内存管理单元MMU
TLB:转换旁缓存
TTW:即转换漫游表
2、linux的内存管理、内存区域的分布、常规内存和高端内存的区别
在3~4GB之间的内核空间中,从低地址到高地址依次为:
物理内存映射区——隔离带——vmalloc虚拟内存分配器——隔离带——高端内存映射区——专用页面映射区——保留区
(在物理内存和高端内存之间为虚内存分配区(VMALLOC_START~VMALLOC_END),用于vmalloc函数)
图示:
3、linux内存存取的方法,主要涉及内存动态申请,以及通过虚拟地址存取物理地址的方法
3.1 用户空间内存动态申请
malloc()和free()成对出现
3.2 内核空间内存动态申请
linux内核空间中申请内存的3个函数:
kmalloc() :申请的内存位于物理映射区,而且在物理上也是连续的,他们与真实的物理地址只有一个固定的偏移
_ _get_free_pages():和kmalloc函数一样
vmalloc():在虚拟的内存空间给出一块连续的内存空区,实质上,这这片连续的虚拟内存在物理内存中并不一定连续
(1)、kmalloc()申请、kfree()释放
(2)、_ _get_free_pages()
(3)、vmalloc()申请 、vfree()释放
(4)、slab 与内存池
!创建slab缓存:kmem_cache_create()用于创建一个slab缓存
!分配slab缓存:kmem_cache_alloc()
!释放slab缓存:kmem_cache_free()
!收回slab缓存:kmem_cache_destroy()
!!创建内存池:mempool_create()
!!分配和回收对象:mempool_alloc()和 mempool_free()
!!回收内存池:mempool_destroy()
3.3 虚拟地址与物理地址关系
4、设备I/O内存和I/O端口的访问流程
5、设备驱动中的DMA与CACHE一致性问题 以及DMA的编程方法