6.S081 lab10 mmap

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

阅读更多

6.S081 lab9 fs

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

阅读更多

6.S081 lab6 cow

Copy-on-Write Fork for xv6

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

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

阅读更多