Linux中关于MMAPandDMA的知识总结 精品资料

Linux中关于MMAPandDMA的知识总结 精品资料

ID:22683989

大小:99.00 KB

页数:23页

发布时间:2023-10-19 00:48:01

资源描述:

3项技术:1,mmap系统调用可以实现将设备内存映射到用户进程的地址空间。2,使用get_user_pages,可以把用户空间内存映射到内核中。3,DMA的I/O操作,使得外设具有直接访问系统内存的能力。-------------内存管理内核用来管理内存的数据结构---------地址内型Linux是一个虚拟内存系统,即用户程序使用的地址与硬件使用的物理地址是不等同的。虚拟内存引入了一个间接层,使得许多操作成为可能:*有了虚拟内存,系统中运行的程序可以分配比物理内存更多的内存。*虚拟地址还能让程序在进程的地址空间内|使用更多的技巧,包括将程序的内存映射到设备内存上。地址内型列表*用户虚拟地址每个进程都有自己的虚拟地址空间。*物理地址处理器访问系统内存时使用的地址。*总线地址在外围总线和内存之间使用。MMU可以实现总线和主内存之间的重新映射。          当设置DMA操作时,编写MMU相关的代码是一个必需的步骤。*内核逻辑地址          内核逻辑地址组成了内核的常规地址空间,该地址映射了部分(或全部)内存,          并经常被视为物理地址。在大多数体系架构中,逻辑地址与其相关联的物理地址          |的不同,仅仅在于它们之间存在一个固定的偏移量。kmalloc返回的内存就是          内核逻辑地址。*内核虚拟地址          内核虚拟地址与逻辑地址相同之处在于,都将内核空间的地址映射到物理地址上。          不同之处在于,内核虚拟地址与物理地址的映射不是线性的和一对一的。          vmalloc返回一个虚拟地址,kmap函数也返回一个虚拟地址。------------------物理地址和页

1物理地址被分为离散的单元,称之为页。系统内部许多对内存的操作都是基于单个页的。大多数系|统都使用每页4096个字节,PAGE_SIZE给出指定体系架构下的页大小。观察内存地址,无论是虚拟的还是物理的,它们都被分为页号和一个页内的偏移量。如果每页4096个字节,那么最后的12位就是偏移量,剩余的高位则指定页号。页帧数:将除去偏移量的剩余位移到右端,称该结果为页帧数。-------------------高端与低端内存内核(在x86架构中)将4GB的虚拟地址空间分割为用户空间和内核空间。一个典型的分割是将3GB分配给用户空间,1GB分配给内核空间。占用内核地址空间最大的部分是物理内|存的虚拟映射,内核无法直接操作没有映射到内核地址空间的内存。低端内存:        只有内存的低端部分拥有逻辑地址。内核的数据结构必须放置在低端内存中。高端内存:        除去低端内存的剩余部分没有逻辑地址。它们处于内核虚拟地址之上。--------------------内存映射和页结构内核使用逻辑地址来引用物理内存中的页。为解决在高端内存中无法使用逻辑地址的问题,内核中处理内存的函数趋向于使用指向page结构的指针。page结构用来保存内核需要知道的所有物理内存信息,对系统中的每|个物理页,都有一个page结构相对应。-----page结构的几个成员:atomic_tcount;对该页的访问计数。void*virtual;如果页面被映射,则指向页的内核虚拟地址;               如果未被映射,则为NULL。               低端内存页总是被映射,而高端内存页通常不被映射。unsignedlongflags;描述页状态的一系列标志。

2                     PG_locked表示内存中的页已经被锁住,                     而PG_|reserved表示禁止内存管理系统访问该页。-----内核维护了一个或者多个page结构的数组,用来跟踪系统中的物理内存。-----有一些函数和宏用来在page结构指针与虚拟地址之间进行转换:structpage*virt_to_page(void*kaddr);将内核逻辑地址转换为响应的page结构指针。structpage*pfn_to_page(intpfn);针对给定的页帧号,返回page结构指针。void*page_address(structpage*page);如果地址存在的话,则返回页的内核虚拟地址。void*kmap(structpage*page);为系统中的页返回内核虚拟地址。对于低端内存页,它只返回页的逻辑地址;对于高端内存页,kmap在专用的内核地址空间创建特殊的映射。voidkunmap(structpage*page);释放由kmap创建的映射。void*kmap_atomic(structpage*page,enumkm_typetype);voidkunmap_atomic(void*addr,enumkm_|typetype);,是kmap的高性能版本。-------页表在任何现代的系统中,处理器必须使用某种机制,将虚拟地址转化为响应的物理地址,这种机制成为页表。-------虚拟内存区虚拟内存区(VMA)用于管理进程地址空间中不同区域的内核数据结构。可以将其描述为“拥有自身属性的内存对象”。进程的内存映射包含下面这些区域:*可执行代码区域*多个数据区:初始化数据,非初始化数据(BSS),程序堆栈。*与每个活动的内存映射对应的区域

3#cat/pro|c/1/maps可以了解进程的内存区域。/proc/self始终指向当前进程。每行都是用下面的形式表示的:start-endpermoffsetmajor:minorinodeimage在/proc/*/maps中的每个成员(除映像名外)都与vm_area_struct结构中的一个成员对应:startend该内存区域的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1、本文档共23页,下载后即可获取全部内容。
2、此文档《Linux中关于MMAPandDMA的知识总结 精品资料》由用户(158****5147)提供并上传付费之前 请先通过免费阅读内容等途径辨别内容,本站所有文档下载所得的收益全部归上传人(卖家)所有:如有侵权或不适当内容,请进行举报或申诉。
3、所有的PPT和DOC文档都被视为“模板”允许上传人保留音节日灵结构的情况下删减部份的内容,下裁前须认直查看,确认无误后再购买。
4、欧宝真人·(中国)科技有限公司网仅提供信息存储空间,仅对用户上传内容的表现方式做保护外理,无法对各卖家所售文档的直实性,完整性,准确性以及专业性等问题提供审核和保证,请谨慎购买。
5、本站文档的总页数,文档格式和文档大小以系统显示为准(内容中显示页数不一定正确),网站客服只以系统显示页数,文件格式,文档大小作为仲裁依据。

文档提供

发布者:158****5147

上传时间:2023-10-16 17:18:22

认证主体:齐**(个人认证)

IP归属:湖北省 武汉

相关标签

文档提供

发布者:158****5147

上传时间:2023-10-16 17:18:22

认证主体:齐**(个人认证)

IP归属:湖北省 武汉

相关标签