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