6.S081 lab10 mmap

mmapmunmap系统调用允许UNIX程序对其地址空间进行更为细致的控制。它们可用于在进程间共享内存,将文件映射到进程地址空间,并作为用户级page fault方案的一部分。在本实验室中,我们将在xv6中添加mmapmunmap系统调用,重点是memory-mapped files

阅读更多

6.S081 lab9 fs

本次试验中,将为xv6添加大文件和符号链接的支持。

Large files

本关需要为xv6添加对大文件的支持。xv6的inode默认使用12个直接块指针和1个间接块指针(指向一个存储着块指针的数据块),所以xv6支持的最大文件尺寸是12 + 1*256=268个block。我们需要将一个直接块指针修改为双重间接块指针(执行一个存储着间接块指针的数据块),将xv6的最大文件尺寸扩展到11 + 1*256 + 1*256*256= 65803个block。

阅读更多

6.S081 lab8 lock

在本实验室中,将重新设计代码以提高并行性。在多核机器上,并行性差的一个常见症状是高强度的锁竞争。提高并行性通常需要改变数据结构和加锁策略,以减少争用。您将对xv6内存分配器和文件块缓存进行改进。

阅读更多

6.S081 lab7 thread

本实验室将让你熟悉多线程。您将在用户级线程包中实现线程切换;使用多线程来加快程序的速度;并实现一个barrier

Uthread: switching between threads

实验代码中为我们提供了一个用户级别线程库,需要我们实现线程切换部分。我们需要给user/uthread.c中的thread_create()thread_schedule(),以及user/uthread_switch.S中的thread_switch添加代码。

阅读更多

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调用中取消内存分配,为之后的lazt allocation做准备。

阅读更多

6.S081 lab4 traps

RISC-V assembly

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

我们需要查看user/call.asm来回答一些问题,其主要内容如下:

阅读更多

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解决了。

阅读更多
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×