6.S081|Lab5-Copy-on-Write Fork for xv6
Implement copy-on write (hard) cow(写时复制)机制不难,但是细节真的很容易出错TwT。不过做完这个lab也是收获满满,对虚拟内存的认识直接跨了一大步。 首先来介绍一下写时复制(copy on write)技术,懒得自己写了,直接摘抄大佬们的文章。 以下来自tzyt …
6.S081|Lab4-Traps
RISC-V assembly 以下内容摘自知乎用户rocketeerli 首先,执行 make fs.img 指令,进行编译。然后查看生成的 user/call.asm 文件,其中的 main 函数如下: 这部分没有需要写的代码,主要根据这个编译生成的代码,回答几个问题。 这里直接按照中文翻译了。…
6.S081|Lab3-Page tables
Speed up system calls (easy) 目标是在用户空间和内核间共享一块只读的区域,这样内核执行SYSCALL的时候就不需要来回跑。当每个进程被创立的时候,都会在USYSCALL区域映射一块只读的分页,这里面存了一个结构体usyscall用来存储当前进程的pid。 提示让我们先看k…
6.S081|Lab2-System call
System call tracing(moderate) 没有特别卡住,可以参考网上别人的实现 Sysinfo(moderate) memory part 阅读题目可知,我们需要知道空闲内存和进程数量,并且提示我们前往kernel/kalloc.c添加一个获取空闲内存量的函数,于是推断关于内存分配…
6.S081|Lab2-系统调用流程
系统调用过程当中有几个关键技术点: 系统调用号:用户程序通过指定一个系统调用号来告诉操作系统应该执行哪个系统调用。xv6中使用a7寄存器来传递这个调用号。 系统调用指令:指定系统调用号以后,用户程序执行系统调用指令,该指令会提升特权级只内核态,保存用户程序执行的上下文,然后跳到内核的处理系统调用的代…
CS61C|Lec16-OS
操作系统的基本功能 操作系统是计算机启动时运行的第一个程序。 查找并控制所有设备 操作系统会发现并控制计算机中的所有硬件设备,例如硬盘、网络接口、显示器、键盘、鼠标等。因为每个设备的操作方式不同,操作系统依赖设备驱动程序(device drivers)来与不同的硬件进行通信。设备驱动程序是硬件制造商…
2024年暑期(6到9月)学习心得
为什么挑6-9月作为一个时间阶段? 因为对于在3月还几乎是0基础(算了其实就是0基础)的我来说,前三个月的时间基本上都花在了学习基础语法上了,并没有什么做出来的项目。所以就挑6-9月(致敬大耳朵),也刚好是暑假期间的所学所感,正巧也记录下我人生中第一个没有虚度的暑假吧。 6月份主要把时间花在gitl…
CS61C|Lec15-Caches
二进制前缀 1. 常用前缀(SI和非SI) • Kilo, Mega, Giga, Tera, Peta, Exa, Zetta, Yotta:这些是常用的存储和数据传输前缀,表示不同的数量级。 • SI值 vs. 常见用法:在计算机领域,有时这些前缀的用法和国际单位制(SI)有区别。例如: • “…
CS61C|Lec14-Pipelining
前面介绍了一下关于如何衡量处理器性能,还有一些关于功耗的问题,感觉不太重要就随便听了一下,所以也没记笔记。 Pipelining 用流水线来提高吞吐量 流水线的作用: 流水线不会减少单个任务的延迟,但它可以提高整个工作负载的吞吐量。 流水线允许多个任务同时使用不同的资源。 加速的潜力: 流水线的理论…
6.S081|实验环境搭建
环境介绍,本人使用M1Pro芯片的Macbook,采用orbstack运行x86的Ubuntu22.04容器。 工具链 根据官网介绍(一般在顶部导航栏的Labs下面的tools里面),选择Ubuntu的安装命令,一键安装。 SSH到Orb容器 在VSCode上连接到容器,没什么难点,略过。 安装插件…