lab7 是多线程相关,将会实现一个用户级线程,使用多线程加速程序以及实现一个barrier
Uthread:switching between threads
实现用户级线程的切换,主要修改thread_create()、thread_schedule()和thread_switch.
实现:
刚开始没怎么懂,照着kernel里的swtch写了一下,竟然过了
新增上下文数据结构:
thread_create里初始化该线程上下文信息中的ra和sp寄存器值,ra是返回地址,就是函数返回之后继续执行的点,sp是栈顶指针
thread_switch.S 里保存寄存器值和加载寄存器值,这里保存的都是callee-save 寄存器,因为caller-save寄存器编译器会自动保存,所以在调用thread_switch前caller-save寄存器已经被自动保存了,因此我们只需要手动保存没有被自动保存的