详解上下文切换
2024-08-12 13:53:20
- xxx
进程上下文切换是在进程级别进行的切换,意味着CPU从执行一个进程切换到执行另一个进程。因为进程具有独立的地址空间,所以在切换时需要保存和恢复较多的上下文信息,成本较高。
线程上下文切换是在线程级别进行的切换,意味着CPU从执行一个线程切换到执行同一进程中的另一个线程。因为线程共享进程的地址空间,在切换时只需要保存和恢复较少的上下文信息,所以成本较低。
所以,从上面这段我是不是可以这么理解:
无论是进程上下文切换,线程上下文切换,协程上下文切换。都会涉及到CPU的上下文切换,内存堆栈的上下文切换(包括内核态虚拟地址空间和用户态虚拟地址空间)、内存管理上下文、调度信息、线程本地存储(TLS)。唯一的区别在于切换的数据量的多少是不同的。
协程的切换也要涉及CPU寄存器上下文的切换,而用户态无法操作CPU寄存器,也是需要在内核态执行,那么,凭什么说协程切换不涉及内核态呢。
那么,寄存器到底可不可以在用户态清零或者进行上下文切换!
下面是GPT说的:
用户态程序不能直接操作CPU寄存器的上下文切换。寄存器的保存和恢复必须在内核态完成,操作系统负责在进程或线程切换时处理这些操作。用户态的协程切换虽然涉及到寄存器的状态保存和恢复,但这些操作是通过用户态的调度机制来实现的,不直接涉及到内核态。
踏马的这个逻辑,CPU寄存器上下文切换要涉及内核态,协程切换要涉及CPU寄存器上下文切换。最后你跟我说协程切换不涉及内核态,这尼玛什么什么意思?“杀人者非我也,兵也?”
所以,CPU是存在内核态的寄存器的?但是,最起码的PC寄存器得变吧。
进程上下文切换涉及进程级资源,线程上下文切换仅涉及线程级资源,那么协程上下文切换仅涉及协程级资源。
参考文献
《操作系统真相还原》
《x86汇编语言-从实模式到保护模式》