2.Lab-6 Multithreading

Uthread: switching between threads (moderate)

Riscv32 Callee寄存器

Name ABI Name Description Saver
x0 zero Zero -
x1 ra Return address Caller
x2 sp Stack pointer Callee
x3 gp Global pointer -
x4 tp Thread pointer -
x5-x7 t0-t2 Temporary registers Caller
x8 s0/fp Saved register/frame pointer Callee
x9 s1 Saved register Callee
X10-x11 a0-a1 Function arguments/return values Caller
x12-x17 a2-a7 Function arguments Caller
x18-x27 s2-s11 Saved registers Callee
x28-x31 t3-t6 Temporary registers Caller
  • Caller:临时寄存器,当发生函数跳转,回来继续执行时,这些寄存器中的数据可能会发生变化
  • Callee:当发生函数跳转,回来继续执行时,默认这些寄存器中的数据不会发生变化。

在本次Lab中,需要保存Callee寄存器

可以完全抄进入内核态时的相关代码:

proc.c的context定义了所有Callee寄存器
swtch.s包含了保存和恢复Callee寄存器的相关代码

代码地址

https://github.com/INnoVationv2/xv6-labs-2023/commit/d6f71098147159d5a378f283a3516714d7aadc0b

image-20240303231433334

Using threads (moderate)

给每个桶加个锁就行

代码地址

https://github.com/INnoVationv2/xv6-labs-2023/commit/1269b6a72aad6a7974636c2e51bf2d56963f79f9

image-20240304001412201

Barrier(moderate)

https://github.com/INnoVationv2/xv6-labs-2023/commit/0a856ed17b7d2ee4cf1d0778233cc48f57b8b87a

image-20240304224656039
posted @ 2024-04-21 00:16  INnoVation-V2  阅读(2)  评论(0编辑  收藏  举报