相传上古年代有三大屠龙技:编译原理、操作系统和图形学,就数操作系统最基础。就整个课程完成下来,xv6 解决了操作系统有没有的问题,而对应实验解决的是操作系统好不好用的问题。实验过程涉及大量的内核优化和扩展,虽然实际上是在 xv6 的框架下套模板,但为了完成实验任务,还是需要比较熟悉 xv6
原文来自耶鲁大学 CS421 的 x86 Assembly Guide,主要是一个 AT&T 语法的汇编精简入门教程
结合虚拟内存和文件系统操作,实现内存映射文件(memory-mapped file)逻辑,难度比较大。内存映射文件本身不属于内核基础功能,和写时拷贝、小锁优化一样,属于扩展功能
总的来说,这个 lab 还是比较简单的。第一个 assignment 让我们重新设计 inode 结构,第二个让我们实现软链接系统调用,这些内容可谓是和操作系统八股文的知识联系到一起了
这很可能是最难的一个 lab,不止难在锁机制(这个 lab 一个很重要的思想是 "大锁低效率,小锁易死锁")上,还有一个题目没有指出的坑点,这个坑点可能导致 out of blocks 的 panic
这个实验难在需要知道网卡是怎么传输、怎么接收的,实际编程部分对比往年其实已经简化很多了,区分描述符和包缓冲区两个概念是关键的
本次 lab 对应三个 moderate 难度的任务,关系线程调度、如何加锁等原理
这个 lab 只有一个 assignment,但标记的是 hard,尽管如此,执行逻辑却随着 hint 给出了,真正难的可能是 "做阅读理解"。但是另一方面,这个 lab 测试点超级多,可谓是 "面向测试编程",如果说以前的 lab 可以用一些投机取巧的 trick 通过,那这次的测试点应该不能这么做了,所以还是有点挑战性的
综合来说,虽然有一个 assignment 标记着困难难度,但技术上的困难几乎没有,更多的应该是文字多步骤多,不过确实需要知道 trap 的程序流,否则可能会无从下手
原文来自于 xv6 lec5 的 prerequirement,谈论 risc-v 的调用约定