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
 
Using threads (moderate)
给每个桶加个锁就行
代码地址
https://github.com/INnoVationv2/xv6-labs-2023/commit/1269b6a72aad6a7974636c2e51bf2d56963f79f9
 
Barrier(moderate)
https://github.com/INnoVationv2/xv6-labs-2023/commit/0a856ed17b7d2ee4cf1d0778233cc48f57b8b87a
 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号