MIT-6.s081-OS lab cow: Copy-on-Write Fork for xv6

本文介绍了在RISC-V架构下,针对MIT 6.S081操作系统课程的实验,实现了Copy-on-Write (COW) Fork。通过分析和修改xv6操作系统代码,详细讲解了COW Fork的原理,包括如何在fork时避免不必要的内存复制,以及在page fault异常处理中动态分配内存进行页面复制。同时,讨论了在实现过程中遇到的挑战和解决方案,如修改uvmcopy、usertrap、copyout等函数,以及添加对COW页面的引用计数管理。
摘要由CSDN通过智能技术生成

代码:https://github.com/RedemptionC/xv6-riscv-6s081/tree/cow

本实验仍然是虚拟内存,所以暂且跳过了中间的内容(指lec和课本)

分析

copy on write fork :

在之前的code walk through(https://blog.csdn.net/RedemptionC/article/details/107709618)中提到了,fork的实现里,有一个uvmcopy的调用,作用是将父进程的内存复制到子进程中,这个复制包括申请物理内存,设置pte

但是在下列情况下:

  • 父进程和子进程都不修改某些内存页
  • fork之后子进程马上调用exec,而由exec的实现可知,子进程的内存马上会由可执行文件的内容代替

这个复制,就显得很浪费资源,而且这两种情况不在少数,因此我们需要copy on write

fork时不申请额外的内存,只申请一个页表,并且把子进程页表的pte指向父进程的物理内存(和父进程页表的pte一样),仅当父进程/子进程修改其内存时,才复制页

这里的做法和lazy allocation差不多,都是在异常处理时申请内存:在fork时,把父进程的pte的PTE_W clear,这样写的

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值