0. 前言·
本实验为MIT 6.s081的第三个实验,也是第一个难度较大的实验。主要讨论页表相关的问题。
分为以下三个task:
- 写一个页表打印函数 vmprint, 打印多级页表的pte。
- 修改xv 6内核,让每个进程都都持有一个内核页表。
- 修改xv 6内核,让进程在陷入内核后,无需根据 user page table来解引用进程用户空间地址。
本文为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配置的总结篇