6.S081 lab6 cow

Copy-on-Write Fork for xv6

这次 lab 只有一关,那就是为xv6实现copy on write

xv6中的fork()系统调用将父进程的用户内存全部复制到子进程中。如果父进程内存占用很大,复制可能需要很长的时间。更糟糕的是,通常来说,这个复制在很大程度上是浪费的;例如,在子进程中,fork()之后的exec()调用会导致子进程丢弃复制的内存,可能大部分内存都没有来得及使用。另一方面,如果父子双方都使用一个page,并且其中一方或双方需要写这个page,那么确实需要复制。

阅读更多

6.S081 lab5 lazy

Eliminate allocation from sbrk()

这次实验的第一关非常简单,就是从sbrk调用中取消内存分配,为之后的lay allocation做准备。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
uint64
sys_sbrk(void)
{
int addr;
int n;

if(argint(0, &n) < 0)
return -1;
struct proc *p = myproc();
addr = p->sz;
p->sz += n;

return addr;
}
阅读更多

6.S081 lab4 traps

RISC-V assembly

这是一个简单的RISC-V汇编热身关卡。

阅读更多

6.S081 lab3 page tables

环境配置

前两个 lab 比较基础,就不写博客记录了,于是从 lab3 开始。

环境配置参考官网 。如果使用ubuntu20.04的话,环境配置比较简单,只需要从qemu 官网下载源码,手动 build 就完成了;或者使用archlinux,一条命令便全部配置完成。笔者使用的平台是macOS 11.2.1,使用homebrew安装的qemu在前两个 lab 没有问题,但是在第三个 lab 出现了 crash,改为从源码手动编译安装qemu 5.1.0解决了。

阅读更多

告别2020庚子鼠年

2020 庚子鼠年,在家上了半年网课,慵懒地躺尸,同时又在焦虑感的驱使下战战兢兢地当个做题家。而后,二进宫实习,同时参加夏令营,拿到 offer;国庆离职,进入实验室,成为临时工。一直在忙碌,一直在焦虑。

阅读更多