Skip to content

MIT S081 xv6-labs-2021

我之前25年年初完成了整个 MIT 6.S081 xv6 labs 2021 的课程,之前一直想把笔记整理成博客文章,最近终于抽空把它们整理成了一个专题页。 这个专题页把 MIT 6.S081 xv6 labs 2021 笔记按 lab 拆开整理。

上次更新于:

文章列表

13 篇

MIT S081 Lab 1: Xv6 and Unix utilities

代码: ```c include "kernel/types.h" include "user/user.h" int main(int argc, char *argv[]) {     if(ar

MIT S081 Lab 10: FileSystem

![[Pasted image 20250215093712.png]] 文件以链表方式存储。,固定大小连续存储。文件信息分别存放在链表和目录项中。 `// Disk layout: `// [

MIT S081 Lab 11: mmap

可以通过多种方式调用`mmap`,但本实验只需要与内存映射文件相关的功能子集。_您可以假设`addr`始终为零_,这意味着内核应该决定映射文件的虚拟地址。`mmap`返回该地址,如果失败则返回`0xf

MIT S081 Lab 2: System Call

[mit6.s081] 笔记 Lab2: System calls | 系统调用MIT 操作系统课程 Lab 代码笔记第 - 掘金 一种可能是整个操作系统都驻留在内核中,这样所有系统调用的实现都以管理

MIT S081 Lab 3: Page Table

XV6基于Sv39 RISC-V运行,这意味着它只使用64位虚拟地址的低39位;而高25位不使用。在这种Sv39配置中,RISC-V页表在逻辑上是一个由 $2^{27}$ 个页表条目(Page Tab

MIT S081 Lab 4: Traps

- `stvec`:陷阱处理程序的地址;RISC-V跳转到这里处理陷阱。 ```riscv.h static inline uint64 r_stvec() {   uint64 x;   asm v

MIT S081 Lab 5: xv6 lazy page allocation

这个实验在S081 2021网站上已经没有了,参见国人翻译的实验指导书Lab5: Xv6 lazy page allocation · 6.S081 All-In-One,只能看,2020版是包含这个

MIT S081 Lab 6: Copy-on-Write

准备:切换到 cow 分支 思厥先祖父,暴霜露,斩荆棘,以有尺寸之地。子孙视之不甚惜,举以予人,如弃草芥。 目前 xv6 的 fork 系统调用创建的子进程会赋值父进程所有的用户态内存,如果父进程比较

MIT S081 Lab 7: Multithreading

第一:当进程等待设备或管道I/O完成,或等待子进程退出,或在`sleep`系统调用中等待时,xv6使用睡眠(sleep)和唤醒(wakeup)机制切换。 第二:xv6周期性地强制切换以处理长时间计算而

MIT S081 Lab 8: Network Driver

MIT S081 Lab 9: Lock

_和lab8换一下顺序_ 锁提供了互斥,确保一次只有一个CPU可以持有锁。如果程序员将每个共享数据项关联一个锁,并且代码在使用一个数据项时总是持有相关联的锁,那么该项一次将只被一个CPU使用。在这种情

MIT S081 补充: Findx 与 Buddy

本步骤为xv6-riscv系统增加带首/尾星号通配符的find命令:findx,找到给定目录的文件名部分符合参数要求的所有文件。 注意事项: 1. 命令的源代码位于xv6-riscv/user/目录,

MIT S081 调试与环境笔记

LYBTAARI1YPPOVXSQO2G982CKUL2ZBJ3 快捷键 cd .. 返回上一级目录 ctrl A+ X退出qemu - [x] 参考书: 1.2 I/O和文件描述符 · 6.S081