Linux中有关写时复制的思维导图,包括写时复制概念、思想、缺页请求
树图思维导图提供 写时复制思维导图 在线思维导图免费制作,点击“编辑”按钮,可对 写时复制思维导图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:a5e2b3e5a24327439c351cc4b79f1d22
写时复制思维导图思维导图模板大纲
最初产生于 UNIX 系统,用于实现一种傻瓜式的进程创建
当发出 fork( )系统调用时,内核原样复制父进程的整个地址空间并把复制的那一份分配给子进程
为子进程的页表分配页面
为子进程的页分配页面
初始化子进程的页表
把父进程的页复制到子进程相应的页中
创建一个地址空间的这种方法涉及许多内存访问,消耗许多 CPU 周期,并且完全破坏了高速缓存中的内容
父进程和子进程共享页面而不是复制页面
只要页面被共享,它们就不能被修改
无论父进程和子进程何时试图写一个共享的页面,就产生一个错误
内核就把这个页复制到一个新的页面中并标记为可写
原来的页面仍然是写保护的
进程试图写入时,内核检查写进程是否是这个页面的唯一属主
如果是,它把这个页面标记为对这个进程是可写的
调用 pte_mkyoung( ) 和 set_pte( )函数来设置引起错误的页所对应页表项的访问位
如果错误由违背写保护而引起的,handle_pte_fault( ) 返回由 do_wp_page( )函数产生的值
一致性检查
当进程等待一个空闲的页面时,这个页是否已经被交换出去
pte 和 *page_table的值不相同
这个页是否已不在物理内存中(页表表项中页的 Present 标志为 0)
页现在是否可写(页项中页的 Read/Write 标志为 1)
函数更新次级缺页的数目,并把引起错误的页的页描述符指针保存到 page_map局部变量中
通过 fork()建立进程,开始时只有一个页目录和一页左右的可执行页,于是缺页异常会频繁发生
虚拟地址映射到物理地址,只有在请页时才完成,这时要建立页表和更新页表
页表是动态建立的
页表不可被换出,不记年龄,它们被内核中保留,只有在 exit 时清除
在处理页故障的过程中,因为要涉及到磁盘访问等耗时操作,因此操作系统会选择另外一个进程进入执行状态,即进行新一轮调度