linux.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux

vmalloc.c1.功能与原理:slab分配器分配内存,用这些方法得到的内存在物理地址上都是连续的,然而,有些时候,每次请求内存时,系统都分配物理地址连续的内存块是不合适的,可以利用小块内存“连接”成大块可使用的内存.这在操作系统设计中也被称为 “内存拼接”,显然,内存拼接在需要较大内存,而内存访问相比之下不是很频繁的情况下是比较有效的.在linux内核中用来管理内存拼接的接口是vmalloc/vfree.用vmalloc分配得到的内存在线性地址是平滑的,但是物理地址上是非连续的.2.主要函数,功能及流程图:(1)__vmalloc ()函数【1】函数功能:分配虚拟内存连续的页面【2】流程图:(2)get_vm_area()函数【1】函数功能:该函数负责分配一个合适的vm结构并将其链入到vmlist中【2】流程图:(3)vfree()函数【1】函数功能:从vmlist中释放vm使其的空间可用。【2】流程图:(4)vmalloc_area_pages()函数【1】函数功能:该函数实际建立起了非连续内存区到物理页面的映射,即分配一个个单独的页,并把这些单独的页放到相应的页目录项中【2】流程图:(5)free_area_pte()函数【1】函数功能:释放页表中的表项pte分配所有页框(6)free_area_pmd()函数【1】函数功能:释放页中间目录(pmd映射)(7)alloc_area_pte()函数【1】函数功能:为页表中的表项pte分配所有页框(页表页建立映射)(8)alloc_area_pmd()函数【1】函数功能:创建页中间目录映射(9)vmfree_area_pages()函数【1】函数功能:用来断开vm所在线性地址所对应的映射关系(10)vread(),vwrite()函数【1】函数功能:读写调换页面3.函数之间内部关系vfree、vmfree_area_pages、free_area_pte、free_area_pmd之间的关系流程图:vmalloc_area_pages()、alloc_area_pmd()、alloc_area_pte()之间的关系流程图:memory.c1.功能与原理:提供了对虚拟内存操作的若干函数,其中包括对虚拟页的复制、新建页表、清除页表、处理缺页中断等等。2.主要函数、功能及流程图:(1)copy_cow_page()函数【1】函数功能:提供复制页面数据功能的函数(2)__free_pte()函数【1】函数功能:提供将页面数据释放功能的函数(3)free_one_pgd()函数、free_one_pmd()函数、free_pte()函数【1】函数功能:释放虚拟中内存所对应的页映射关系【2】流程图:(4)check_pgt_cache()函数【1】函数功能:清理页表的缓存(5)clear_page_tables()函数【1】函数功能:释放一个进程指定范围内的页表,以及关联的pmd,对应的pgd entry被清空,pgd本身没有被释放.至于页表中是否还有未断开影射的物理页面,此函数未做检查【2】流程图:(6)copy_page_range()函数【1】函数功能:该函数的主要功能是将某个任务或进程的vma块复制给另一个任务或进程。其工作机制是循环调用copy_pmd_range将vma块中的所有虚拟空间复制到对应的虚拟空间中。在做复制之前必须确保新任务对应的被复制的虚拟空间中必须都为零。copy_page_range按dup_mmap()-copy_mm()-do_fork()的顺序被调用以上三个函数均kernel/fork.c中。当进程被创建的时候需要从父进程处复制所有的虚拟空间 copy_page_range完成的就是这个任务。 【2】流程图:(7)forget_pte()函数【1】函数功能:判断页面是否为空。(8)zap_pte_range()函数【1】函数功能:该函数的作用是将在pmd中从虚拟地址address开始长度为size的内存块通过循环调用pte_clear将其页表项清零调用free_pte将所含空间中的物理内存或交换空间中的虚存页释放掉。(9)zap_pmd_range()函数【1】函数功能:函数结构与zap_pte_range类似通过调用zap_pte_range完成对所有落在address到 address+size区间中的所有pte的清零工作。zap_pmd_range至多清除4M空间的物理内存。(10)zap_page_range()函数【1】函数功能:清除指定范围的用户页面函数结构与前两个函数类似。将任务从address开始到address+size长度内的所有对应的 pmd都清零。zap_page_range的主要功能是在进行内存收缩、释放内存、退出虚存映射或

文档评论(0)

juhui05 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档