操作系统——用户级线程的切换

线程实在一个地址空间下启动并交替执行多个程序。交替执行的多个线程可以由操作系统管理,也可以由用户程序自己管理。由用户程序自己管理的线程对操作系统透明,操作系统完全知道这些线程的存在,这样的线程被称为用户级线程。相应的,由操作系统管理的线程是内核级线程。
在这里插入图片描述
(1)用户级线程的切换就是在切换位置上调用Yield函数
(2)Yield函数完成的基本工作是找到下一个线程的TCB。根据当前线程的TCB和下一个线程的TCB完成用户栈的切换。具体来说,就是将寄存器ESP中的值保存在当前线程的TCB中,然后从下一线程的TCB中取出保存的ESP值赋值给ESP寄存器
(3)在切换到新栈以后用Yield()函数中的“}”将OC指针切换到下一个线程要执行的指令处
(4)当然还需要在线程切换时保存和恢复一些现场,无非是保存一些通用寄存器,这些寄存器的值也要放在线程各自的栈中来保存,在栈切换完成以后弹栈恢复下一个线程的执行现场。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值