摘要: 本次实验是有关内存页懒分配的。所谓内存页懒分配,在本实验中,指的是在用户进程使用 sbrk() 系统调用来增加内存中堆的空间时,我们不直接在物理内存中分配相应的页,而是只是记录了分配到了哪些用户地址,在用户页面表中这些地址默认标记为无效。当进程首次尝试使用任何给定页面的懒惰分配内存时,CPU会生成一 阅读全文
posted @ 2024-04-24 14:46 hankeke303 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 本实验主要是关于如何使用陷阱实现系统调用的。 RISC-V assembly (easy) 这个部分主要是回答一些问题。 首先我们按照实验的指示,运行下面的命令得到一份容易读懂的汇编和 C 结合的代码,位于 user/call.asm。 make fs.img Question 1 Which re 阅读全文
posted @ 2024-04-24 14:43 hankeke303 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 实验开始前的折腾 突然发现 2023 版的和 2020 版的实验内容其实还不一样…… 因为我正在看的视频以及参考资料都是基于 2020 版的课程,因此我还是决定将之前的实验都迁移到 2020 版的 xv6-lab-2020 来。 在自己的 Macbook Air 上折腾了好久……还是没能成功。 因此 阅读全文
posted @ 2024-04-24 14:42 hankeke303 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 这一个实验的主要内容就是给 xv6 添加两个系统调用:trace 和 sysinfo。 Using gdb (easy) 这个部分我就不做了…… M1 的 Macbook Air 上的 gdb 太难安装了,所以暂时用不了 gdb 调试…… System call tracing (moderate) 阅读全文
posted @ 2024-04-24 14:40 hankeke303 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 环境准备 不得不说,在 M1 的 Macbook Air 上写这个实验还挺费劲…… 我尝试根据课程的官方指引安装了 qemu 和 riscv-tools,结果总是遇到各种奇怪的问题…… 首先,根据官方的指导,我应该这样安装 riscv-tools: brew tap riscv/riscv brew 阅读全文
posted @ 2024-04-24 14:38 hankeke303 阅读(22) 评论(0) 推荐(0) 编辑
摘要: 终于到最后一个 Lab 啦! 这个 Lab 的任务是实现一个代理服务器,将客户端发送的请求转发到服务端。 这个 Lab 分为三个任务,第一个任务需要实现这个代理服务,第二个任务支持处理并发请求,第三个任务需要实现缓存。 Part I: Implementing a sequential web pr 阅读全文
posted @ 2024-04-24 13:38 hankeke303 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 本次实验的内容也比较清晰,只需要完成一个手写的 malloc 动态内存分配器即可。 书上第 \(9\) 章第 \(9\) 节介绍了这样的分配器的实现方法。 实验要求 本次实验提供了基本的框架,需要完成下面几个函数: int mm_init(void); void *mm_malloc(size_t 阅读全文
posted @ 2024-04-24 13:36 hankeke303 阅读(322) 评论(0) 推荐(0) 编辑
摘要: 本次实验的任务很清晰,实现一个简单的 Unix Shell。需要用到基础的进程控制、信号处理等知识。 简单来说,实验已经提供了一些简单的功能,我们需要在此基础上,实现下面的功能: eval:解析和解释命令行的主例程。[70行] builtin_cmd:识别并解释内置命令 quit(退出)、fg(前台 阅读全文
posted @ 2024-04-24 13:32 hankeke303 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 到实验 5 啦! 这次的实验是有关高速缓存的。 让我们先来复习一下高速缓存的基础知识吧! 复习 高速缓存的结构 在一个存储器地址有 \(m\) 位的系统上,一共有 \(M = 2^m\) 个地址。假设高速缓存被组织成一个有 \(S = 2^s\) 个高速缓存组的数组,其中每个组包括 \(E\) 个高 阅读全文
posted @ 2024-04-24 13:31 hankeke303 阅读(80) 评论(0) 推荐(0) 编辑
摘要: 本次实验是有关书上第四章设计的 Y86-64 处理器的,实验分为三个部分,分别是编写几个简单的 Y86-64 程序、使用一条新指令扩展 SEQ 模拟器以及优化 Y86-64 的基准测试程序和处理器设计。 实验准备 需要简单复习一下 Y86-64 的指令集架构以及处理器架构呢。 指令集架构 指令集: 阅读全文
posted @ 2024-04-24 13:28 hankeke303 阅读(47) 评论(0) 推荐(0) 编辑
摘要: 书接上回,这次做到了第三个 Lab 啦。 任务描述 这一个 Lab 的任务就更有意思了,实验给了我们两个程序,每个程序都会让我们输入一行字符串,而它们是通过下面这个函数来读取的: unsigned getbuf() { char buf[BUFFER_SIZE]; Gets(buf); return 阅读全文
posted @ 2024-04-24 13:24 hankeke303 阅读(24) 评论(0) 推荐(0) 编辑
摘要: 第二个 Lab 就比较有趣了。 这一个 Lab 的任务是,我们得到了一个 bomb 炸弹程序,这个炸弹程序有 \(6\) 个 phase,每个 phase 都会读取我们的输入,判断我们的输入是否符合要求,如果正确这个 phase 的炸弹就会被拆除,否则炸弹就会爆炸。我们需要借助各种工具,对程序进行反 阅读全文
posted @ 2024-04-24 13:15 hankeke303 阅读(13) 评论(0) 推荐(0) 编辑
摘要: 本文原发于 2023-09-02 15:32:57 于我的 hexo 博客,现迁移至此。 最近看完了 CSAPP 整本书,发现官网上还有 11 次实验可以做。 UPD:好像只有 9 个,因为有两个是旧版本的,可以被新版的替代掉。 UPD:好像只有 8 个,performance 也算是旧的实验了,但 阅读全文
posted @ 2024-04-24 13:12 hankeke303 阅读(12) 评论(0) 推荐(0) 编辑
摘要: CMU 15-751 课程第三课笔记。 接上回 CMU15-751-2。 同样照抄参考了 Lecture Note。 今天学习的是阶乘和二项式系数的渐进分析,这两种的出现频率非常高,因此我们很有必要熟悉他们的渐进方法。这也是我们做更多渐进分析的练习的机会。 阶乘(Factorials) \(n! = 阅读全文
posted @ 2024-04-24 12:57 hankeke303 阅读(5) 评论(0) 推荐(0) 编辑
摘要: CMU 15-751 课程第二课笔记。 CS Theory Toolkit at CMU - YouTube 照抄参考了 Lecture Note。 渐进标记(Asymptotic Notation) 我们知道 \[\sum_{i=1}^n i = \frac{n(n+1)}2 = \frac 12 阅读全文
posted @ 2024-04-24 12:53 hankeke303 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 搬运自本人知乎文章。 https://zhuanlan.zhihu.com/p/588646549 M. Rock-Paper-Scissors Pyramid 题目链接 Problem - M - Codeforces 题意 有一个长度为 \(n\) 的石头剪刀布序列,每个元素是 RPS (石头、 阅读全文
posted @ 2024-04-24 11:36 hankeke303 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 本文搬运自本人的知乎文章。 https://zhuanlan.zhihu.com/p/588162564 好久没有在补题之后写题解的习惯了。 但是最近感觉有些题目的思路即使在题目通过后仍然难以理清,因此觉得需要写些东西帮助自己整理思路,另外也方便以后翻看积累到的技巧。 J. Strange Sum 阅读全文
posted @ 2024-04-24 11:35 hankeke303 阅读(21) 评论(0) 推荐(0) 编辑