0%

0. 前言·

本实验为MIT 6.s081的第三个实验,也是第一个难度较大的实验。主要讨论页表相关的问题。

分为以下三个task:

  1. 写一个页表打印函数 vmprint, 打印多级页表的pte。
  2. 修改xv 6内核,让每个进程都都持有一个内核页表。
  3. 修改xv 6内核,让进程在陷入内核后,无需根据 user page table来解引用进程用户空间地址。
阅读全文 »

0. 前言·

本实验为MIT 6.S081 的第二个实验。要求在xv6上自行添加两个系统调用: trace和sysinfo。

原文要求:https://pdos.csail.mit.edu/6.828/2020/labs/syscall.html

阅读全文 »

0. 前言·

虽然MIT6824(分布式)还剩最难的一个大lab未做,不过我还是决定从本篇开始新的学习—操作系统6.S081,原计划为6.828,由于没有系统学过汇编,6828的第一个bootloader实验需要耗费的时间过多,故而改为6.S081,除了整体更简单外,采用risc-v也为后续C61C做点铺垫。

好,本篇为6.S081-2020的起始篇章。主要讲讲环境搭建和第一个lab。

阅读全文 »

0. 前言·

本篇为mit6824 spring 2020 lab3B部分的完成记录。

实验整体要求和 mit6824 2021 lab2D部分相同。不过需要完成service层的snapshot逻辑。

原本以为完成了raft(lab2D)后此处相对简单,不过依然花费了不少时间。

阅读全文 »

0. 前言·

本文为Raft的补充篇。 我做的实验是mit 6824 spring 2020, 2020年版本Log Compaction放到了lab3中,但是我发现 2021版本Log Compaction放到了lab 2中,且有配套单元测试,所以这部分单独写了2021版本。现在单独写篇文章说下log compaction。

简述要求:

raft的log随着svr服务时间的延长而逐渐变大,如若不加任何控制,系统内log占用空间将无限增大,另外,svr每次开机也会反序列化log文件。所以需要在恰当的时间对log执行compaction操作,也被称为snapshot操作。

原文要求 :http://nil.csail.mit.edu/6.824/2021/labs/lab-raft.html

另外,我的方案中未使用到 CondInstallSnapshot 接口。

阅读全文 »

前言·

很久没更新博文,这一个月除了忙着论文,也抽空学了下neovim。在各类ide和vscode中用vim插件已经过了3 4年,常见vim操作已经烂熟于心。一直觉得纯vim/nvim很难用,即使配上插件也难以适用到平日的开发工作。 直到看到油管大佬的视频,重燃些许兴趣,一路跟着配置,感觉neovim已经完全具备常用的开发功能。至少目前的配置效果让我决定先使用neovim做一两个小项目。

2022/5/6 更新:用neovim写了点lab,总体感受不错,特别是golang写起来比较舒适。对于c/cpp项目,如果clangd能够能索引所有文件,那么使用效果非常不错。但是对于部分引用库缺失的情况下,clangd lsp分析不行,无法实现跳转和比较好的补全效果(这种情况改用gtags会更好一些)。 所以目前个人感觉依然是能用vscode的情况仍然是使用vscode,在某些特殊情景下,neovim会更好,比如无法使用vscode的ssh remote development时,neovim可以说是最好的选择,或者只是改改脚本等。 目前,我也将自己的vscode配置得更vim-like, 几乎不用鼠标就可以完成所有操作,所以效率上和vim也差不多。

本文算是一个对neovim配置的总结篇

阅读全文 »

0. 要求·

本次lab为KvRaft PartA, 原文要求在这里

简述要求:

实现基于raft的kv存储service,client发起GET/PUT/APPEND请求,server做相应处理,并且基于raft达到fault-tolerate。整个系统要求满足 线性一致性

在做本实验前,请一定一定确保lab2的单元测试通过100次以上

阅读全文 »

0. 前言·

文本为MIT-6824-lab2-Raft的总结篇。

在做lab3时,发现之前做的lab2虽然通过了几次全部测试,但是依然存在一些严重bug。在修复后决定不扰乱前三篇文章,重写本篇总结。

阅读全文 »

0. 要求·

本次lab为raft的第三分部(PartC), 原文要求在这里

简述lab2C的要求为:

实现 Raft状态的持久化,保证svr crash重启后能恢复到之前的状态。

在做完2B后,2C非常简单。

阅读全文 »

0. 要求·

上文lab2A是本次lab的一个框架,而lab2B则是一些更为细节的东西。

本次lab为raft的第二分部(PartB), 原文要求在这里

简述lab2B的要求为:

实现 leader append log,并通过AppendEntries将log replicate 到其他server中。

看起来相对简单,但实际上实现比lab2A更复杂,debug也很难调。

阅读全文 »