- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
3项技术:
1,mmap系统调用可以实现将设备内存映射到用户进程的地址空间。
2,使用get_user_pages,可以把用户空间内存映射到内核中。
3,DMA的I/O操作,使得外设具有直接访问系统内存的能力。
内存管理
内核用来管理内存的数据结构
地址内型
Linux是一个虚拟内存系统,即用户程序使用的地址与硬件使用的物理地址是不等同的。
虚拟内存引入了一个间接层,使得许多操作成为可能:
*有了虚拟内存,系统中运行的程序可以分配比物理内存更多的内存。
*虚拟地址还能让程序在进程的地址空间内使用更多的技巧,包括将程序的内存映射到设备内存上。
地址内型列表
*用户虚拟地址每个进程都有自己的虚拟地址空间。
*物理地址处理器访问系统内存时使用的地址。
*总线地址在外围总线和内存之间使用。MMU可以实现总线和主内存之间的重新映射。
??????????当设置DMA操作时,编写MMU相关的代码是一个必需的步骤。
*内核逻辑地址
??????????内核逻辑地址组成了内核的常规地址空间,该地址映射了部分(或全部)内存,
??????????并经常被视为物理地址。在大多数体系架构中,逻辑地址与其相关联的物理地址
??????????的不同,仅仅在于它们之间存在一个固定的偏移量。kmalloc返回的内存就是
??????????内核逻辑地址。
*内核虚拟地址
??????????内核虚拟地址与逻辑地址相同之处在于,都将内核空间的地址映射到物理地址上。
??????????不同之处在于,内核虚拟地址与物理地址的映射不是线性的和一对一的。
??????????vmalloc返回一个虚拟地址,kmap函数也返回一个虚拟地址。
物理地址和页
物理地址被分为离散的单元,称之为页。
系统内部许多对内存的操作都是基于单个页的。
大多数系统都使用每页4096个字节,PAGE_SIZEasm/page.h给出指定体系架构下的页大小。
观察内存地址,无论是虚拟的还是物理的,它们都被分为页号和一个页内的偏移量。
如果每页4096个字节,那么最后的12位就是偏移量,剩余的高位则指定页号。
页帧数:将除去偏移量的剩余位移到右端,称该结果为页帧数。
高端与低端内存
内核(在x86架构中)将4GB的虚拟地址空间分割为用户空间和内核空间。
一个典型的分割是将3GB分配给用户空间,1GB分配给内核空间。
占用内核地址空间最大的部分是物理内存的虚拟映射,
内核无法直接操作没有映射到内核地址空间的内存。
低端内存:
????????只有内存的低端部分拥有逻辑地址。内核的数据结构必须放置在低端内存中。
高端内存:
????????除去低端内存的剩余部分没有逻辑地址。它们处于内核虚拟地址之上。
内存映射和页结构
内核使用逻辑地址来引用物理内存中的页。
为解决在高端内存中无法使用逻辑地址的问题,内核中处理内存的函数趋向于使用
指向page结构的指针linux/mm.h。
page结构用来保存内核需要知道的所有物理内存信息,对系统中的每个物理页,
都有一个page结构相对应。
page结构的几个成员:
atomic_tcount;对该页的访问计数。
void*virtual;如果页面被映射,则指向页的内核虚拟地址;
???????????????如果未被映射,则为NULL。
???????????????低端内存页总是被映射,而高端内存页通常不被映射。
unsignedlongflags;描述页状态的一系列标志。
?????????????????????PG_locked表示内存中的页已经被锁住,
?????????????????????而PG_reserved表示禁止内存管理系统访问该页。
内核维护了一个或者多个page结构的数组,用来跟踪系统中的物理内存。
有一些函数和宏用来在page结构指针与虚拟地址之间进行转换:
structpage*virt_to_page(void*kaddr);asm/page.h
将内核逻辑地址转换为响应的page结构指针。
structpage*pfn_to_page(intpfn);
针对给定的页帧号,返回page结构指针。
void*page_address(structpage*page);linux/mm.h
如果地址存在的话,则返回页的内核虚拟地址。
void*kmap(structpage*page);linux/highmem.h
为系统中的页返回内核虚拟地址。
对于低端内存页,它只返回页的逻辑地址;
对于高端内存页,kmap在专用的内核地址空间创建特殊的映射。
voidkunmap(structpage*page);
释放由kmap
最近下载
- 人流健康宣教ppt课件.pptx VIP
- 国开一网一 电子商务概论 实践任务(B2B电子商务网站调研报告).doc
- 工厂电工班安全培训课件.pptx VIP
- 《干粉灭火装置技术规程》CECS322:2012.docx
- (一诊)绵阳市2023级高三第一次诊断考试物理试卷A卷(含答案).docx
- 正和岛入岛申请表(更新版20141022).docx VIP
- 第二单元(知识清单)-2023-2024学年四年级语文上册单元速记·巧练(统编版).docx VIP
- DL_T 793.7-2022 发电设备可靠性评价规程 第7部分:光伏发电设备.docx VIP
- 整理超级个人简历模板(修改完后别忘了生成pdf再打印).doc VIP
- 2024智慧仓储解决方案[48页PPT].pptx VIP
有哪些信誉好的足球投注网站
文档评论(0)