开始写个人博客了
发表于|更新于|经验
|总字数:205|阅读时长:1分钟
博客搭建
经过两天的折腾,利用Hexo框架和github托管的方式搭建的静态博客也算有了个雏形,这两天将继续对其进行美化以及添加新功能,今后打算在这里不定期分享一些自己感兴趣的编程、数码、游戏相关的内容。
搭建博客的目的
一方面是想锻炼自己的表达能力(我在这方面确实有所欠缺),另一方面也是想将自己感兴趣的内容分享出去,既加深了自己对知识的理解,也能让他人学到新东西。
博客的内容
包含但不限于编程、游戏、数码相关内容,只要是我觉得有分享价值的东西,都有可能出现在博文中。
文章作者: Chaoqun Zheng
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 PageFault!
相关推荐

2021-08-25
hexo博客的备份与恢复
为了防止误操作或计算机崩溃导致的博客源文件丢失,或满足我们更换电脑进行写作的需求,定期进行备份与恢复就显得很重要了。 备份需备份的文件目录我们在进行备份时,并不需要将整个博客目录全部备份,只备份以下几个用户自定义的即可:scaffolds目录,source目录,themes目录,.gitignore文件,_config.yml文件,package.json文件,其他都是通用的。 首先我们先来观察整个博客目录的结构: .deploy_git 本目录会在我们部署时生成,也就是github上保存的文件,无需备份。 node_modules 本目录包含了hexo博客依赖的模块,安装时自动生成,无需备份。 public 与.deploy_git类似,是编译后生成的文件静态网页文件,无需备份。 scaffolds 保存了用户文章的模板,需要备份。 source 保存了用户文章的源文件,需要备份。 themes 保存了用户下载的主题文件与配置,需要备份。 .gitignore 保存了推送到github时忽略的文件名,需要备份。 _con...

2025-08-23
OS功能挑战赛2025总结
随着最近 OS 功能挑战赛 2025 的落幕,既标志着这几个月比赛工作的结束,也标志着本人研一生活的结束。本文将作为一个简单的记录,对本次比赛的过程以及得到的经验教训做一个总结,同时也对未来的学习研究做一个展望。 比赛回顾首先说一下比赛结果—— 三等奖 ,一个稍微有些令人失望的结果。但不管如何,比赛过程中的收获却是实打实的。 项目的源代码已经开放在了 github 中,欢迎参考: LordaeronESZ/SEVFS: A simple encrypted versioning file system. 时间线接下来,我将简单梳理一下本次比赛的整个时间线。 首先是 3 月份,我们完成了比赛的报名和选题工作。其中选题工作并不那么顺利,最开始我们选题备选方案为:(1)proj121-使用哈希页表实现虚拟机的 stage-2 页表 和 (2)proj319-支持 RISC-V 架构的文件级加密文件系统。由于个人科研方向为虚拟化方向,因此两个题目中更偏向于前者。但通过对往年的参赛作品进行调研发现,已经有队伍做过了该题目并且基本完成了题目的所有要求,并最终获得了一等奖——我们再选择...

2024-10-28
2024开源操作系统训练营 rCore Chapter3练习
编程作业思路rCore 的第一个实验,主要是为了熟悉如何进行内核编程,实现起来比较简单。 要求实现一个系统调用,填充传入的 TaskInfo 结构体已获取当前任务的一些信息,包含三个字段:任务状态、任务使用的系统调用及调用次数、系统调用时刻距离任务第一次被调度时刻的时长(单位 ms)。 首先是任务状态,这个比较简单,直接查看当前任务的任务控制块的字段值即可。 对于系统调用次数,可以在任务控制块中添加新的字段来存储相关信息,例如按提示所说,一个长度为 MAX_SYSCALL_NUM 的整型数组。在函数 syscall/mod.rs:syscall 中,在内核对用户态传入的系统调用号进行分发处理前,增加对应的系统调用桶的计数。注意,由于本次系统调用 sys_task_info 也要进行计数,因此不能在执行了特定的系统调用后再来增加计数,否则本次 sys_task_info 系统调用次数将无法被统计。 最后是距离任务第一次被调度时刻的时长,一种实现方式是:为任务控制块添加新的字段:time,表示任务第一次被调度的时间。先为 time 设定一个初始值(例如 0),表示该值未被更改过,每当...

2024-11-04
2024开源操作系统训练营 rCore Chapter8练习
编程作业思路本实验要求为死锁和信号量机制实现死锁检测功能,并提供系统调用 enable_deadlock_detect,用以开启和关闭死锁检测功能。在开启死锁检测功能的情况下,用户使用 mutex_lock 或 semaphore_down 尝试获取互斥资源时,如果发现系统处于不安全状态(可能发生死锁)时拒绝对应的资源获取请求。 实验手册中介绍的死锁检测算法为银行家算法(Banker\’s Algorithm),由 Dijkstra 提出,算法的流程可以参照手册,这里不再详细介绍,代码实现如下: 123456789101112131415161718192021222324252627282930313233343536/// Banker's Algoritm for dead lock checkfn deadlock_check(available: Vec<usize>, allocation: Vec<Vec<usize>>, need: Vec<Vec<usize>>) -> bool ...

2024-11-01
2024开源操作系统训练营 rCore Chapter4练习
编程作业思路重写 sys_get_time 和 sys_task_info首先,第一个任务:由于引入了虚拟内存后,sys_get_time 和 sys_task_info 失效了,需要进行重写。 这里解释一下为什么会失效:以 sys_get_time 为例,用户在发起系统调用时,传入的参数 _ts 是用户态下的虚拟地址,它需要借助内核的软件地址转换机制,查找任务对应的页表,将 _ts 转换为物理地址,再对该地址处的值进行填充。这里可以使用 page_table.rs 中预先实现好的 translated_byte_buffer,它将一整个虚拟地址段翻译为一系列的物理地址段(每页一段),这样如果结构体 TimeVal 和 TaskInfo 横跨多个页面也同样适用。 注意,内核态代码中的地址仍然是虚拟地址,只不过在 rCore 中,内核态的低 256GB 为直接映射,因此好像内核代码在直接访问物理地址,其实还是虚拟地址。 实现 mmapPOSIX 标准中的 mmap 是将一个文件或其他对象的数据映射到进程的地址空间中,而本实验需实现的 mmap 则为简化版本,只是简单地向进程地址...

2025-09-23
QEMU内存后端文件与FUSE兼容性问题及其定位
最近想要将文件系统和 QEMU 模拟器结合起来做一些实验性的工作,需要使用 QEMU 内存后端文件的特性。前面的进展都很顺利,但是待准备工作都完成后,却遇到了模拟器无法启动的问题,好在最终还是解决了,接下来便一一细说。 环境准备我的基本开发环境为 QEMU 6.2 版本,Linux 5.10 版本内核,面向架构为 x86_64。这部分环境的准备没有遇到什么大问题,只是需要注意我选用的版本相对较老,在使用较新的编译器编译时可能会报出警告,因此需要在编译前的 configure 阶段将 Werror 的 flag 禁用,以免在编译时将警告当作错误来对待。 例如对于 QEMU 来说,configure 的命令为: 1$ ./configure --target-list=x86_64-softmmu --disable-docs --disable-werror 这里最好也加上 --disable-docs,因为编译文档的工具链同样容易由于版本问题导致编译失败。 文件系统方面,我当前的需求是需要实现一个最简的堆叠式加密文件系统,无需关注具体的加密算法是什么。一般来说,有两种方案:...







