├── 教程.assets ├── image-20210128172139499.png ├── image-20210128172157205.png ├── image-20210128172300377.png ├── image-20210128172310526.png ├── image-20210128172317423.png ├── image-20210128172433866.png ├── image-20210128172450517.png ├── image-20210128172502053.png ├── image-20210128172549260.png ├── image-20210128172619445.png └── image-20210128172641394.png ├── 其他内容:MIT Video.md ├── hints的补充.md ├── README.md ├── 对exercise的一些建议.md └── 完美避坑·五分钟搞定一切的XV6环境安装法·傻瓜版.md /教程.assets/image-20210128172139499.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/outerform/xv6-pku-hints/HEAD/教程.assets/image-20210128172139499.png -------------------------------------------------------------------------------- /教程.assets/image-20210128172157205.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/outerform/xv6-pku-hints/HEAD/教程.assets/image-20210128172157205.png -------------------------------------------------------------------------------- /教程.assets/image-20210128172300377.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/outerform/xv6-pku-hints/HEAD/教程.assets/image-20210128172300377.png -------------------------------------------------------------------------------- /教程.assets/image-20210128172310526.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/outerform/xv6-pku-hints/HEAD/教程.assets/image-20210128172310526.png -------------------------------------------------------------------------------- /教程.assets/image-20210128172317423.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/outerform/xv6-pku-hints/HEAD/教程.assets/image-20210128172317423.png -------------------------------------------------------------------------------- /教程.assets/image-20210128172433866.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/outerform/xv6-pku-hints/HEAD/教程.assets/image-20210128172433866.png -------------------------------------------------------------------------------- /教程.assets/image-20210128172450517.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/outerform/xv6-pku-hints/HEAD/教程.assets/image-20210128172450517.png -------------------------------------------------------------------------------- /教程.assets/image-20210128172502053.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/outerform/xv6-pku-hints/HEAD/教程.assets/image-20210128172502053.png -------------------------------------------------------------------------------- /教程.assets/image-20210128172549260.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/outerform/xv6-pku-hints/HEAD/教程.assets/image-20210128172549260.png -------------------------------------------------------------------------------- /教程.assets/image-20210128172619445.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/outerform/xv6-pku-hints/HEAD/教程.assets/image-20210128172619445.png -------------------------------------------------------------------------------- /教程.assets/image-20210128172641394.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/outerform/xv6-pku-hints/HEAD/教程.assets/image-20210128172641394.png -------------------------------------------------------------------------------- /其他内容:MIT Video.md: -------------------------------------------------------------------------------- 1 | 如果在完成Lab的过程中遇到了实在无法解决的困难,不妨听听MIT的课。 2 | 3 | 原课程视频可以在https://pdos.csail.mit.edu/6.828/2020/schedule.html中找到。 4 | 5 | 除此之外,还可以在B站上去看其他的版本: 6 | 7 | 英文(机器添加)字幕版:https://www.bilibili.com/video/BV1CK411A7zX 8 | 9 | 中文(机器翻译)字幕版:https://www.bilibili.com/video/BV1Dy4y1m7ZE 10 | 11 | 中英双语字幕版(人工校对,尚在制作中): 12 | 13 | ​ https://www.bilibili.com/video/BV19k4y1C7kA 14 | 15 | ​ https://github.com/mayf09/6.S081-2020-video-subtitles 16 | 17 | -------------------------------------------------------------------------------- /hints的补充.md: -------------------------------------------------------------------------------- 1 | Lab1: Xv6 and Unix utilities 2 | Exercise3: pingpong 3 | 应建立两个单向通信的管道实现相互通信,而不是在一个管道上进行双向通信。 4 | 5 | Lab3: page tables 6 | Exercise2: A kernel page table per process 7 | 除去hints中的工作之外,你可能还需要修改vm.c中的kvmpa函数中的内容。 8 | 9 | 除去以上两个特例,还有大多数Lab通用的3个hints: 10 | 1. 若自己实现了某个新的函数,且需要跨文件调用,则必须将函数原型添加到kernel\defs.h中。 11 | 2. 若完成1之后跨文件调用仍然失败,则请检查是否需要额外引用一些头文件或者extern变量(借鉴别的.c文件的写法即可)。 12 | 3. 如需要添加新的系统调用,请参照Lab2(system calls)中Exercise1(System call tracing)中的hints完成相关流程。 13 | 这3点最早会在Lab2中遇到,并且在后续的Lab中会经常用到。 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # xv6-pku-hints 2 | 3 | 这里面包含了2020年选修北京大学操作系统课程并做2020年MIT-xv6lab的同学积累的经验。 4 | 5 | 第一部分为安装部分,[完美避坑·五分钟搞定一切的XV6环境安装法·傻瓜版.md](完美避坑·五分钟搞定一切的XV6环境安装法·傻瓜版.md) 6 | 7 | 希望能够帮助你在5分钟只能就完成整个实验环境的安装~~,不需要像我们这样甚至还需要专门给安装写一个教程~~。 8 | 9 | 第二部分是对于lab,我们总结了一些更加有用的提示([[hints的补充.md](hints的补充.md)]),希望你能够根据我们的经验,避免踩坑。 10 | 11 | 第三部分为在做完所有的lab之后,我们总结出的对于做lab的人的建议([对exercise的一些建议.md](对exercise的一些建议.md))。 12 | 13 | 第四部分为在做lab的过程中我们搜集到的其他辅助资源,[其他内容:MIT Video.md](其他内容:MIT%20Video.md),强烈在lab卡住的时候观看此部分内容。 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /对exercise的一些建议.md: -------------------------------------------------------------------------------- 1 | (这部分内容比较主观,不一定适用于所有人,也不一定就能起到很好的效果,只是提供一个可参考的建议) 2 | 操作系统的实现必然是繁琐的,需要处理诸多细节的。但如果只是按照hints一个个将细节处理下去,那么在写完后大概率会出现一些奇奇怪怪的细节错误,然后花上比实现时间多上数倍的时间去痛苦地调试。因此,我们既要把握住底层的细节,又要把握住顶层的原理。 3 | 4 | Lab5(xv6 lazy page allocation)的3个exercises的设计就为我们给出了一个很好的实践方法: 5 | 6 | ​ Exercise1(Eliminate allocation from sbrk())只需要删去sys_sbrk里分配内存的两行代码即可。看似简单,但却确定了目标。 7 | 8 | ​ Exercise2(Lazy allocation)则需要我们实现Lazy alloction函数主体。这正是我们应该先去把握的整体,需要先实现的主体。 9 | 10 | ​ Exercise3(Lazytests and Usertests)则需要我们去完善细节。这又是让我们在实现主体之后,再去完善细节。 11 | 12 | 像这样,先确定目标;再把握整体,实现主体;最后深入细节,完善细节,正是一种绝佳的在实践中解决问题的方法。 13 | 尤其是在面对Lab6(Copy-on-Write Fork for xv6)和Lab10(mmap)这两个只有一个exercise的Lab时,可以借鉴这样的方法。 14 | 15 | Lab6中,仿照这一方法可以分为三步: 16 | 17 | 1. 声明标志位PTE_C,在uvmcopy函数中删去内存分配和复制,改为取消PTE_W标记,加入PTE_C标记。 18 | 19 | 2. 实现copyonwrite函数处理Copy-on-Write下的内存分配和复制,然后在usertrap中遇到page fault和执行copyout时调用它。 20 | 3. 遵照hints完善其他细节,如声明一个数组来记录每个页面被引用的次数,在页面被引用次数为0时将其释放等。 21 | 22 | Lab10中也可以仿照这一方法,不过Lab10中细节更多,原来的第二步实际上要做三件事情,因此可以分为以下五步: 23 | 24 | 1. 声明vma结构体,并将其加入proc结构体中。 25 | 26 | 2. 实现sys_mmap函数主体。 27 | 3. 进行page fault的处理。 28 | 4. 实现sys_munmap函数主体。 29 | 5. 遵照hints完善其他细节。 30 | -------------------------------------------------------------------------------- /完美避坑·五分钟搞定一切的XV6环境安装法·傻瓜版.md: -------------------------------------------------------------------------------- 1 | **完美避坑·五分钟搞定一切的XV6环境安装法·傻瓜版** 2 | 3 | Pain Is Inevitable; Suffering Is Optional 4 | 5 | 基于前人的教训,本帖是堪称手把手教你安装XV6环境的傻瓜级教程。你只需要严格按照我们列出的步骤一步步安装即可,如果你的网速在线,不是村里刚通那种,一共只需花费五分钟,工欲善其事必先利其器,我们开始吧。 6 | 7 | 1. 准备阶段 8 | 9 | 你需要一台安装了Ubuntu20的电脑或者虚拟机,如果你已经安装了Ubuntu但是版本比较低,还请你升级到Ubuntu20,或者直接重装一个虚拟机也并不麻烦,下载地址如下: 10 | 11 | https://ubuntu.com/download/desktop 12 | 13 | 安装好Ubuntu20后,我们还需要换源,这一步必不可少。 14 | 15 | 如图所示,搜索software,打开搜索结果中的软件与更新 16 | 17 | ![image-20210128172139499](教程.assets/image-20210128172139499.png) 18 | 19 | 点击其他站点 20 | 21 | ![image-20210128172157205](教程.assets/image-20210128172157205.png) 22 | 23 | 在 选择下载服务器中mirrors.ustc.edu.cn 24 | 25 | ![image-20210128172300377](教程.assets/image-20210128172300377.png) 26 | 27 | 关闭 软件与更新 28 | 29 | ![image-20210128172310526](教程.assets/image-20210128172310526.png) 30 | 31 | 在关闭时弹出的对话框中选择 重新载入 32 | 33 | ![image-20210128172317423](教程.assets/image-20210128172317423.png) 34 | 35 | 至此,我们便完成了准备阶段的工作,这一步完成了之后剩下的就很简单了。 36 | 37 | 2. 正式安装 38 | 39 | 打开终端,键入命令: 40 | 41 | ``` 42 | sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu 43 | ``` 44 | 45 | ![image-20210128172433866](教程.assets/image-20210128172433866.png) 46 | 47 | 耐心等待(用自己网的同学如果发现下载速度太慢可以挂校园网VPN)直到出现如下界面 48 | 49 | ![image-20210128172450517](教程.assets/image-20210128172450517.png) 50 | 51 | 键入命令: 52 | 53 | ``` 54 | git clone git://g.csail.mit.edu/xv6-labs-2020 55 | ``` 56 | 57 | ![image-20210128172502053](教程.assets/image-20210128172502053.png) 58 | 59 | 3. 完成与测试 60 | 61 | 接上图,耐心等待直到其执行完毕后,键入命令: 62 | 63 | ``` 64 | cd xv6-labs-2020/ 65 | ``` 66 | 67 | ![image-20210128172549260](教程.assets/image-20210128172549260.png) 68 | 69 | 我们来试试打开第一个lab,键入命令: 70 | 71 | ``` 72 | git check util 73 | ``` 74 | 75 | 再键入命令: 76 | 77 | ``` 78 | make qemu 79 | ``` 80 | 81 | ![image-20210128172619445](教程.assets/image-20210128172619445.png) 82 | 83 | 如若出现以下界面,便说明我们大功告成啦,我们还顺带完成了lab1的第一部分内容. 84 | 85 | ![image-20210128172641394](教程.assets/image-20210128172641394.png) 86 | 87 | 至此,XV6环境安装全部完成。请尽情享受 xv6 lab的热情款待(虐待)吧。 88 | 89 | --------------------------------------------------------------------------------