0%

0. 前言·

本实验为MIT6.s8081的第十一个实验,也是最后一个实验,主题为 网卡驱动 相关。实验要求实现网卡驱动的收发过程核心逻辑。

本实验的前置知识较多,上来就是E1000网卡手册,但实际上需要阅读和理解的部分很少,实现的代码也只是几十行。

阅读全文 »

0. 前言·

本实验为MIT6.s8081的第九个实验,主题和 文件系统 相关。实验任务有两个:

  1. 增大xv6的最大文件size限制
  2. 实现软链接

整体来看,实验相对简单。

阅读全文 »

0. 前言·

本实验为MIT6.s8081的第八个实验,主题和 相关。实验任务有两个:

  1. 增加内核内存分配器的并发性
  2. 增加文件系统buffer cache的并发性

本实验是第二个难度较大的实验。很值得一做。

阅读全文 »

0. 前言·

本实验为MIT 6.s081的第七个实验,主题和 多线程 相关。实验任务有三个:

  1. 实现user level的thread switch
  2. 完善并发hash table
  3. 实现一个Barrier,类似Java的CyclicBarrier
阅读全文 »

0. 前言·

本实验为MIT 6.s081的第六个实验,主题为 copy-on-write(cow, 写时复制)相关。实现进程在fork时的cow机制。

要求:

更改xv6内核 fork 机制,实现延迟分配物理page给子进程。具体而言,在fork时,只用创建子进程的页表,但无需拷贝实际的物理页,并同时更新父子进程对应页的PTE为 not writable。 当父或子进程对物理页进行实际更新时,CPU产生page fault, 内核此时才分配新物理页,执行拷贝和页表项重映射。

阅读全文 »

0. 前言·

本实验为MIT 6.s081的第五个实验,主题和内存的lazy allocation相关,是page table的应用之一。其余应用包括不限于(copy on write, zero fill on demand, demand paging)。

本实验分为三个task:

  1. 取消sbrk系统调用中的内存分配。即准备从eagerly分配变为lazy分配。
  2. 实现lazy allocation,然后通过echo hi测试。
  3. 继续完善lazy allocation,完成所有测试。包括lazytests和usertests。
阅读全文 »

0. 前言·

本实验为MIT 6.s081的第四个实验,实验相对简单,主题和trap相关,目的是使学生了解syscall是如何从用户态到内核态,又是如何内核态回到用户态的。

本实验分为三个task:

  1. 检验学生是否熟悉RISCV-V汇编。出了几个问答题目。
  2. Backtrace,实现类似gdb中bt命令的打印结果
  3. Alarm,实现sigalarm系统调用,使得内核周期性回调用户提供handler函数。类似于一个定时器。
阅读全文 »

前言·

为了更好的完成MIT6.S081的后续实验,花了一点时间学习了RISCV汇编。选择的资源为 伯克利CS61C课程,RISCV的介绍为Lec6到Lec9。本lab为RISCV的练习实验。

有用的资源推荐:

  1. CS61C 哔哩哔哩搬运
  2. CS61C-RISCV汇编参考card
  3. MIT-6.004-RISCV汇编参考card

本lab的要求为: 点这里

实验采用的模拟器为 venus

阅读全文 »