2019-01-20 20:56:23 +08:00
|
|
|
|
Caffeinated 6.828:实验 6:最终的 JOS 项目
|
2018-11-10 12:22:09 +08:00
|
|
|
|
======
|
2019-01-20 20:56:23 +08:00
|
|
|
|
|
2018-11-10 12:22:09 +08:00
|
|
|
|
### 简介
|
|
|
|
|
|
|
|
|
|
对于最后的项目,你有两个选择:
|
|
|
|
|
|
|
|
|
|
* 继续使用你自己的 JOS 内核并做 [实验 6][1],包括实验 6 中的一个挑战问题。(你可以随意地、以任何有趣的方式去扩展实验 6 或者 JOS 的任何部分,当然了,这不是课程规定的。)
|
2019-01-20 20:56:23 +08:00
|
|
|
|
* 在一个、二个或三个人组成的团队中,你选择去做一个涉及了你的 JOS 的项目。这个项目必须是涉及到与实验 6 相同或更大的领域(如果你是团队中的一员)。
|
2018-11-10 12:22:09 +08:00
|
|
|
|
|
|
|
|
|
目标是为了获得乐趣或探索更高级的 O/S 的话题;你不需要做最新的研究。
|
|
|
|
|
|
|
|
|
|
如果你做了你自己的项目,我们将根据你的工作量有多少、你的设计有多优雅、你的解释有多高明、以及你的解决方案多么有趣或多有创意来为你打分。我们知道时间有限,因此也不期望你能在本学期结束之前重写 Linux。要确保你的目标是合理的;合理地设定一个绝对可以实现的最小目标(即:控制你的实验 6 的规模),如果进展顺利,可以设定一个更大的目标。
|
|
|
|
|
|
|
|
|
|
如果你做了实验 6,我们将根据你是否通过了测试和挑战练习来为你打分。
|
|
|
|
|
|
|
|
|
|
### 交付期限
|
|
|
|
|
|
2019-01-20 20:56:23 +08:00
|
|
|
|
> 11 月 3 日:Piazza 讨论和 1、2、或 3 年级组选择(根据你的最终选择来定)。使用在 Piazza 上的 lab7 标记/目录。在 Piazza 上的文章评论区与其它人计论想法。使用这些文章帮你去找到有类似想法的其它学生一起组建一个小组。课程的教学人员将在 Piazza 上为你的项目想法给出反馈;如果你想得到更详细的反馈,可以与我们单独讨论。
|
|
|
|
|
|
|
|
|
|
.
|
|
|
|
|
|
|
|
|
|
> 11 月 9 日:在 [提交网站][19] 上提交一个提议,只需要一到两个段落就可以。提议要包括你的小组成员列表、你的计划、以及明确的设计和实现打算。(如果你做实验 6,就不用做这个了)
|
2018-11-10 12:22:09 +08:00
|
|
|
|
|
2019-01-20 20:56:23 +08:00
|
|
|
|
.
|
2018-11-10 12:22:09 +08:00
|
|
|
|
|
2019-01-20 20:56:23 +08:00
|
|
|
|
> 12 月 7 日:和你的简短报告一起提交源代码。将你的报告放在与名为 “README.pdf” 的文件相同的目录下。由于你只是这个实验任务小组中的一员,你可能需要去使用 git 在小组成员之间共享你的项目代码。因此你需要去决定哪些源代码将作为你的小组项目的共享起始点。一定要为你的最终项目去创建一个分支,并且命名为 `lab7`。(如果你做了实验 6,就按实验 6 的提交要求做即可。)
|
2018-11-10 12:22:09 +08:00
|
|
|
|
|
2019-01-20 20:56:23 +08:00
|
|
|
|
.
|
2018-11-10 12:22:09 +08:00
|
|
|
|
|
2019-01-20 20:56:23 +08:00
|
|
|
|
> 12 月 11 日这一周:简短的课堂演示。为你的 JOS 项目准备一个简短的课堂演示。为了你的项目演示,我们将提供一个投影仪。根据小组数量和每个小组选择的项目类型,我们可能会限制总的演讲数,并且有些小组可能最终没有机会上台演示。
|
|
|
|
|
|
|
|
|
|
.
|
|
|
|
|
|
|
|
|
|
> 12 月 11 日这一周:助教们验收。向助教演示你的项目,因此我们可能会提问一些问题,去了解你所做的一些细节。
|
2018-11-10 12:22:09 +08:00
|
|
|
|
|
|
|
|
|
### 项目想法
|
|
|
|
|
|
|
|
|
|
如果你不做实验 6,下面是一个启迪你的想法列表。但是,你应该大胆地去实现你自己的想法。其中一些想法只是一个开端,并且本身不在实验 6 的领域内,并且其它的可能是在更大的领域中。
|
|
|
|
|
|
|
|
|
|
* 使用 [x86 虚拟机支持][2] 去构建一个能够运行多个访客系统(比如,多个 JOS 实例)的虚拟机监视器。
|
|
|
|
|
* 使用 Intel SGX 硬件保护机制做一些有用的事情。[这是使用 Intel SGX 的最新的论文][3]。
|
|
|
|
|
* 让 JOS 文件系统支持写入、文件创建、为持久性使用日志、等等。或许你可以从 Linux EXT3 上找到一些启示。
|
|
|
|
|
* 从 [软更新][4]、[WAFL][5]、ZFS、或其它较高级的文件系统上找到一些使用文件系统的想法。
|
|
|
|
|
* 给一个文件系统添加快照功能,以便于用户能够查看过去的多个时间点上的文件系统。为了降低空间使用量,你或许要使用一些写时复制技术。
|
|
|
|
|
* 使用分页去提供实时共享的内存,来构建一个 [分布式的共享内存][6](DSM)系统,以便于你在一个机器集群上运行多线程的共享内存的并行程序。当一个线程尝试去访问位于另外一个机器上的页时,页故障将给 DSM 系统提供一个机会,让它基于网络去从当前存储这个页的任意一台机器上获取这个页。
|
|
|
|
|
* 允许进程在机器之间基于网络进行迁移。你将需要做一些关于一个进程状态的多个片段方面的事情,但是由于在 JOS 中许多状态是在用户空间中,它或许从 Linux 上的进程迁移要容易一些。
|
|
|
|
|
* 在 JOS 中实现 [分页][7] 到磁盘,这样那个进程使用的内存就可以大于真实的内存。使用交换空间去扩展你的内存。
|
|
|
|
|
* 为 JOS 实现文件的 [mmap()][8]。
|
|
|
|
|
* 使用 [xfi][9] 将一个进程的代码沙箱化。
|
|
|
|
|
* 支持 x86 的 [2MB 或 4MB 的页大小][10]。
|
|
|
|
|
* 修改 JOS 让内核支持进程内的线程。从查看 [课堂上的 uthread 任务][11] 去开始。实现调度器触发将是实现这个项目的一种方式。
|
|
|
|
|
* 在 JOS 的内核中或文件系统中(实现多线程之后),使用细粒度锁或无锁并发。Linux 内核使用 [读复制更新][12] 去执行无需上锁的读取操作。通过在 JOS 中实现它来探索 RCU,并使用它去支持无锁读取的名称缓存。
|
|
|
|
|
* 实现 [外内核论文][13] 中的想法。例如包过滤器。
|
|
|
|
|
* 使 JOS 拥有软实时行为。用它来辨识一些应用程序时非常有用。
|
|
|
|
|
* 使 JOS 运行在 64 位 CPU 上。这包括重设计虚拟内存让它使用 4 级页表。有关这方面的文档,请查看 [参考页][14]。
|
|
|
|
|
* 移植 JOS 到一个不同的微处理器。这个 [osdev wiki][15] 或许对你有帮助。
|
|
|
|
|
* 为 JOS 系统增加一个“窗口”系统,包括图形驱动和鼠标。有关这方面的文档,请查看 [参考页][16]。[sqrt(x)][17] 就是一个 JOS “窗口” 系统的示例。
|
|
|
|
|
* 在 JOS 中实现 [dune][18],以提供特权硬件指令给用户空间应用程序。
|
|
|
|
|
* 写一个用户级调试器,添加类似跟踪的功能;硬件寄存器概要(即:Oprofile);调用跟踪等等。
|
|
|
|
|
* 为(静态的)Linux 可运行程序做一个二进制仿真。
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
via: https://pdos.csail.mit.edu/6.828/2018/labs/lab7/
|
|
|
|
|
|
|
|
|
|
作者:[csail.mit][a]
|
|
|
|
|
选题:[lujun9972][b]
|
|
|
|
|
译者:[qhwdw](https://github.com/qhwdw)
|
2019-01-20 20:56:23 +08:00
|
|
|
|
校对:[wxy](https://github.com/wxy)
|
2018-11-10 12:22:09 +08:00
|
|
|
|
|
|
|
|
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
|
|
|
|
|
|
|
|
|
[a]: https://pdos.csail.mit.edu
|
|
|
|
|
[b]: https://github.com/lujun9972
|
|
|
|
|
[1]: https://pdos.csail.mit.edu/6.828/2018/labs/lab6/index.html
|
|
|
|
|
[2]: http://www.intel.com/technology/itj/2006/v10i3/1-hardware/3-software.htm
|
|
|
|
|
[3]: https://www.usenix.org/system/files/conference/osdi14/osdi14-paper-baumann.pdf
|
|
|
|
|
[4]: http://www.ece.cmu.edu/~ganger/papers/osdi94.pdf
|
|
|
|
|
[5]: https://ng.gnunet.org/sites/default/files/10.1.1.40.3691.pdf
|
|
|
|
|
[6]: http://www.cdf.toronto.edu/~csc469h/fall/handouts/nitzberg91.pdf
|
|
|
|
|
[7]: http://en.wikipedia.org/wiki/Paging
|
|
|
|
|
[8]: http://en.wikipedia.org/wiki/Mmap
|
|
|
|
|
[9]: http://static.usenix.org/event/osdi06/tech/erlingsson.html
|
|
|
|
|
[10]: http://en.wikipedia.org/wiki/Page_(computer_memory)
|
|
|
|
|
[11]: http://pdos.csail.mit.edu/6.828/2018/homework/xv6-uthread.html
|
|
|
|
|
[12]: http://en.wikipedia.org/wiki/Read-copy-update
|
|
|
|
|
[13]: http://pdos.csail.mit.edu/6.828/2018/readings/engler95exokernel.pdf
|
|
|
|
|
[14]: http://pdos.csail.mit.edu/6.828/2018/reference.html
|
|
|
|
|
[15]: http://wiki.osdev.org/Main_Page
|
|
|
|
|
[16]: http://pdos.csail.mit.edu/6.828/2018/reference.html
|
|
|
|
|
[17]: http://web.mit.edu/amdragon/www/pubs/sqrtx-6.828.html
|
|
|
|
|
[18]: https://www.usenix.org/system/files/conference/osdi12/osdi12-final-117.pdf
|
|
|
|
|
[19]: https://6828.scripts.mit.edu/2018/handin.py/
|