开始写个人博客了
发表于|更新于|经验
|总字数: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-12-23
个人常用git命令整理
由于最近刚刚快速过完了一遍《Pro Git》,因此想要将个人比较常用的 git 命令整理出来,以便需要时翻看。因此本文是一个个人向的笔记,不会涉及对 git 原理的介绍,这部分的具体内容可以参考《Pro Git》。 准备阶段初始化配置12345678# 全局配置文件位置~/.gitconfig# 全局配置用户名git config --global user.name <your_name># 全局配置邮箱git config --globale user.email <your_email> 新建仓库12345# 本地初始化仓库git init <repo_name># 远程克隆仓库git clone <repo_url> 工作阶段查看日志123456789# 查看当前分支提交日志git log# 查看 HEAD 指针的变动日志git reflog# 查看当前仓库状态# 包括未跟踪文件、工作区变更、暂存区内容git status 提交文件123456789# 将工作区更新文件存入暂存区git add <file_path&...

2024-07-01
MIT6.s081 2021 Lab Page tables
Speed up system calls思路题目要求在每个进程初始化时为它的页表插入一个页表项,内核通过这样预先缓存页表项的操作,来加速特定系统调用的执行速度。 由于前不久刚过完一遍《OSTEP》,因此我认为自己对页表机制还算比较熟悉,应对本 Lab 理应比较轻松,但在真正上手的时候,还是觉得有些无所适从,无奈老老实实地把 xv6 手册的第 3 章对照着代码仔细研读了一番,从中提炼出了几个关键的函数: kernel/kalloc.c:kalloc 1void *kalloc(void); 遍历空闲链表,寻找一个可分配的物理页面。若找到,返回该页面的首(物理)地址;否则,返回 0 (空指针)。 kernel/kalloc.c:kfree 1void kfree(void *pa); 释放已分配的首地址为 pa 的物理页面,并更新空闲链表。 kernel/proc.c:allocproc 1static struct proc *allocproc(void); 遍历进程数组 proc,寻找未被使用的 struct proc。若找到,则初始化其状态,为创建一个新的页表,...

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

2021-08-31
链表连接出错
太久没接触数据结构了,导致链表这一块的内容有点生疏了,这两天在做一道链表相关的题时出现了一点问题,在此记录一下以免之后再犯。 问题描述题目链接两数相加 链表定义1234567struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int x) : val(x), next(nullptr) {} ListNode(int x, ListNode *next) : val(x), next(next) {}}; 解题思路本题很常规,两链表相应位相加得到新链表对应位的值。首先要创建两个个空指针,一个作为新链表的头节点,指向两数相加结果的第一位;一个用以指向链表的子节点,并为其赋值两链表对应位的值相加的结果,最后返回头节点。 错误代码123456789101112131415161718192021222324252627282930313233...

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






