匿名页的反向映射

在这里插入图片描述

反向映射的建立过程

当通过fork创建子进程的时候,在这个过程中会建立反向映射的基础结构,具体在
kernel_clone -》 copy_mm -》 dup_mm -》 dup_mmap中:

  1. dup_mmap中会将父进程中的每一个vma 复制一份给子进程,此处只是举例说明复制一个vma的情况,如上图中子进程的vma
  2. anon_vma_clone中创建子进程的avc01,它同时与父进程的av0和子进程的vma建立关联,即加入子进程的vma链表,同时连入父进程av0的红黑树,它是作为子进程的一个代表加入到父进程av0的红黑树,将来父进程查找反向映射时,将遍历这颗红黑树,进而获得vma,而子进程进行反向映射时,仅仅遍历自己av的红黑树即可,这样提升了效率;
  3. 通过anon_vma_alloc为子进程分配自己的av1,它与父进程的av0形成父子关系;
  4. 通过anon_vma_chain_alloc为子进程分配自己的avc1;
  5. 通过anon_vma_chain_link建立子进程av1, avc1, vma的关联

注:如上av为strucdt anon_vma, avc为anon_vma_chain

反向映射的查找过程

  1. 通过page的mapping字段找到av;
  2. 遍历av的红黑树,找到所有的avc;
  3. 通过avc找到对应的vma,并通过vma找到vma_start,及vm_mm进而找到pgd;
  4. 通过page->index和vma_start得到虚拟页的起始地址;
  5. 通过虚拟页的起始地址和pgd找到pte

参考文档

《Linux内核深度解析》
《深入理解Linux内核反向映射机制》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cat混沌映射是一种非线性动力学系统,它可以生成一系列看似随机的数值序列,具有很高的复杂性和不确定性。反向学习是指从输出结果反向推导出输入数据的过程。 在Cat混沌映射反向学习中,我们可以利用反向传播算法来实现。首先,我们需要设计一个神经网络模型,将Cat混沌映射的输出作为模型的输入,将原始数据作为模型的输出,并通过反向传播算法来更新模型的参数,使得模型的输出结果尽可能接近原始数据。 具体来说,我们可以采用自编码器(Autoencoder)的方法来实现Cat混沌映射反向学习。自编码器是一种无监督学习算法,可以将输入数据压缩成一个低维的编码表示,并通过解码器将编码表示恢复为原始数据。在Cat混沌映射反向学习中,我们可以将Cat混沌映射的输出作为自编码器的输入,将原始数据作为自编码器的目标输出,并通过反向传播算法来更新自编码器的参数,使得自编码器的输出结果尽可能接近原始数据。 需要注意的是,在Cat混沌映射反向学习中,由于Cat混沌映射是一个非线性动力学系统,其输出结果具有很高的复杂性和不确定性,因此反向学习的准确性和稳定性可能会受到一定的影响。此外,由于Cat混沌映射的特殊性质,反向学习的过程可能会比较复杂和困难,需要仔细设计和调节模型的结构和参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值