Skip to content

Learn MIT 6.s081 course(2020), do the relevant labs of xv6.

Notifications You must be signed in to change notification settings

tianyuxbear/xv6-labs-2020fall

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

课程简介

MIT6.S081: Operating System Engineering 是麻省理工学院的PDOS实验室开设的面向MIT本科生的操作系统课程。PDOS的几位教授基于RISC-V开发了一个教学用操作系统xv6(一个类似于UINX v6的操作系统),课程以xv6为基础,围绕着内核、中断、系统调用、线程、上下文切换、虚拟内存、文件系统、软硬件之间的协调和交互等主题展开讲授。课程不局限于理论知识,每周都会有一个lab,让学生在xv6上增加一些新的机制和特性,帮助学生理解操作系统的众多机制和特性,十分注重学生动手能力的培养。

资源汇总

tip: 本人做的是2020 Fall版本的,课程不同版本之间可能略有差异。

课程网站:https://pdos.csail.mit.edu/6.828/2020/schedule.html

课程教材:https://pdos.csail.mit.edu/6.828/2020/xv6/book-riscv-rev1.pdf

课程视频(youtube): 详见课程网站链接。

课程视频(B站:中英文字幕):https://www.bilibili.com/video/BV19k4y1C7kA/?spm_id_from=333.337.search-card.all.click&vd_source=df845043ad358fe9664225458a65cd42

课程视频中文文档版:https://mit-public-courses-cn-translatio.gitbook.io/mit6-s081/

环境配置

参考:https://pdos.csail.mit.edu/6.828/2020/tools.html

tip: 本人实验环境:WSL2 + Ubuntu20.04

clone实验源码:

 git clone git://g.csail.mit.edu/xv6-labs-2020
 #实验根目录:你git clone 所在目录/xv6-labs-2020
 cd xv6-labs-2020

实验工具配置:

sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu 

# qemu-system-misc fix
# make qemu 命令可能因为qemu-system-misc版本不适配卡住,下面两条命令进行版本替换。
sudo apt-get remove qemu-system-misc
sudo apt-get install qemu-system-misc=1:4.2-3ubuntu6

实验根目录下make qemu, 终端输出$即证明实验环境配置成功。

xv6相关命令:

# 启动xv6===实验根目录中使用
make qemu 
# 清理上次启动生成的文件===实验根目录中使用
make clean
# 退出xv6===xv6系统中使用
Ctrl + A
# 打印进程信息===xv6系统中使用
Ctrl + P

实验导航

Lab1 util: Unix utilities

实验:https://pdos.csail.mit.edu/6.828/2020/labs/util.html

解答:https://codebearjourney.top/mit6.s081/lab1-util

Lab2 syscall: System calls

实验:https://pdos.csail.mit.edu/6.828/2020/labs/syscall.html

解答:https://codebearjourney.top/mit6.s081/lab2-syscall

Lab3 pgtbl: Page tables

实验:https://pdos.csail.mit.edu/6.828/2020/labs/pgtbl.html

解答:https://codebearjourney.top/mit6.s081/lab3-pgtbl

Lab4 traps: Trap

实验:https://pdos.csail.mit.edu/6.828/2020/labs/traps.html

解答:https://codebearjourney.top/mit6.s081/lab4-traps

Lab5 lazy: Lazy allocation

实验:https://pdos.csail.mit.edu/6.828/2020/labs/lazy.html

解答:https://codebearjourney.top/mit6.s081/lab5-lazy

Lab6 cow: Copy-on-write fork

实验:https://pdos.csail.mit.edu/6.828/2020/labs/cow.html

解答:https://codebearjourney.top/mit6.s081/lab6-cow

Lab7 thread: Multithreading

实验:https://pdos.csail.mit.edu/6.828/2020/labs/thread.html

解答:https://codebearjourney.top/mit6.s081/lab7-thread

Lab8 lock: Parallelism/locking

实验:https://pdos.csail.mit.edu/6.828/2020/labs/lock.html

解答:https://codebearjourney.top/mit6.s081/lab8-lock

Lab9 fs: File system

实验:https://pdos.csail.mit.edu/6.828/2020/labs/fs.html

解答:https://codebearjourney.top/mit6.s081/lab9-fs

Lab10 mmap: Mmap

实验:https://pdos.csail.mit.edu/6.828/2020/labs/mmap.html

解答:https://codebearjourney.top/mit6.s081/lab10-mmap

Lab11 net: Network stack

实验:https://pdos.csail.mit.edu/6.828/2020/labs/net.html

解答:https://codebearjourney.top/mit6.s081/lab11-net

工具使用

QEMU中使用GDB

参考:https://gwzlchn.github.io/202106/6-s081-lab0/#%E5%86%99%E5%9C%A8%E5%89%8D%E9%9D%A2%E7%9A%84%E8%AF%9D

QEMU中使用GDB进行调试时需要打开两个终端窗口(均在实验根目录下)

  1. 窗口1 运行xv6
  2. 窗口2 进行gdb
# 窗口1
make qemu-gdb
# 窗口2
gdb-multiarch

若窗口2呈现如上图所示,则证明GDB启动成功。

如果窗口2呈现与上图不同,

# 第一次执行gdb-multiarch时先执行下这行命令
echo "add-auto-load-safe-path $(pwd)/.gdbinit " >> ~/.gdbinit

tip: 上面执行完就可以对xv6 kernel进行调试了。

如何对xv6系统中单个程序进行调试?

以ls为例:

gdb窗口中:

# ls.c 编译为_ls, 读取_ls中的符号
file user/_ls  
# ls.c的main函数中打上断点
b main
# 继续运行
c
# 然后xv6系统会运行到`$` 处,系统启动成功。
# $ 后输入ls,回车(xv6启动窗口中),ls并未执行,停留在main断点处。
# 让ls正常输出
c

About

Learn MIT 6.s081 course(2020), do the relevant labs of xv6.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published