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