进程写时拷贝

傻瓜式拷贝

地址空间复制

内核原样复制父进程的整个地址空间并把复制的那一份分配给子进程
1.为子进程的页表分配页面
2.为子进程的页分配页面
3.初始化子进程的页表
4. 把父进程的页复制到子进程相应的页中

不被使用

涉及许多内存访问,消耗许多CPU周期,并且完全破坏了高速缓存中的内容
但子程序往往是在装入一个新的程序之后被执行,完全丢弃了所继承的地址空间

写时拷贝

共享页面

父进程和子进程共享页面而不是复制页面。
父进程和子进程都不能修改被共享的页面

写共享页面

产生错误
内核把这个页复制到一个新页面中 标记为可写
原来页面保持写保护状态
写入时内核检查该进程是否是页面的唯一属主 是的话标记页面对这个进程可写

写时拷贝的开销

fork()后立即执行exec(),地址空间就无需被复制了。fork()的实际开销就是复制父进程的页表以及给子进程创建一个进程描述符
子进程会被放在队列的前面优先执行,以免父进程执行导致写时拷贝,子进程exec无意义复制导致效率下降。

写时拷贝

有父进程主体P1 在其虚拟地址空间有.text/.data/.stack/.heap四部分,相应的是
内核要为这四个部分分配各自的物理块,代码段块、数据段块、堆快、栈快

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值