作者: admin52

100 篇文章

6.1810 Lab10 mmap: Mmap
Lab 10 已经做完刚好一个周了,现在来补充一下 Lab 10 的笔记。可能部分代码的思考心路历程和 Debug 历程有所遗忘了 QAQ,重点可能就写一下自己的代码思路吧。 Lab 10 mmap 不愧是最后的大 BOSS,把 syscall、trap、page fault、kalloc/kfree(实现 VMA 的分配类似)、fork、fs 这…
6.1810 Lab9 fs: File system
xv6 Lab 已经做完几天了,做完后没来得及写笔记,现在来补写一下最后两个 Lab 的笔记,可能部分代码的思考心路历程和 Debug 历程有所遗忘了 QAQ,重点可能就写一下自己的代码思路吧。 Lab9 Large files Xv6 目前的 inode 仅支持 12 个直接索引块和 1 个一级间接索引块,由于 BSIZE 是 1KB,每个 bl…
6.1810 Lab8 lock: Parallelism/locking
由于各种原因导致这个 Lab 拖了很久(看 fs 那一章花了些时间)才完成,这个 Lab 还是有一些 tricky 的,毕竟涉及到并发 BUG 就不是靠单步 GDB 就能够很轻松找到问题解决的。 注意:File System 相关章节的金句摘录留到下一个 fs lab 里再写。 Lab8 Memory allocator 这个 task 是要为 k…
6.1810 Lab7 net: Network driver
这个 Lab 又臭又长,我受不了,这破 intel 文档读不下去一点。因此这个 Lab 基本是抄作业,我也没有太细看 intel 文档,只针对关键部分看了下,但是我也想吐槽文档的图画得是真丑,也很不直观,受不了。 QEMU 环境问题 这个 Lab 直接编译运行失败,错误信息表明当前的 QEMU 二进制文件中没有编译进 user 模式的网络后端。需要…
6.1810 Lab6 thread: Multithreading
先吐槽一下 ,cow lab 后看了 4 节课 + 3 章节 textbook 才能开始完成 lab,因此这个 Lab 看课和看 textbook 花费的时间比较多。这个 lab 是比较水的,本以为会自己实现内核的多进程/多线程机制,但 xv6 已经实现好了 RR 算法。而这个 lab 的三个 task 竟然都是在用户态下完成的,所以比较水了。 L…
6.1810 Lab5 cow: Copy-on-write fork
终于来到了传说中的 COW fork 实验,关于 COW 这个机制,已经无数次听学长和同学谈起,也是面试重点,我同学孟爷爷曾经面试 ysyx 夏令营就被问到过 COW。自己也曾尝试了解 Linux 内核中的 COW 实现,是时候终于自己亲手实现一下 COW 了。 这个 Lab 不需要额外花时间看 textbook 和 Xv6 代码,因此上手很快,是…
6.1810 Lab4 traps: Traps
Lab4 需要进一步学习 RISC-V 汇编,并对 RISC-V 下的栈帧、用户程序状态保存与状态恢复会有更深入的学习和了解。在开始 Lab4 之前,需要阅读和调试 kernel/trampoline.S 和 kernel/trap.c。 RSIC-V Calling Convention 目前最新版的 RISC-V 的 privileged 和 …
6.1810 Lab3 pgtbl: Page tables
Lab3 是体验和操作 Page Table。通过这个 Lab 终于能有机会对 Page Table 有了更深刻的理解。 一点感想,其实完成一个 Lab 需要看课、阅读 textbook、阅读 Xv6 代码、写实验代码、写笔记,总共五大步骤,写实验代码所用的时间反而占比不多,只能说写代码是整个 Lab 过程中最快乐、成就感最强的阶段吧。 Xv6 地…
6.1810 Lab2 syscall: System calls
Lab2 是学习和实现 syscall。 LEC 2 拾遗 网上流传的视频都没有 LEC 2,我看了下 slides,LEC 2 主要是关于 C 语言的基础芝士。其中有一个比较有意思的内容:The Ksplice Pointer Challenge 指针挑战。 #include <stdio.h> int main() { int x[…