├── .gitignore └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | _* 3 | *.o 4 | *.d 5 | *.asm 6 | *.sym 7 | *.img 8 | *.pyc 9 | vectors.S 10 | bootblock 11 | entryother 12 | initcode 13 | initcode.out 14 | kernelmemfs 15 | mkfs 16 | kernel/kernel 17 | user/usys.S 18 | .gdbinit 19 | myapi.key 20 | *-handin.tar.gz 21 | xv6.out* 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | MIT 6.S801 2020 2 | 3 | > 所有代码已通过make grade,但存在两处疑惑(答题思路后期再补上) 4 | 5 | 6 | - lock实验不是很理解怎么用time-stamps做到brelse能不用bcahe锁,但是bget又能找到最近最少未使用的buffer,但是也能通过测试 7 | - net实验感觉中断读取前是不是应该先禁用读中断,读取完成后再启用?驱动开发还是不太熟悉,后面有空再研究下(傻了,RISCV中断不支持嵌套,硬件会在发出中断后关闭中断,只有等内核处理完成后才会继续发出新中断,所以并不需要我们自己关闭,详见plic.c和trap.c,而且虽然过了测试,但是实现方法存在问题,应该参考uart.c使用独立kernel线程来处理net_rx,而不是像我这样直接调用net_rx,中断函数应该将mbuf缓存到某个队列,然后调用wakeup通知内核线程调用net_rx处理后立马返回,内核线程处理net_rx过程中是可以被时钟中断打断的,可以触发sched,这样不会影响其他中断的处理,必须保证中断快速处理,这边我就偷懒不改了,留下个思路) 8 | --------------------------------------------------------------------------------