• 反向映射和写时复制


    4.0的内核后,反向映射以vma为单位,且avc不在链入父辈进程

    那么,在子进程发生写时复制,重新分配内存页后,为什么不将其从父进程的vma的avc中删除此子进程呢?

    wowotech上有个回答很不错, 如下:

    http://www.wowotech.net/memory_management/reverse_mapping.html

    ========================================================

     anon rmap确实存在这个问题,比如进程A fork了进程B,进程B,fork了进程C..如果一个pageA属于进程A且映射到相应的vma,那么在对这个page进行逆向映射时,确实会扫描到3个vma。如果进程C触发写保护异常,分配了一个新页pageC,那么在做pageA的逆向映射时,仍然会扫描到3个vma。我猜测linux这么实现的原因可能是:一个vma可能映射对个page,即使子进程对一个页面触发了写保护异常,但是其它page的映射关系没有发生改变。为了避免逆向映射时找到错误的vma,所以Linux做了以下工作: 
    1.在page_referenced_one中通过page_check_address函数进行校验 
    2.通过mapcount来优化逆向映射的过程,一旦映射到page的pte数量等于了mapcount,就不再继续搜索了

    ========================================================

    那如果父进程某个vma的所有页对于其子进程已经都发生过COW,是否可以将其从AVC中删除掉呢??

    抛些其他疑问:

    1. anon page rmap和file page rmap的区别?
      • address_space的优先树
      • anon_vma的红黑树
    2. 为何不在每个page中定义跟踪映射链?
      • 以page为单位,太浪费内存了,目前page的开销:1G内存大概需要16M;
    3. 一个进程的不同虚拟地址能否映射到同一个物理地址?可以的话,那rmap如何兼容这个case?
    4. demand paging请求调页是啥?等同于page fault?
  • 相关阅读:
    c语言中 fgetc函数、fputc函数实现文件的复制
    c语言 13-7 利用fgetc函数输出文件的字符数
    c语言 13-6 利用fgetc函数输出文件的行数
    c语言中fgetc函数:显示文件内容
    c语言 13-5
    c语言 获取程序上一次运行时间的程序
    hzwer模拟赛 虫洞
    LYDSY热身赛 escape
    bzoj2330 糖果
    繁华模拟赛 Vicent坐电梯
  • 原文地址:https://www.cnblogs.com/zengjianrong/p/12201411.html
Copyright © 2020-2023  润新知