开始写个人博客了
发表于|更新于|经验
|总字数: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-08-13
MIT6.s081 2021 Lab Copy on-write
Implement copy-on write背景xv6 使用 fork() 系统调用创建子进程时,需要将父进程的地址空间进行 深拷贝 ,即将页表和实际物理空间同时进行拷贝,以实现父进程和子进程地址空间的独立性。但很多时候,如 shell 程序,fork() 通常与 exec() 搭配使用,首先使用 fork() 创建子进程,随后在子进程中使用 exec() 将指定的程序加载到当前地址空间,这样在 fork() 中进行的地址空间拷贝就白白浪费了。 本实现要求实现一个写时复制(copy-on write)的 fork() 系统调用。具体来说,在进行虚拟内存拷贝时,不直接进行物理内存的拷贝,只是将父进程的页表复制给子进程,这样子进程和父进程的每个虚拟页面都指向了同一个物理页面,当子进程需要对某个虚拟页面进行写入时,为了保证父进程和子进程之间的独立性,子进程此时将进行物理内存的分配和拷贝,再进行写入。 实现方案根据提示,可以将上述的写时复制的思路用 异常 的方式来实现。 首先可以利用页表项的 flags 中的 RSW 位来表示页表项是否为 COW 页,以便后续的异常处理。 修改 uvm...

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 ...

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,因为编译文档的工具链同样容易由于版本问题导致编译失败。 文件系统方面,我当前的需求是需要实现一个最简的堆叠式加密文件系统,无需关注具体的加密算法是什么。一般来说,有两种方案:...

2024-09-25
CSAPP Attack Lab
个人感觉非常有意思的一个 Lab,涉及的知识面比较窄,主要关注 缓冲区溢出漏洞 这一个方面,并基于此进行代码攻击,体验一把做黑客的感觉,对应知识点为书中的 3.10 节内容。 这个 Lab 上手便给了我当头一棒,在环境配置上琢磨了好一阵。直接运行 ./ctarget -q ,程序没有让进行输入,而是直接触发了段错误,后来尝试在跑在学校的 Linux 服务器上得以正常运行,原因不明,推测是 WSL 的锅?? phase_1在倒腾好环境之后,终于可以开始着手完成实验了。 phase_1 要求我们在调用 getbuf 读取标准输入后,不返回到 test 函数接着执行 printf,而是转而执行 touch1. 123456void test(){ int val; val = getbuf(); printf("No exploit. Getbuf returned 0x%x\n", val);} 可以利用书中 3.10.3 节提到的知识,向缓冲区中写入过量的数据,大到足以覆盖掉调用 getbuf 时压入栈中的返回地址,将其...







