MIT6.S081学习总结-lab7:Multithreading

本次实验介绍了如何在MIT6.S081课程中实现用户级线程,包括线程创建、切换及barrier同步。通过修改thread_create、thread_schedule和thread_switch.S,实现了线程的上下文切换。实验还涉及到使用pthread库进行多线程操作,并通过互斥锁确保并发安全。此外,详细解释了barrier的原理和实现,其用于同步多个线程,确保所有线程到达特定点后一起继续执行。最后,总结指出xv6中进程与线程的概念,以及线程切换的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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寄存器已经被自动保存了,因此我们只需要手动保存没有被自动保存的

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值